servlet笔记

业务处理:QueryAllAction

//设置接收参数的解码格式

req.setCharacterEncoding("UTF-8");

//2.设置响应类型

resq.setCharacterEncoding("UTF-8");

 

 

业务处理和前台页面混合在一起的缺点:

页面冗余,更改繁琐,动完代码之后要重启服务器。

不符合各司其职,责任单一的思想。

解决方法:

另设view层,QueryAllJsp

 

PS连接Oracle时用的ojdbc.jar可以直接用tomcatjar

 

跳转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”);

Forwardredirect区别:

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,创建clientcookie,并添加到请求当中

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完成的是可有可无的辅助性功能

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值