Send.redirect跳转
Servelet方面doGe()t方法
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
response.setCharacterEncoding("UTF-8");
response.sendRedirect("/ServletDemo/show.jsp?name=peter");//get传值
}
跳转后的show.jsp
<%@ page language="java" import="java.util.*,javax.servlet.http.Cookie" pageEncoding="UTF-8"%>
</head>
<body>
send.redirect传值name <%=request.getParameter("name") %><br/> //getParameter()方法值
</body>
</html>
forward跳转
request可以携带完整的对象,将其传递到一个JSP或Servlet中,这包含存入对象和取出对象,用到的两个方法setAttribute()和getAttribute().
注意这里存放的是对象,所以8中基本数据类型不行。
Despatch
获取RequestDespatch跳转的对象
必须使用完全相对的地址,即必须从相对路径的根目录写起,而不是从servlet目录开始写。
RequestDispatcher rd=getServletContext().getRequestDispatcher("/showAtr.jsp");
然后使用跳转命令包含源servlet的request和response对象。
rd.forward(request, response);
仔细观察会发现,sendRedirect方法地址是目标地址,而forward方法是源地址。
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
response.setCharacterEncoding("UTF-8");
String name="abcd";
request.setAttribute("name", name);
RequestDispatcher rd=getServletContext().getRequestDispatcher("/showAtr.jsp");
rd.forward(request, response);
}
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<jsp:useBean id="name" scope="request" class="java.lang.String"></jsp:useBean>
<html>
<head>
<title>My JSP 'showAtr.jsp' starting page</title>
</head>
<body>
useBean调用:<%=name %>
request调用:<%=request.getAttribute("name") %>
</body>
</html>
Session 和 cookie
Session信息存放在服务器上,一般有服务器设定,而cookie信息存放在客户端上,也就是本地电脑。cookie只能存放String信息,或者说cookie是一个特殊的文本文件。
cookie存放的时间可以有程序定义,而不是服务器定义。
session在java中只有接口,所以不能用new实例化,实例化是由request方法getSession
HttpSession userinfo=request.getSession();
然后将希望存放的对象存放到session
session.setAttribute("userName",userName);
用UseBean只要scope="session"而不是scope="request"
cookie更简单一些
1 new cookie(name,value)创建cookie实例。
2 response.addCookie(cookie);将生成好的cookie加入应答。
3 request.getCookies()方法从客户端读入cookie数组。
下面代码将cookie和session写入一个Servlet实例
doGet()方法
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
response.setCharacterEncoding("UTF-8");
String info ="SESSION 保存信息"; //session实现
HttpSession info2 = request.getSession(true);
info2.setAttribute("info", info);
String a="aaa";
String b="bbb";
Cookie A = new Cookie("Aa",a);
Cookie B = new Cookie("Bb",b);
A.setPath("/"); //cookie需要路径设置,这里指向项目根目录。
B.setPath("/");
response.addCookie(A);
response.addCookie(B);
response.sendRedirect("/ServletDemo/show.jsp?name=peter");
}
<%@ page language="java" import="java.util.*,javax.servlet.http.Cookie" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<jsp:useBean id="info" scope="session" class="java.lang.String"></jsp:useBean>
<html>
<head>
<title>My JSP 'show.jsp' starting page</title>
</head>
<body>
useBean调用session内容:<%=info %><br/>
<%HttpSession userInfo = request.getSession(false); %>
session调用内容:<%=userInfo.getAttribute("info") %><br/>
<%
Cookie c[] = request.getCookies();
for(int i=0;i<c.length;i++)
{
out.print("名字:"+c[i].getName()+"值:"+c[i].getValue()+c.length);
}
%>
</body>
</html>