业务处理:QueryAllAction
//设置接收参数的解码格式
req.setCharacterEncoding("UTF-8");
//2.设置响应类型
resq.setCharacterEncoding("UTF-8");
业务处理和前台页面混合在一起的缺点:
页面冗余,更改繁琐,动完代码之后要重启服务器。
不符合各司其职,责任单一的思想。
解决方法:
另设view层,QueryAllJsp
PS《连接Oracle时用的ojdbc.jar可以直接用tomcat的jar》
跳转action---view
1.请求的转发
eg:客户端向服务器请求响应,服务器response
|————————————————————|
|Server
| Servlet
| QueryAllAction
| [业务处理]
|
|
| QueryAllView
| 【接收业务处理的结果并展示】 |
—————————————————————
如何进行多个servlet之间的跳转?
1.forward方式
request.getRequestDipacher("/url-pattern").forward(request,response);
2.Attribute方式
在action里面【存】先存值,后跳转
request.setAttribute("name",object)-----命名属性
List<User> users=new ArrayList();
request.getRequestDipacher("/url-pattern").forward(request,response);
在view里面:(【取】)
String sre=(String)request.getAttribute("name");
Servlet
2018/31
重定向【redirect】{不需要传递数据}
1.如何进行多个servlet之间的跳转?
Response.sendRedirect(“/Web应用名/url-pattern”);
非要传递数据的话,如下:
Response.sendRedirect(“/Web应用名/url-pattern?name=张开&pwd=62999”);
A------>B
A:Response.sendRedirect(“/Web应用名/url-pattern?name=张开&pwd=62999”);
实际上 A此时已经返回给客户端一个响应了,客户端又重新发出一个请求给B,箭头所指就是第二个请求。
传参需要解决乱码问题,
Req接受参数,response传递数据
Ps(localhost=127.0.0.1)
Eg:
Reponse.sendRedirect(“/Servlet_Day4/aaa”);
可以跳转到静态资源
Response.sendRedirect(“/Servlet_Day4/html/a.html”);
Forward与redirect区别:
1. forward共享一次请求request,而redirect不共享
2. Forward:一次请求,地址栏不变,可以使用request作用域传递数据。Redirect:两次请求,地址栏改变,不能使用request作用域传值
4/3
Cookie
客户端发送请求时,server可以创建一个cookie,再响应的时候response可以携带cookie的数据。
注意:网站只能识别自己发放的cookie。比如uc浏览器保存的账号Google不能使用。
要使用cookie,先用client发送cookie
Ps:使用myeclipse直接new一个(搜索)servlet更加方便。
一:创建servlet,配置web.xml,创建client的cookie,并添加到请求当中
1. 创建cookie对象
Cookie c = new Cookie(key,value);
Cookie c = new Cookie(“username”,”linrunyu”);
2. 设置Cookie的最大存活时间 ,若参数大于0,设置多久存活多久;若参数等于0,浏览器关闭,cookie销毁;若参数小于0,不会创建cookie(面试)
c.setMaxAge(60*60*24*7);
3.创建完cookie,响应
res.addCookie(c);(//谁请求,相应谁)
浏览器——》设置——》高级——》内容设置——》cookie[其实是存储在操作系统中的]
二:service响应client,并获得cookie的参数
1. 设置收参编码
req.setCharaterEncoding(“UTF-8”);
Cookie[] cs =req.getCookies(); //cookies可以有多个,所以此处的返回类型设为cookie
Foreach{
If(“username”.equals(cookie.getName())){ //获取value中存取的建
Sysout(cookie.value());
}else{
continue;
.....
}
}
【面试题】cookie的问题:
1. cookie使用不安全,存储在操作系统中的,即使在浏览器中删除,也可以在电脑中找到。
2. Cookie能被禁用
3. Cookie的存储量很小,一般为4k左右,数据加密可能会存不下
4. Cookie默认不可以存储中文 ——URLEncoder URLDecode编解码来解决中文转换问题
String a =”小红”;
//encoder需要抛异常
Cookie c = new Cookie(“username”,URLEncoder.encode(a,”UTF-8”));
Sysout(URLDecoder.Decode(c.getValue(),”UTF-8”));
5.不同的浏览器cookie在操作系统中存放的位置不同。不能把核心功能交给cookie完成,cookie完成的是可有可无的辅助性功能