总结JSP与servlet之间的传值

总结JSP与servlet之间的传值
JSP 与servlet 之间的传值有两种情况:JSP -> servlet, servlet -> JSP。
通过对象request 和session (不考虑application)完成传值。
一、JSP -> servlet
JSP 页面有3种方法向servlet 传值: form 表单、URL 、其他
<!-- JSP page -->
...
<%...
session.setAttribute("testSession","Hello session");
reqeust.setAttribute("testRequest","Hello request");
%>
<a href="JspServlet?action=toServlet">click me</a>
<form action="JspServlet?action=toServlet" method="post" name="form">
<input name="username" type="test" />
<input type="submit" value="submit">
</form>
...
1、对于该JSP 页面form 表单的内容,如<input>标签,在servlet 可用request.getParameter("username");
获取。
2、URL:比如这里的<a>标签的href 属性与<form>标签的action 属性的值"JspServlet?action=toServlet",
在servlet 同样用request.getParameter("action")获取;所要注意的是这里的url 要和servlet 在web.xml 里
的<url-pattern>标签的路径所对应。这部分后面会提到。
3、java 片段代码,servlet 只能接到session.setAttribute("testSession","Hello session")的内容,而接不到
request 的内容。在servlet 里用request.getSession().getAttribute("testSession")获取session 内容。
二、Servlet
1、关于servlet,首先要提到它在web.xml 里的注册内容,如
<servlet-name>JspServlet1</servlet-name>
<servlet-class>com.demo.JspServletDemo</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>JspServlet1</servlet-name>
<url-pattern>/JspServlet</url-pattern>
</servlet-mapping>
<servlet-name>JspServlet2</servlet-name>
<servlet-class>com.demo.JspServletDemo</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>JspServlet2</servlet-name>
<url-pattern>/admin/JspServlet</url-pattern>
</servlet-mapping>
假如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)

你可能感兴趣的:(servlet)