在学习Servlet之前,首先了解下Web应用程序的访问过程:
用户在浏览器中输入一个网址后按(Enter),浏览器会向服务器发送一个HTTP请求;服务器端程序接收这个请求,并对请求进行处理,然后发送一个回应;浏览器收到回应,再把回应的内容显示出来,这种请求—响应(Request—Response)就是典型的Web应用程序访问过程。 JavaWeb应用程序中,处理请求并发送响应的过程是由一种叫做Servlet的程序来完成的。
1、什么是servlet?
servlet是使用应用程序设计接口(API)以及相关类和方法的Java程序,是位于Web服务器内部的服务器端的Java应用程序。servlet是一种实现Javax.servlet.Servlet接口的类,Servlet接口规定了特定的方法处理特定的请求,开发者只需要实现Servlet的相关方法。可简单理解为运行在服务器端的Java程序。
2、servlet的工作流程
(1)浏览器提交请求,由服务器接收并解析,封转成HttpServletRequest类型的request对象。所有的HTTP头类型的数据可以通过request相应的方法获得。
(2)服务器把输出流封转成为HttpServletResponse类型的response对象。通过设置response的属性就可以控制输出的内容。
(3)服务器把request、response作为参数,调用servlet的相应方法,如doPost(request,response)。
3、Servlet生命周期
服务器会在启动或者是第一次请求Servlet时初始化一个Servlet对象,然后使用该对象处理客户端的请求,当服务器关闭时销毁该对象。Servlet从生成到销毁必须经过如下几个步骤。
(1)生成Servlet,加载到Servlet Engine中,并通过调用其init()方法来进行初始化。
(2)通过提供的响应方法来处理客户端的请求。
(3)调用destroy()方法进行销毁,并通过垃圾收集器进行收集清理。
4、HttpServlet常用方法
(1)doGet方法
doGet方法用来处理客户端浏览器直接访问和get方式提交的表单。使用doGet方法进行表单的提交,所传递的参数会直接显示在浏览器的地址栏中。
(2)doPost方法
用来处理表单post方式提交的表单,不能处理客户端浏览器直接访问。doPost方法进行表单的提交,传递的参数不会直接显示在地址栏中,相对doGet方法要安全一些。
(3)service方法
用来处理客户端浏览器直接访问和表单get方式提交的表单以及表单post方式提交的表单。
5、Servlet常用接口
(1)HttpServletRequest接口
request对象其实就是HttpServletRequest接口实现类的一个实例,不过其实例化过程是自动的无须自定义的,是由服务器完成的。在Servlet中request对象也是由容器初始化的,如果要在程序中使用request对象,直接使用就是,无需手动初始化。
(2)HttpServletResponse接口
response对象其实就是HttpServletResponse接口的实现类一个实例,不过其实例化过程是自动的无须自定义的。
(3)HttpSession接口
在Servlet中session对象必须通过request对象的getSession()方法来获得。
HttpSession session = request.getSession();
(4)ServletContext接口
application对象其实就是ServletContext接口实现类的一个实例,不过其实例化过程是自动的无须自定义的。在Servlet中application对象必须通过HttpServlet接口的getServletContext()方法获得。
ServletContext application = request.getServletContext();
5、servlet之间的跳转
(1)请求转发
请求转发(forward)是通过RequestDispatcher对象的forward(request,response)方法实现的。
具体代码如下:
RequestDispatcher dispatcher = request.get RequestDispatcher(“/login_servlet”); //获得RequestDispatcher对象
dispatcher.forward(request,response); //实现跳转
6、下面通过一个例子来说明,如何创建servlet、配置servlet和访问servlet
(1)表单
<form action="servlet/test" method="post"><!--指定提交action和提交method-->
姓名:<input type="text" name="userName"><br>
密码:<input type="password" name="password"><br>
<input type="submit" value="提交">
</form>
(2)创建servlet
public class test extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);//调用doPost处理客户端请求
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//处理客户端提交的post请求,并作出响应
request.setCharacterEncoding("utf-8");//设置页面编码方式
String name = request.getParameter("userName");//获取参数
String password = request.getParameter("password");
System.out.println(name);
System.out.println(password);
}
public test() {
super();
}
public void destroy() {
super.destroy();
} public void init() throws ServletException {}}
(3)配置web.xml
<servlet>
<servlet-name>test</servlet-name>
<servlet-class>cn.ahut.servlet.test</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>test</servlet-name>
<url-pattern>/servlet/test</url-pattern>
</servlet-mapping>
(4)访问
在地址栏中输入:http://localhost:8080/servletExample/
如果是直接访问servlet则输入:http://localhost:8080/servletExample/servlet/test