Servlet学习Day4

* B/S架构的数据库存储优化
* 状态管理(Cookie和Session)
* Cookie中文乱码情况
* Session不会出现中文乱码,关闭Cookie的解决方式
* Servlet的中文乱码情况(get和post)
* 如果希望浏览器页面管理配置
* response.encodeRedirectURL()和response.encodeURL()区别
* Cookie和Session
* 关闭Cookie的解决办法

1.B/S架构的数据库存储优化
学习Eclipse使用Http向Servlet发送数据,服务器将数据保存到数据库,对数据库的配置和Dao接口的使用进行优化--->有一种面向接口的接口思想

2.状态管理(Cookie和Session)
//设置返回的页面格式
response.setContentType("text/html;charset=utf-8");
//创建Cookie,添加set-Cookie头
Cookie cookie1 = new Cookie("userName", "Anglea");
response.addCookie(cookie1);
PrintWriter pWriter = response.getWriter();
pWriter.write("Hello,World!中文");
pWriter.flush();
pWriter.close();

//获取Cookie数组
Cookie[] cookie = request.getCookies();
String name = cookie[0].getValue();
PrintWriter pWriter = response.getWriter();
pWriter.write(name);
pWriter.flush();
pWriter.close();

3.Cookie中文乱码情况
private static final long serialVersionUID = 1L;
protected void service(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
System.out.println("1111111111111111");
//设置返回的页面格式
response.setContentType("text/html;charset=utf-8");
//创建Cookie,添加addCookie头
Cookie cookie1 = new Cookie("userName1321", URLEncoder.
encode("中文:Anglea","utf-8"));
cookie1.setMaxAge(20);
response.addCookie(cookie1);
//在页面写入
PrintWriter pWriter = response.getWriter();
pWriter.write("Anglea写入成功!!!");
//重定向
response.sendRedirect("/Dynamic/GetCookie.do");
//
pWriter.flush();
pWriter.close();
}

private static final long serialVersionUID = 1L;
protected void service(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
System.out.println("222222222");
//获取Cookie数组
Cookie[] cookie = request.getCookies();
System.out.println("cookie.length:"+cookie.length);
if (cookie != null) {
for (Cookie coo : cookie) {
if (coo.getName().equals("userName1321")) {
System.out.println("cookie.name:"+coo.getName()+"\ncoo.getValue:"+java.net.URLDecoder.decode(coo.getValue(),"utf-8")); }
else{
System.out.println("cookie.name:"+coo.getName()+"\ncoo.getValue:"+coo.getValue());
}
}
}
//在页面上面打印
PrintWriter pWriter = response.getWriter();
pWriter.write("WriteOver");
pWriter.flush();
pWriter.close();
}

4.Session不会出现中文乱码,关闭Cookie的解决方式
//写入Session
response.setContentType("text/html;charset=utf-8");
HttpSession session = request.getSession();
session.setAttribute("uname", "糖纸疯了");
session.setAttribute("unum", 200);
//重定向
//response.sendRedirect("/Dynamic/GetSession");
//URL重写
String url = response.encodeRedirectURL("/Dynamic/GetSession");
response.sendRedirect(url);

response.setContentType("text/html;charset=utf-8");
HttpSession session = request.getSession();
String uname = (String)session.getAttribute("uname");
int unum = (int)session.getAttribute("unum");
System.out.println("uname:"+uname+"\nunum:"+unum);

5.如果希望浏览器页面管理配置
在tomcat-users.xml中修改






然后再重启浏览器,输入http://localhost:8080
点击页面的web-app

  1. response.encodeRedirectURL()和response.encodeURL()区别
    response.encodeURL();
    括号里填写具体的URL地址.这样当用户浏览器浏览当前servlet的时候本应包含在响应头中的session的id会以上述的";"+"session的id"形式被加入到URL后面并返回(如果没有session信息则照常返回引入的URL即可),再设置链接指向该函数返回的URL.用户点击即可在禁用cookie的情况下,带着session的id去访问该URL,发送正常的包含session的id的请求头.

response.encodeRedirectURL():
用法与上述一致,只不过考虑特殊情况,要访问的链接可能会被Redirect到其他servlet去进行处理,这样你用上述方法带来的session的id信息不能被同时传送到其他servlet.这时候用encodeRedirectURL()方法就可以了

7.Cookie和Session

* Cookie可以创建,但是session时浏览器和服务器对接的时候创建的
* Cookie不能在JSP和Servlet共享,不能跨页面使用,除非是转发,也就是基本上,这边添加,那边接收,用完之后就销毁了(request被销毁了)
* session不能创建,创建后还不能关闭页面,关闭页面就找不到了,再打开又会重新创建,但是里面设置的属性,在服务器和服务端可以对等使用

8.Cookie和Session重要知识点

* Servlet的中文乱码情况(get和post)

//post方法

    * Html设置:
    * Servlet设置:request.setCharacterEncoding("utf-8");//必须在request.getParamter("name")之前调用

//get方法

    * Html设置:
    * Servlet设置:
     String  name = request.getParameter("username");
     request.getParameterValue("");
     // name的编码是 tomcat 默认的ISO-8859-1
     byte[] bytes = name.getBytes("ISO-8859-1");
     // 以utf-8重新构造字符串
     name = new String(bytes,"UTF-8");
     System.out.println("name:"+name);

* servlet自身页面写入的乱码情况


* servlet设置:response.setContentType("text/html;charset=utf-8");


* cookie的乱码情况


*  response.setContentType("text/html;charset=utf-8");

 //创建Cookie,添加addCookie头

* Cookie cookie1 = new Cookie("userName1321", URLEncoder.encode("中文:Anglea","utf-8"));
* System.out.println("cookie.name:"+coo.getName()+"\ncoo.getValue:"+java.net.URLDecoder.decode(coo.getValue(),"utf-8"));


* session下不会出现乱码情况
* cookie关闭后,cookie不能再使用了
* cookie关闭后,session可以通过URL重写的方式通过

9.关闭Cookie的解决办法

//重定向
//response.sendRedirect("/Dynamic/GetSession");
//URL重写
String url = response.encodeRedirectURL("/Dynamic/GetSession");
response.sendRedirect(url);

你可能感兴趣的:(Servlet学习Day4)