这几天做了一个项目,大量用到了JSP与servlet之间的传值,总结了一下
JSP与servlet之间的传值有两种情况:JSP -> servlet, servlet -> JSP.
通过对象request和session (不考虑application)完成传值.
一、JSP -> servlet
JSP页面有3种方法向servlet传值:form表单、URL 、其他
...
<%......
session.setAttribute("testSession","Hello session");
reqeust.setAttribute("testRequest","Hello request");
%>
...
1、对于该JSP页面form表单的内容,如标签,在servlet可用request.getParameter("username");获取.
2、URL:比如这里的标签的href属性与
3、java片段代码,servlet只能接到session.setAttribute("testSession","Hello session")的内容,而接不到request的内容.在servlet里用request.getSession().getAttribute("testSession")获
取session内容.
二、Servlet
1、关于servlet,要提到它在web.xml里的注册内容,如
假如project name 是jsp2servlet,则该project根目录的Context是/jsp2servlet,在地址栏里显示是http://localhost:8080/jsp2servlet/;
在project 根目录下有admin目录,对应的Context是/admin/jsp2servlet,在地址栏里显示是http://localhost:8080/jsp2servlet/admin,
在这两个目录下的jsp 都想转到com.demo.JspServletDemo类做处理,这时的url需要在web.xml注册两次.
1)在http://localhost:8080/jsp2servlet/ 目录下的jsp 页面JspServlet1,url应写为"JspServlet"
2)在http://localhost:8080/jsp2servlet/admin/ 目录下的jsp 页面访问JspServlet2,url应写为"admin/JspServlet"
2、在servlet直接用request对象,得到发送来的请求内容;用request.getSession(),得到session对象,从而得到会话内容.
这里的request.getSession()的参数为boolean 类型,该方法意思可理解为:
session可以认为是每一个IE进程对应一个会话(新开一个IE进程就可以对应两个会话的),getSession都是返回当前用户的会话对象,参数的区别在于:
参数为true (默认),则如果“当前用户的会话对象”为空(第一次访问时)则创建一个新的会话对象返回;
参数为false,则如果“当前用户的会话对象”为空,则返回null (即不自动创建会话对象).
利用这个方法可以判断session是否过期,如下:
if(request.getSession(false)==null)
System.out.println("Session has been invalidated!");
else
System.out.println("Session is active!");
三、Servlet -> JSP
从servlet转到jsp不外乎两种方法,重定向和url转发
1、重定向( Redirect):是路径的跳转,内容和url都改变.不允许带request参数( session 参数可以),即不允许在servlet里给request对象使用setAttribute方法传给下一页面.在servlet里使用response.sendRedirect(url) 方法.注意这里的url前不带斜线/,如response.sendRedirect(”test.jsp“)
2、url转发( Forward):是页面的跳转,页面内容发生改变,url不变.可以带request和session参数.在servlet里使用getServletConfig().getServletContext().getRequestDispatcher(url).forward(request, response).而
这里的url前需要带斜线/,如getServletConfig().getServletContext().getRequestDispatcher(”/test.jsp“).forward(request, response)