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