tomcat javaweb开发基础(10servlet(3))

来源:互联网 发布:mac ctrl c 编辑:程序博客网 时间:2024/06/02 13:19
一:使用servlet取得其他的常用对象
从servlet本身的方法定义里可以发现,doGet()和doPost()方法里面直接存在request和response对象,本处只要关心如何取出session,application即可。
   (1)取得session对象
          session对象是接口HttpSession接口的对象,如果想在一个servlet中取得session对象,必须依靠      HttpServletRequest对象。
          ~public HttpSession getSession();
          ~public HttpSession getSession(boolean flag);
代码:
public void doGet(HttpServletRequest req,HttpServletResponse resp)              throws ServletException,java.io.IOException{ HttpSession ses = null ;ses = req.getSession() ; // 取得Session对象System.out.println("**********" + ses.getId()) ;}


(2)取得application对象
application对象是javax.servlet.ServletContext接口的对象。其中最常用的方法:
           ~属性的操作:setAttribute(), getAttribute(),removeAttribute();
           ~取得一个虚拟目录对应的真实路径:getRealPath(String path);
范例1:
<%@ page contentType="text/html;charset=GBK"%><%@ page import="java.io.*"%><h1><%=application.getRealPath(“/”)%></h1>

2.getServletContext()方法
一般application表示的是上下文,但是在实际的开发中,往往很少去直接使用application,而使用getServletContext()方法来表示application.
范例2:
<%@ page contentType="text/html;charset=GBK"%><%@ page import="java.io.*"%><h1><%=getServletContext().getRealPath(“/”)%></h1>      此方法有容器调用,如果非要加上对象的话,则直接加上this关键字。<%@ page contentType="text/html;charset=GBK"%><%@ page import="java.io.*"%><h1><%=this.getServletContext().getRealPath(“/”)%></h1>

在servlet中取得application对象
public void doGet(HttpServletRequest req,HttpServletResponse resp)              throws ServletException,java.io.IOException{ ServletContext app = this.getServletContext() ;   //Class GenericServlet 中定义的方法
System.out.println("*****" + app.getRealPath("/")) ;}

三:Servlet跳转
    前面讲过一个JSP或一个HTML可以很轻松的跳转到Servlet之上,但是如果现在要求使用一个Servlet跳转到其他地方呢?
(1) 客户端跳转:response对象
    在doGet()和doPost()之中直接存在了response对象,就可以直接利用sendRedirect()进行跳转。
   D:\webdemo\\demo.jsp
   <h1>hello!</h1>
   resp.sendRedirect("demo.jsp") ;


OtherServlet.java:
public void doGet(HttpServletRequest req,HttpServletResponse resp)              throws ServletException,java.io.IOException{resp.sendRedirect("demo.jsp") ;}

以上完成了跳转功能,但是如果现在想向跳转页面中传递属性,那该怎么办?
OtherServlet.java
public void doGet(HttpServletRequest req,HttpServletResponse resp)              throws ServletException,java.io.IOException{ req.getSession().setAttribute("name","HELLO WORLD") ;resp.sendRedirect("demo.jsp") ;}Demo.jsp   <h1><%=session.getAttribute(“name”)%></h1>

此时内容确实传递。如果现在要接受的属性只使用一次的话,则使用session太浪费了。
     现在既然是跳转并且此属性只使用一次,最好使用request属性范围最合适,但是要想使用request传递属性,则必须使用服务器跳转。
 
(2)服务器跳转:RequestDispatcher接口完成
在Servlet程序中,RequestDispatcher接口的主要功能是完成服务器的跳转,实际上<jsp:forward>标签就是包装了此语句。
public void doGet(HttpServletRequest req,HttpServletResponse resp)              throws ServletException,java.io.IOException{req.setAttribute("name","HELLO WORLD") ;RequestDispatcher rd = req.getRequestDispatcher("demo.jsp") ;rd.forward(req,resp) ;// 跳转}

在一般的servlet开发中,使用RequestDispatcher接口跳转是最多的,而且一般如果要向页面中传递属性一般使用request
总结:
1.Servlet的开发形式
2.servlet的生命周期
3.搞清楚service()和doGet()和doPost()之间的关系
4.可以从servlet之中取得session和application对象。
5.RequestDispatcher接口跳转和request传递属性。



原创粉丝点击