大可制作:QQ群:31564239(asp|jsp|php|mysql)

JSP/Servlet: Servlet/JSP 的对象对应

在JSP中可以使用 request、response、session 等等的隐含对象,这些隐含对象在转换为Servlet之后,会对应于Servlet中的一些类型,这在之前谈论隐含对象时曾经说明过,如果您会使用隐含对象,并了解如何撰写Java程序,那么您对于在Servlet中如何使用相对应的对象并不困难,在这边则只看看如何在Servlet中取得这些对应的对象,然后您可以回顾一下之前介绍过的JSP隐含对象,了解这些对象可以如何应用。

request对应于HttpServletRequest,而response对应于HttpServletResponse,如果您继承 HttpServlet,在Container调用Servlet的service()方法,或是接下来的doXXX()等方法,都会以这两个对象作为参 数传入:
 service(HttpServletRequest req, HttpServletResponse res)
 doGet(HttpServletRequest req, HttpServletResponse res)
 doPost(HttpServletRequest req, HttpServletResponse res)
 ....
 

application 对应于 ServletContext,在继承GenericServlet或其子类,您可以使用getServletContext()方法取得其实例。

config 对应于 ServletConfig,在继承GenericServlet或其子类,您可以使用getServletConfig()方法取得其实例。

session 对应于 HttpSession,在Servlet中要取得HttpSession对象,您可以由HttpServletRequest对象取得,例如:

 public void doGet(HttpServletRequest req,
                   HttpServletResponse res)
                      throws ServletException, IOException {
    HttpSession session = req.getSession();

    // ....
}
 
req.getSession()其实是req.getSession(true)在Servlet 2.1之后提供的方便用法,当getSession()中设定的是true时,表示目前如果有有效的HttpSession对象,则传回该对象,如果没有 有效的HttpSession对象,则建立一个新的HttpSession对象,如果getSession()中的参数设定为false,则在没有有效 HttpSession对象的情况下,不建立新的HttpSession对象,直接传回null。

另外,在JSP中可以方便的使用<jsp:forward>或<jsp:include>来转发或包含另一个资源,以达成 request与response的控制权转移,在Servlet中,这则是透过实现RequestDispatcher接口的对象来达成,例如,若您要 转发(或包括)一个请求与回应则必须这么作:
public void doGet(HttpServletRequest req,
                   HttpServletResponse res)
                      throws ServletException, IOException {
    // ....
    RequestDispatcher dispatcher =
                 req.getRequestDispatcher("other.jsp");
    dispatcher.forward();  
    // dispatcher.include();  如果要 include 的话用这个
    // ....
}
 
forward与sendRedirect()的作用有些类似,主要的差别在于forward的动作完全在服务器内完成,它是将request与 response的控制权转移给另一个资源,由该资源直接回应用户端,在转发之前您可以对request作一些前置处理,然后再由另一个资源作 response,而sendRedirect()则必须与用户端沟通,告知其重新要求指定的资源。