java web B/s的简单实用基础总结(2)

来源:互联网 发布:模糊算法讲解 编辑:程序博客网 时间:2024/05/20 18:53

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方法是源地址。

Serverlet代码
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);
}

jsp可使用useBean和request两种方法获取。
<%@ 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);

引用session和request方法相似,主要request必须用Despatch方式跳转,而session也可以用Send方式跳转。
用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");}


跳转后show.jsp页面
<%@ 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>