* 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
- 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);