在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()则必须与客户端沟通,告知其重新要求指定的资源。