将用到的不同思路在此记录,不时更新。
涉及页面跳转、页面重定向、参数传递。
19.1.7 感谢大佬博客:@ssy_shandong,地址链接
————————————————————————————————————————————————
提醒:
这些方法仅适用于多页面的传递,即【前台1-后台2-前台3】这种。
如果想要实现【前台1-后台2-前台1】这种单页面的传递,可以使用ajax等技术。
ajax的前后端数值传递在另一篇博客写出。
————————————————————————————————————————————————
目录
(1)使用request对象获取客户端提交的信息(以两个页面传递为例)
(2)使用session对象获取从客户端提交的信息(以三个页面传递为例)
———————————————————————————————————————
servlet页之间:
常用:
request.getRequestDispatcher("目标页").forward(request, response);
常用:
setAttribute()和getAttribute()方法传递参数
JSP到JSP:
页面跳转:
//常用于servlet,但是JSP也可以用
(1)RequestDispatcher.forward()
重定向后浏览器地址栏URL不变。【原来地址】
forward()无法再后面带参数传递,比如servlet?name=tom。
可以通过response.setAttribute("name",name)传递。
通常用于servlet。
(2)response.sendRedirect()
重定向后在浏览器地址栏上会出现重定向页面的URL。
sengRedirect()可以带参数传递,比如servlet?name=tom传至下个页面
可以在不同服务器间使用。
//纯JSP
(3)jsp:forward 方法,本质是RequestDispatcher.forward()
<jsp:forward page=""/>
带参数:<jsp:param value="list" name="action" />
</jsp:forward>
(4)修改HTTP header的Location属性来重定向,没用过,记录
String newLocn = "2.jsp";
response.setHeader("Location",newLocn);
使用后会直接重定向到新的页面,暂时感觉没用
(5)JSP中实现在某页面停留若干秒后,自动重定向到另一页面
<meta http-equiv="refresh" content="5; url=目标.jsp">
延申:可以通过setHeader来实现某页面停留若干秒后,自动重定向到另一页面。
String content = "5; url=5_2.jsp";
response.setHeader("REFRESH",content);
方法2:JS跳转,两秒后跳转新页面
window.setTimeout("window.location='index.shtml'",2000);
参数传递:
(1)使用request对象获取客户端提交的信息(以两个页面传递为例)
JSP 1:
//通过一个form表单,发送
<form action="b.jsp">
<input type="text" name="name">
<input type="submit" value="Enter" name="submit">
</form>
JSP 2:
//通过request对象获取输入的名字,可以获取任何具有NAME值的对象值
<%
String textContent = request.getParameter("name");
%>
(2)使用session对象获取从客户端提交的信息(以三个页面传递为例)
JSP 1
//页面1将数据通过form提供给页面2
<form action="session2.jsp" method="post">
请输入您的姓名:
<input type="text" name="jsp1">
<input type="submit" value="submit">
</form>
JSP 2
//页面2得到数据,并储存到session中给页面3
<%
String name = request.getParameter("jsp1");
session.setAttribute("jsp2",name);
%>
您的姓名是:<%=name%>
<form action="session3.jsp" method="post">
您喜欢吃什么?
<input type="text" name="food"/>
<input type="submit" value="submit">
</form>
JSP 3
//页面3读取来自页面2的session
<%
String food = request.getParameter("food");
String name = (String)session.getAttribute("thename");
String pwd = request.getParameter("pwd");
%>
您的姓名是:<%=name%>
您喜欢吃:<%=food%>
您的密码是:<%=pwd%>
(3)利用隐藏域传递数据
类似于上两种方法,只不过是通过隐藏框来传递
<!-- 隐藏字段,系统时间,并转换为毫秒数 -->
<input type="hidden" name="time" value="<%=new java.util.Date()%>">
(4)通过超链接传递数据
//直接给定固定值
<a href=目标.jsp?参数1=<%=固定值%>>到指定的页面</a>
//传递动态值
<a href=目标.jsp?参数1=<%=你的变量%>>到指定的页面</a>
JSP到servlet:
(1)使用request对象接收参数
//JSP页面 1
//通过FORM表单提交
//servlet 1中:
request.getRequestDispatcher("JSP页面2.jsp").forward(request, response);
//JSP页面 2
实验<%=request.getParameter("JSP 1 提交的某个参数") %>,登录成功!
//
这个过程中,JSP页面 1 提交的值分别在servlet和JSP 2 中读取了一次。
但是并非直接由JSP 1 到JSP 2。
然是通过servlet的请求转发:getRequestDispatcher,将request, response转发到JSP 2.
(2)使用session对象,url,form表单传递参数
//JSP中
<%
session.setAttribute("testSession","Hello session");
request.setAttribute("testRequest","Hello request");
%>
<a href="目标页面">单击此处</a>
<form action="某个servlet?action=某个自定方法" method="post" name="form1">
<input type="text" name="username"/>
<input type="submit" value="submit"/>
</form>
//servlet
String strSession = (String)request.getSession().getAttribute("testSession");
String strRequest = (String)request.getAttribute("testRequest");
String username = request.getParameter("username");
servlet到JSP:
从servlet到jsp页面传递参数,可以使用URL,request对象,session对象。
方法类似于上述几种。
//servlet
String strRequest = "request传值";
String strSession = "session传值";
request.setAttribute("strRequest", strRequest);
request.getSession().setAttribute("strSession", strSession);
//JSP
<%
String strRequest = (String)request.getAttribute("strRequest");
String strSession = (String)request.getSession().getAttribute("strSession");
%>