ch9. servlet

来源:互联网 发布:北洋打印机软件 编辑:程序博客网 时间:2024/06/06 01:43

Servlet(服务器端小程序)是使用Java语言编写的服务器端程序,可以像JSP一样,生成动态的web页面,Servlet主要运行在服务器端,并且由服务器调用执行。

JSP和Servlet的所有程序都是运行在服务器端的。Servlet的处理流程如下:


  • 客户端(可能是web浏览器)通过http提出请求
  • web服务器接收该请求并将其发送给Servlet,如果Servlet尚未被加载,web服务器将把它加载到java虚拟机并且执行它
  • Servlet程序将接收该http请求并处理
  • Servlet将处理后的结果向web服务器返回应答
  • web服务器将从Servlet收到的应答发给客户端。
可以看出,Servlet和JSP一样,需要通过http协议,并且使用web server进行数据的回应
Servlet的实现必须继承HttpServlet类

Class HttpServlet

java.lang.Object  extended by javax.servlet.GenericServlet      extended by javax.servlet.http.HttpServlet

Servlet还有一个特点,就是可以为一个Servlet配置多个映射路径

在所有方法中

doGet

protected void doGet(HttpServletRequest req,                     HttpServletResponse resp)              throws ServletException,                     java.io.IOException

doPost

protected void doPost(HttpServletRequest req,                      HttpServletResponse resp)               throws ServletException,                      java.io.IOException
是两个最常用的方法。

Servlet的生命周期

Servlet程序是运行在服务器上的一段java程序,其生命周期收到web容器的控制,生命周期包括:加载程序,初始化,服务,销毁,卸载五个过程


  1. 加载:Web容器负责加载Servlet,当web容器启动时或者第一次使用这个Servlet时,容器会负责创建Servlet实例,但是用户必须通过部署描述符(web.xml)指定Servlet的位置(Servlet所在的包.类名称),加载成功后,web容器会通过反射的方式对Servlet进行实例化
  2. 初始化:当一个Servlet被实例化后,容器调用init()方法初始化这个对象,初始化的目的是为了让Servlet对象在处理客户端请求钱完成一些初始化的工作,如建立数据库连接,读取资源文件信息。如果初始化失败,则此Servlet将被直接卸载
  3. 处理服务:导尿管有请求提交时,Servlet将调用service方法(通常是doGet()或doPost())进行处理 ,在service方法中,Servlet可以通过ServletRequest接收客户的请求,也可以利用ServletResponse设置相应信息。
  4. 销毁: 当web容器关闭或检测到一个Servlet要从容器中被删除时,会自动调用destroy()方法,以便释放掉所占用的资源
  5. 卸载:当一个Servlet调用玩destroy()后,此实例将等待被垃圾收集器所回收,如果需要再次使用此Servlet时,会重新调用init()方法初始化

关于销毁,有两种情况:
  • 容器关闭
  • 一个Servlet长时间不用
还有一种开发中的可能性:执行了reload
还有要注意的是,如果程序中覆写了service方法是,doGet和doPost不再使用


初始化配置信息
public void init(ServletConfig config)          throws ServletException
如果覆写两个init方法,只有取得配置参数的初始化方法起作用
private String initParam = null;public void init(ServletConfig config) throws ServletException {// Put your code herethis.initParam = config.getInitParameter("ref");}
取得其他内置对象
Servlet本身只提供request和response对象,要想取得session对象,只能依靠request对象。

在Servlet中要想取得一个session对象,则可以通过HttpServletRequest接口完成

HttpSession getSession(boolean create)
HttpSession getSession()

public ServletConfig getServletConfig()
取得ServletContext对象

Servlet跳转

客户端跳转:地址栏跳转之后改变,无法传递request对象,是在所有操作执行完成之后才发生的操作。语法:response.sendRedirect()
public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {request.getSession().setAttribute("name", "tttttt");request.setAttribute("info","thystar");response.sendRedirect("get_info.jsp");}


服务器端跳转:地址栏不改变,而且可以传递request范围的属性,属于无条件跳转,只要执行到了,则立刻执行跳转。语法<jsp:forward>
在Servlet中没有<jsp:foward>这样的命令,必须依靠Interface RequestDispatcher完成
其提供的方法有
void forward(ServletRequest request, ServletResponse response)             throws ServletException,                    java.io.IOException
页面跳转
void include(ServletRequest request,ServletResponse response)             throws ServletException,                    java.io.IOException
页面包含实例化接口对象使用ServletRequest接口中提供的
RequestDispatcher getRequestDispatcher(java.lang.String path)
取得RequestDispatcher接口实例
public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {request.getSession().setAttribute("name", "tttttt");request.setAttribute("info","thystar");RequestDispatcher rd = request.getRequestDispatcher("get_info.jsp");rd.forward(request, response);}



《Java Web开发实战经典--基础篇》笔记

0 0
原创粉丝点击