现在的位置: 首页 > 综合 > 正文

总结JSP与servlet之间的传值

2018年04月09日 ⁄ 综合 ⁄ 共 3168字 ⁄ 字号 评论关闭

 

  1. JSP与 servlet之间的传值有两种情况:JSP -> servlet, servlet -> JSP。  
  2.  
  3.   通过对象 request和 session (不考虑 application)完成传值。  
  4.  
  5.   一、JSP -> servlet  
  6.  
  7.   JSP页面有3种方法向 servlet传值: form表单、URL 、其他  
  8.  
  9.   <!-- JSP page --> 
  10.  
  11.   ...  
  12.  
  13.   <%......  
  14.  
  15.   session.setAttribute("testSession","Hello session");  
  16.  
  17.   reqeust.setAttribute("testRequest","Hello request");  
  18.  
  19.   %> 
  20.  
  21.   <a href="JspServlet?action=toServlet">click me</a> 
  22.  
  23.   <form action="JspServlet?action=toServlet" method="post" name="form"> 
  24.  
  25.   <input name="username" type="test" /> 
  26.  
  27.   <input type="submit" value="submit"> 
  28.  
  29.   </form> 
  30.  
  31.   ...  
  32.  
  33.   1、对于该JSP页面 form表单的内容,如 <input>标签,在 servlet可用 request.getParameter("username");获取。  
  34.  
  35.   2、URL:比如这里的 <a>标签的 href属性与 <form>标签的 action属性的值 "JspServlet?actionaction=toServlet",在 servlet同样用 request.getParameter("action")获取;所要注意的是这里的 url 要和 servlet在web.xml里的 <url-pattern>标签的路径所对应。这部分后面会提到。  
  36.  
  37.   3、java片段代码,servlet只能接到 session.setAttribute("testSession","Hello session")的内容,而接不到 request的内容。在 servlet里用 request.getSession().getAttribute("testSession")获取 session内容。  
  38.  
  39.   二、Servlet  
  40.  
  41.   1、关于 servlet,首先要提到它在 web.xml里的注册内容,如  
  42.  
  43.   <servlet-name>JspServlet1</servlet-name> 
  44.  
  45.   <servlet-class>com.demo.JspServletDemo</servlet-class> 
  46.  
  47.   </servlet> 
  48.  
  49.   <servlet-mapping> 
  50.  
  51.   <servlet-name>JspServlet1</servlet-name> 
  52.  
  53.   <url-pattern>/JspServlet</url-pattern> 
  54.  
  55.   </servlet-mapping> 
  56.  
  57.   <servlet-name>JspServlet2</servlet-name> 
  58.  
  59.   <servlet-class>com.demo.JspServletDemo</servlet-class> 
  60.  
  61.   </servlet> 
  62.  
  63.   <servlet-mapping> 
  64.  
  65.   <servlet-name>JspServlet2</servlet-name> 
  66.  
  67.   <url-pattern>/admin/JspServlet</url-pattern> 
  68.  
  69.   </servlet-mapping> 
  70.  
  71.   假如 project name 是 jsp2servlet,则该 project根目录的 Context是 /jsp2servlet,在地址栏里显示是 http://localhost:8080/jsp2servlet/;  
  72.  
  73.   在 project 根目录下有 admin目录,对应的 Context是/admin/jsp2servlet,在地址栏里显示是 http://localhost:8080/jsp2servlet/admin,  
  74.  
  75.   在这两个目录下的 jsp 都想转到 com.demo.JspServletDemo类做处理,这时的 url需要在 web.xml注册两次。  
  76.  
  77.   1)在 http://localhost:8080/jsp2servlet/ 目录下的 jsp 页面 JspServlet1,url应写为 "JspServlet"  
  78.  
  79.   2)在 http://localhost:8080/jsp2servlet/admin/ 目录下的 jsp 页面访问 JspServlet2,url应写为 "admin/JspServlet"  
  80.  
  81.   2、在 servlet直接用 request对象,得到发送来的请求内容;用 request.getSession(),得到 session对象,从而得到会话内容。  
  82.  
  83.   这里的 request.getSession()的参数为 boolean 类型,该方法意思可理解为:  
  84.  
  85.   session可以认为是每一个IE进程对应一个会话(新开一个IE进程就可以对应两个会话的),getSession都是返回当前用户的会话对象,参数的区别在于:  
  86.  
  87.   参数为true (默认),则如果“当前用户的会话对象”为空(第一次访问时)则创建一个新的会话对象返回;  
  88.  
  89.   参数为false,则如果“当前用户的会话对象”为空,则返回 null (即不自动创建会话对象)。  
  90.  
  91.   利用这个方法可以判断 session是否过期,如下:  
  92.  
  93.   if(request.getSession(false)==null)  
  94.  
  95.   System.out.println("Session has been invalidated!");  
  96.  
  97.   else  
  98.  
  99.   System.out.println("Session is active!");  
  100.  
  101.   三、Servlet -> JSP  
  102.  
  103.   从 servlet转到 jsp不外乎两种方法,重定向 和 url转发  
  104.  
  105.   1、重定向 ( Redirect):是路径的跳转,内容和 url都改变。不允许带 request参数( session参数可以),即不允许在 servlet里给 request对象使用setAttribute方法传给下一页面。在 servlet里使用 response.sendRedirect(url) 方法。注意这里的 url前不带斜线 /,如 response.sendRedirect(”test.jsp“)  
  106.  
  107.   2、url转发 ( Forward):是页面的跳转,页面内容发生改变,url不变。可以带 request和 session参数。在 servlet里使用 getServletConfig().getServletContext().getRequestDispatcher(url).forward(request, response)。而这里的 url前需要带斜线 /,如getServletConfig().getServletContext().getRequestDispatcher(”/test.jsp“).forward(request, response)  

 

本文出自 “阿凡达” 博客,请务必保留此出处http://shamrock.blog.51cto.com/2079212/702555

抱歉!评论已关闭.