java

位置:IT落伍者 >> java >> 浏览文章

Servlet与JSP间的传值问题


发布日期:2021年04月14日
 
Servlet与JSP间的传值问题

Servlet与JSP 之间的传值有两种情况JSP > Servlet Servlet > JSP

通过对象 request和 session (不考虑 application)完成传值

JSP > servlet

JSP页面有种方法向 servlet传值 form表单URL

  1. <!JSPpage>
  2. <%
  3. sessionsetAttribute("testSession""Hellosession");
  4. reqeustsetAttribute("testRequest""Hellorequest");
  5. %>
  6. <ahref="JspServlet?action=toServlet">点击</a>
  7. <formaction="JspServlet?action=toServlet"method="post"name="form">
  8. <inputname="username"type="test"/>
  9. <inputtype="submit"value="submit">
  10. </form>

对于该JSP页面 form表单的内容如 <input>标签在 servlet可用 requestgetParameter("username");获取

URL比如这里的 <a>标签的 href属性与 <form>标签的 action属性的值 "JspServlet?action=toServlet"在 servlet同样用 requestgetParameter("action")获取所要注意的是这里的 url 要和 servlet在webxml里的 <urlpattern>标签的路径所对应这部分后面会提到

java片段代码servlet只能接到 sessionsetAttribute("testSession""Hello session")的内容而接不到 request的内容在 servlet里用 requestgetSession()getAttribute("testSession")获取 session内容

Servlet

关于 servlet首先要提到它在 webxml里的注册内容

  1. <servletname>JspServlet</servletname>
  2. <servletclass>comdemoJspServletDemo</servletclass>
  3. </servlet>
  4. <servletmapping>
  5. <servletname>JspServlet</servletname>
  6. <urlpattern>/JspServlet</urlpattern>
  7. </servletmapping>
  8. <servletname>JspServlet</servletname>
  9. <servletclass>comdemoJspServletDemo</servletclass>
  10. </servlet>
  11. <servletmapping>
  12. <servletname>JspServlet</servletname>
  13. <urlpattern>/admin/JspServlet</urlpattern>
  14. </servletmapping>

假如 project name 是 jspservlet则该 project根目录的 Context是 /jspservlet在地址栏里显示是 http://localhost:/jspservlet/

在 project 根目录下有 admin目录对应的 Context是/admin/jspservlet在地址栏里显示是 http://localhost:/jspservlet/admin

在这两个目录下的 jsp 都想转到 comdemoJspServletDemo类做处理这时的 url需要在 webxml注册两次

)在 http://localhost:/jspservlet/ 目录下的 jsp 页面 JspServlet


url应写为 "JspServlet"

)在 http://localhost:/jspservlet/admin/ 目录下的 jsp 页面访问 JspServleturl应写为 "admin/JspServlet"

在 servlet直接用 request对象得到发送来的请求内容用 requestgetSession()得到 session对象从而得到会话内容
这里的 requestgetSession()的参数为 boolean 类型该方法意思可理解为

session可以认为是每一个IE进程对应一个会话(新开一个IE进程就可以对应两个会话的)getSession都是返回当前用户的会话对象参数的区别在于

参数为true (默认)则如果“当前用户的会话对象”为空(第一次访问时)则创建一个新的会话对象返回

参数为false则如果“当前用户的会话对象”为空则返回 null (即不自动创建会话对象)

利用这个方法可以判断 session是否过期如下

  1. if(requestgetSession(false)==null)
  2. Systemoutprintln("Sessionhasbeeninvalidated!");
  3. else
  4. Systemoutprintln("Sessionisactive!");

Servlet > JSP

从 servlet转到 jsp不外乎两种方法重定向 和 url转发

重定向 ( Redirect)是路径的跳转内容和 url都改变不允许带 request参数( session参数可以)即不允许在 servlet里给 request对象使用setAttribute方法传给下一页面在 servlet里使用 responsesendRedirect(url) 方法注意这里的 url前不带斜线 /如 responsesendRedirect(”testjsp“)

url转发 ( Forward)是页面的跳转页面内容发生改变url不变可以带 request和 session参数在 servlet里使用 getServletConfig()getServletContext()getRequestDispatcher(url)forward(request response)而这里的 url前需要带斜线 /如getServletConfig()getServletContext()getRequestDispatcher(”/testjsp“)forward(request response)

  1. Stringfr="goodwell";
  2. requestsetAttribute("test"fr);
  3. RequestDispatcherde=requestgetRequestDispatcher("/testjsp");
  4. deforward(requestresponse);

上一篇:Java静态与动态数组特点分析

下一篇:Java中new关键字和newInstance方法的区别分享