应用级核心:私人定制之-SERVLET-技能实战(二)

在进行Java-Web编程时,最基础核心的技术是Serv.let,掌握此技能的关键类和API以及核心应用,是每个合格Java-Web工程师的基本要。接下来,理论结合实践,我们就来理解和掌握这项关键技能。

注意:下文代码中的.或-在运行时自行删除即可^+^

一、Http-Servlet接口及依赖类

概括的讲,在具体运用Java Web基础核心技术进行Serv.let编程时,作为开发者来讲,主要要搞清楚Http-Servlet的接口以及其依赖的类,就完成掌握了Java Web编程的精髓了。为能全盘把握Servlet编程的精髓,看下在编程是主要面对的类的关系如何:

这就是在编程是需要面对的类,主要就是4类,分别为1个抽象类Http.Serv.let和3个接口Http-Servlet-Request、Http-Servlet-Response以及Http-Session。可以把Http-Servlet看作是开发人员的工作舞台,而另外三个接口,则是由容器为编程者提供的可用工具对象(其对应的接口对象不需要开发者创建,而是由容器根据需要创建的,开发人员只负责创建Servlet实现类,并调用关联的接口,实现业务的应用逻辑控制)。

下面总体介绍类和接口的主要方法

(一)HttpServ-let常用接口方法

1.protected void doOptions(Http-Servlet-Request req, Http-Serv-letResponse resp):由服务器调用(通过服务方法

service)允许servlet处理OPTIONS请求;

2.protected void doPost(Http-Serv-letRequest req, Http-Serv-letResponse resp):由服务器调用(通过服务方法service)允许serv-let处理POST请求;

3.protected void doPut(HttpServ-letRequest req, HttpS-ervletR-esponse resp): 由服务器调用(通过服务方法service)允许servlet处理PUT请求;

4.protected void doTrace(HttpServ-letRequest req, HttpServl-etResponse resp): 由服务器调用(通过服务方法service)允许servlet处理TRACE请求;

5.protected long getLastModified(HttpServ-letRequest req): 返回上一次修改HttpServ-letRequest对象的时间,以毫秒为单位,从1970年1月1日GMT开始。

6.protected void service(HttpS-ervletRequest req, HttpS-ervletResponse resp): 从公共服务方法接收标准的HTTP请求,并将它们分派到此类中定义的doXXX方法。

7.public void service(Serv-letRequest req, Serv-letResponse res): 将客户端请求调度或派遣到受保护的服务service方法。

(二)HttpServ-letRequest常用接口方法

1.public Cookie[] getCookies():返回一个包含客户端发送的所有Cookie对象的数组;

2.public String getQueryString():返回路径后请求URL中包含的查询字符串;

3.public String getParameter(String):获取指定参数名的值;

4.public Http-Session getSession():返回与此请求相关联的当前会话,或者如果请求尚无会话,则创建一个会话。

5.public HttpSession getSession(boolean): 返回与此请求相关联的当前HttpSession,如果没有当前会话,并且create为true,则返回一个新会话;

6.public RequestDispatcher getRequestDispatcher(String path): 返回一个RequestDispatcher对象,该对象充当位于给定路径的资源的包装器。

7.其它接口方法请参照:官-方规范定义

(三)HttpServletResponse常用接口方法

1.public void addCookie(Cookie cookie):向响应对象中添加指定的Cookie;

2.public String encodeRedirectURL(String url): 对指定的URL进行编码,以在sendRedirect方法中使用,或者如果不需要编码,则返回URL不变;

3.public String encodeURL(String url): 对包含会话ID的URL进行编码,或者如果不需要编码,则返回URL;

4.public void sendRedirect(String location): 使用指定的重定向URL位置向客户端发送临时重定向响应;

5.public PrintWriter getWriter():返回可以向客户端发送字符文本的PrintWriter对象.在servlet中可以实现向页面输出显示内容;

6.public void setCharacterEncoding(String charset): 设置发送给客户端的响应的字符编码(MIME字符集),例如UTF-8。

7.其它接口请参照标准规范

(四)HttpSession常用接口方法

1.public Object getAttribute(String name): 返回在此会话中使用指定名称绑定的对象,如果在名称下没有绑定对象,则返回null;

2.public Enumeration getAttributeNames():返回包含绑定到此会话的所有对象的字符串名称的枚举集合;

3.public ServletContext getServletContext():返回此会话所属的ServletContext(Web应用上下文对象);

4.public void removeAttribute(String name): 从此会话中移除与指定名称绑定的对象;

5.public void setAttribute(String name, Object value): 使用指定的名称将对象绑定到此会话;

6.public void setMaxInactiveInterval(int interval): 指定会话有效期,时间(以秒为单位);

7.其它接口请参照相关标准规范。

二、[Servlet]应用实战

(一)实战要求

通过前面对Java Web规范和理论上的介绍和描述,应该可以较透彻的Serv.let的运行机制了。那么接下来,我们应用Serv.let的编程技术进行常规web应用开发,来更深入的理解Servlet的核心处理机制和编程步骤。

在此次Servlet的实战学习,假设已经创建了Java Web项目工程,基于这个工程,我们需要开发2个简单的页面和一个Servlet实现子类以及web.xml配置文件。

Servlet常规编程步骤要求:

1、编写继承javax.servlet.http.HttpServlet类的子类;

2、实现父类的doGet和doPost方法(或其他需要实现的方法);

3、在子类定义一个供get/post方法调用的requestHandler方法;

4、创建登录JSP页面,实现前端和服务端Servlet控制器的交互关联;

5、创建成功登录后响应JSP页面,实现Servlet处理后的响应结果;

6、在web.xml中配置Servlet类,实现所创建Servlet访问资源化(即访问URL)。

(二)应用编程

基于企业版Eclipse IDE进行应用编程。

1、右键点击项目,选择New菜单下的Servlet项(若无此项进入到Other中去找);

2、确定类所在的包并规范命名新建的Serv.let子类(此处命名为:LoginController);

3、在弹出的窗口中,点击Next按钮,最后点击完成,生成Servlet类框架代码;

4、删除自动生成代码中的注释以及并注释@WebServlet所在行,骨架代码如下:

/**

* Servlet 实现类 ControllerServlet

*/

//@WebServlet("/loginHandler")

public class LoginController extends HttpServ-let {

private static final long serialVersionUID = 1L;

//Servlet构造器

public ControllerServlet() {

super();

}

protected void doGet(HttpServletR-equest request, HttpServletR-esponse response) throws ServletException, IOException {

//业务代码

}

protected void doPost(HttpServletR-equest request, HttpServl-etResponse response) throws ServletException, IOException {

//业务代码

}

}

5、在骨架代码中定义requestHandler方法并实现业务逻辑,其实现如下:

参考代码

/**

* 请求处理器:处理客户端发送给服务端的请求

* @param request

* @param response

* @throws ServletException

* @throws IOException

*/

protected void requestHandler(HttpServ-letRequest request, HttpServ-letResponse response) throws ServletException, IOException {

//获取用户名和密码:假设用户名和密码分别为solo和123ccc时,表示登录成功,否则表示失败。

String userName = request.getParameter("userName");

String password = request.getParameter("password");

//通过if语句判断登录结果情况或创建会话对象:

/*HttpSession session = request.getSession(false);

if(session==null){

session = request.getSession(true);

//根据需要向会话绑定相关数据

//session.setAttribute("objName", obj);

}*/ if((userName!=null&&userName.equals("solo"))&&(password!=null&&password.equals("123ccx"))){

request.setAttribute("loginResult", "登录成功!");

}else{

request.setAttribute("loginResult", "登录失败:用户名/密码不匹配!");

}

//转发到登录结果页面

request.getRequestDispatcher("result.jsp").forward(request, response);

}

之所以创建此方法,主要是为提供代码的复用,为Servlet的相关处理方法,提供简洁的统一处理模式。当然,别忘了在相应的Servlet方法中调用此方法,即在POST方法和GET方法中进行调用:requestHandler(request,response)。

6、创建登录页面和处理结果页面:login.jsp和result.jsp。(关于页面创建另篇讲解)

分别在创建的login.jsp和result.jsp页面的body标签内容添加如下内容:

login.jsp参考代码:

<fieldset>

<form action="loginHandler" method="post">

<legend>输入用户名密码</legend>

<input type="text" id="userName" name="userName"><br>

<input type="password" id="password" name="password"><br>

<hr>

<input type="submit" value="登录" /> &nbsp;&nbsp;<br>

</form>

</fieldset>

result.jsp参考代码:

<h2>登录结果</h2>

<!-- 利用JSP的EL表达式展现登录结果。

也可利用JSP页面java代码实现登录结果呈现

登录结果:String result=request.getAttribute("loginResult");

-->

<div>${loginResult}</div>

7、配置web.xml,资源化所创建的Servlet登录处理类。Servlet的配置代码如下:

在web.xml中配置Servlet的代码:

<servlet>

<servlet-name>LoginController</servlet-name>

<servlet-class>com.xs.servlets.LoginController</servlet-class>

</servlet>

<servlet-mapping>

<servlet-name>LoginController</servlet-name>

<url-pattern>/loginHandler</url-pattern>

</servlet-mapping>

注意:

关于Servlet的配置,这里是通过传统的方式实现的,即通过应用的web.xml进行配置,现在还有一种方式,就是通过Servlet内置的标注或注解进行配置。注解配置Servlet比较简洁,如果想使用注解,你可以把web.xml中的配置内容注释掉,然后启用创建Servlet类时注解就可以,注意资源url的命名和引用(反斜杠的取舍)。

作为初学者,建议使用web.xml方式,可以更多的了解Servlet的容器实现机制,若随着深入的学习,使用注解的方式则更高效,但若要修改url访问符,则比较麻烦得在代码中进行修改并编译。记得整个项目组或团队要保持一致即可。

(三)检测运行

至此,我们就可以运行这个Web项目,来检验我们辛苦编程的结果了:

在确保Web项目有可运行的服务器(如Tomcat),右键点击项目,选择Run As菜单下的Run on Server(也可选择调试模式来运行,以便跟踪代码的执行情况:需要设置断点)。

等待程序运行的结果吧。

至此,我们对Servlet编程以及原理都应该比较清楚了,同时也能更深的了解Servlet容器的运作原理。

具体在进行Servlet编程时,只需要继承HttpServlet类来编写自己的Servlet子类就可以了,在需要实现的方法内实现相应的业务逻辑就OK了。

附送原理彩蛋:

Servlet生命周期

服务架构和运行机制

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

热门产品

php编程基础教程.pptx|php编程培训,php,编程,基础,教程,pptx
php编程基础教程.pptx

历史上的今天:04月19日

热门专题

开放大学|开放大学报名,开放大学报考,开放大学,什么是开放大学,开放大学学历,开放大学学费,开放大学报名条件,开放大学报名时间,开放大学学历,开放大学专业
开放大学
云南开放大学|云南开放大学报名,云南开放大学报考,云南开放大学,什么是云南开放大学,云南开放大学学历,云南开放大学学费,云南开放大学报名条件,云南开放大学报名时间,云南开放大学学历,云南开放大学专业
云南开放大学
弥勒综合高中|弥勒综合高中
弥勒综合高中
安徽中源管业|安徽中源管业,安徽中源管业mpp电力管,安徽中源管业cpvc电力管,安徽中源管业pe穿线管,安徽中源管业电力管,安徽中源管业排水管,安徽中源管业通信管,安徽中源管业管材
安徽中源管业
APP开发|app开发_app开发公司_app软件开发_专业app开发_云南app开发公司_app定制_原生app开发定制
APP开发
自考本科|自考本科有用吗,自考文凭,自考本科文凭,自考文凭有用吗,自考本科文凭有用吗,自考文凭承认吗
自考本科
云南综合高中|云南综合高中
云南综合高中
易捷尔高职单招|易捷尔高职单招,易捷尔高职单招培训,单招分数线,单招录取分数线,高职单招学校分数线
易捷尔高职单招

微信小程序

微信扫一扫体验

立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部