java>>> 32_java32

一、response

1.数据响应

getWriter()获取字符流(只能响应回字符);

getOutputStream()获取字节流(能响应一切数据)。

响应回的数据到客户端被浏览器解析。

注意:两者不能同时使用。

2.响应乱码

乱码原因:在响应时,服务器经过网络传输响应数据到客户端,服务器默认编码为ISO-8859-1,该编码不支持中文;客户端也有其默认编码。

总结:1、服务端和客户端编码不一致;2、客户端和服务端的编码不支持中文。

如何解决:1、设置客户端和服务端的编码一致;2、客户端和服务端编码都支持中文;

getWriter()乱码

响应中文必定出乱码,由于服务器端在进行编码时默认会使用 ISO-8859-1 格式的编码,该编码方式并不支持中文。

// 设置服务端的编码

//response.setCharacterEncoding("UTF-8");

// 设置客户端的编码

//response.setHeader("content-type", "text/html;charset=UTF-8");

// 同时设置客户端和服务端的编码

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

3.响应图片

* 1、得到图片存放的路径

* 2、通过路径得到文件对象

* 3、得到字节输出流

* 4、得到文件对象的输入流

* 5、循环读取,并写出到浏览器

// 设置响应类型

response.setContentType("image/jpeg");

// 1、得到图片存放的路径

String realPath = request.getServletContext().getRealPath("/WEB-INF/jay.jpg"); // 得到项目在服务器中存放的真实路径

// 得到图片

// String file = realPath + "/WEB-INF/jay.jpg";

4. 重定向

重定向是一种服务器指导,客户端的行为。客户端发出第一个请求,被服务器接收,经过处理服务器进行响应,与此同时,服务器给客户端一个地址(下次请求的地址 resp.sendRedirect("url");),当客户端接收到响应后,立刻、马上、自动根据服务器 给的地址进行请求的发送第二个请求,服务器接收请求并作出 响应,重定向完成。从描述中可以看出重定向当中有两个请求存在,并且属于客户端行为。

请求转发和重定向的区别

1、请求转发是服务端跳转,重定向是客户端跳转

2、请求转发只有一次请求,重定向有两次请求

3、请求转发地址栏不发生改变,重定向地址栏会改变

4、请求转发request域对象能共享,重定向不能共享

5、请求转发只能请求当前资源下的路径,重定向可以任意地址

5. 请求是的路径问题

注:ser01和ser02s是两个同级的servlet

相对路径

相对于的当前资源所在路径 ser02(重定向) ser02(请求转发)

绝对路径

完整路径

1、以http://开头的路径,已经跨域,可以访问任意地址 http://loaclhsot:8080/s01/ser02 (重定向) (请求转发不可以)

2、以/开头,定位在端口之后 /s01/ser02(重定向) /ser02(在请求转发时,"/"代表的含义是从http开始到站点名后)

*

请求转发:

带"/"的绝对路径,定位的位置是在站点名之后

重定向:

带"/"的绝对路径,定位的位置是在端口之后

二、Cookie

1.创建和发送

// 创建Cookie对象

Cookie cookie = new Cookie("uname","admin");

// 发送Cookie对象(响应cookie)

resp.addCookie(cookie);

2.获取Cookie对象

提供了一个 getCookies()的方法用来获取客户端回传的所有cookie 组成的一个数组.

如果需要获取单个 cookie 则需要通过遍历,getName()获取 Cookie 的名称,getValue()获取 Cookie 的值。

// 获取cookie数组

Cookie[] cookies = request.getCookies();

// 判断cookie数组是否为空

if (cookies != null && cookies.length > 0) {

// 遍历Cookie数组

for (Cookie cookie : cookies) {

// 得到cookie的名称和值

String name = cookie.getName();

String value = cookie.getValue();

// 获取时通过 URLDecoder.decode()来进行解码

name = URLDecoder.decode(name);

value = URLDecoder.decode(value);

3. Cookie到期时间的设定

到期时间,到期时间用来指定该 cookie 何时失效。默认为当前浏览器关闭即失效。

可以手动设定 cookie 的有效时间(通过到期时间计算),通过 setMaxAge(int time);方法设定 cookie 的最大有效时间,以秒为单位。

大于 0 的整数,表示存储的秒数;

若为负数,则表示不存储该 cookie;

若为 0,则删 除该 cookie。

负整数:cookie 的 maxAge 属性的默认值就是-1,表示只在浏览器内存中存活,一旦关闭浏览器窗口,那么 cookie 就会消失。

正整数:表示 cookie 对象可存活指定的秒数。当生命大于 0 时,浏览器会把 Cookie 保存到硬盘上,就算关闭浏览器,就算重启客户端电脑,cookie 也会存活相应的时间。

零:cookie 生命等于 0 是一个特殊的值,它表示 cookie 被作废!也就是说,如果原来浏览器已经保存了这个 Cookie,那么可以通过 Cookie 的setMaxAge(0)来删除这个 Cookie。 无论是在浏览器内存中,还是在客户端硬盘上都会删除这个 Cookie

// 删除指定cookie对象,相同名字的Cookie会被覆盖

Cookie cookie3 = new Cookie("uname",null);

// 删除cookie

cookie3.setMaxAge(0);

// 响应cookie

response.addCookie(cookie3);

4. Cookie的注意

1、Cookie存在本机上,换电脑后失效;Cookie不跨浏览器

2、出现同名Cookie,会覆盖

3、不同的浏览器对 Cookie 也有限定,Cookie 的存储有是上限的。

4、Cookie不能存中文

Cookie 中不能出现中文,如果有中文则URLEncoder.encode()来进行编码,获取时通过 URLDecoder.decode()来进行解码。

5. Cookie的路径

只要访问的路径中包含cookie的path才能访问到该cookie

cookie的路径默认是当前站点名下

// 设置cookie能够被当前服务器下所有的项目访问

Cookie cookie = new Cookie("a","AA");

// 设置cookie的路径为服务器根路径

cookie.setPath("/");

// 响应cookie

response.addCookie(cookie);

三.Session

表示一次会话,会话可以保留指定时间长度,且在一次会话(一个用户的多次请求)期间共享数据。

1创建Session对象

request.getSession(); // 如果session不存在则新建session对象;如果session对象存在则获取session

// 创建session对象

HttpSession session = request.getSession();

// Session的常用方法

String id = session.getId();

System.out.println("会话标识符: " + id);

long createTime = session.getCreationTime();

System.out.println("创建时间: " + createTime);

long lastAccessTime = session.getLastAccessedTime();

System.out.println("最后一次访问时间: " + lastAccessTime);

boolean isNew = session.isNew();

System.out.println("是否是新建session:" + isNew);

2.获取域对象

请求转发: request作用域不会失效,session作用域不会失效

重定向: request作用域会失效,session作用域不会失效

// 创建session对象

HttpSession session = request.getSession();

System.out.println("Session02:" + session.getId());

// session域对象

session.setAttribute("uname", "zhangsan");

// request域对象

request.setAttribute("upwd", "123456");

// 请求转发

//request.getRequestDispatcher("Session03").forward(request, response);

// 重定向

response.sendRedirect("Session03");

// 获取session对象

HttpSession session = request.getSession();

System.out.println("Session03:" + session.getId());

// 获取session域对象

String uname = (String) session.getAttribute("uname");

System.out.println("Session作用域中的uname:" + uname);

// 获取request作用域

String upwd = (String) request.getAttribute("upwd");

System.out.println("request作用域中的upwd:" + upwd);

3. Session的失效

1)、关闭浏览器 (session的底层是依赖cookie,默认关闭浏览器即失效;JSESSIONID不存在时,后台会新建一个sesession对象)

2)、关闭服务器(非正常关闭服务器时才会销毁,session对象在服务器正常关闭时会钝化到本地磁盘中,下次启动时从本地磁盘中读取出来,在Tomcat解压包的waork目录下)

3)、手动销毁(session.invalidate())

4)、服务器默认最大不活动时间

Tomcat的解压缩包下的conf目录下的web.xml中

默认30分钟,单位为分钟

30

5)、手动设置最大不活动时间

通过 session.setMaxInactiveInterval(int);来设定 session 的最大不活动时间,单位为秒。

通过 getMaxInactiveInterval();方法来查看当前 Session 对象的最大不活动时间。

四.ServerContext

1. 获取ServletContext对象

// 通过request对象获取

ServletContext servletContext =request.getServletContext();

// 通过session获取

ServletContext servletContext2 = request.getSession().getServletContext();

// 通过servletConfig对象

ServletContext servletContext3 = getServletConfig().getServletContext();

// 直接获取

ServletContext servletContext4 = getServletContext();

// 设置作用域

servletContext.setAttribute("usex", "man");

2. 输出流

// 获取servletContext域对象

String usex =(String)getServletContext().getAttribute("usex");

System.out.println(usex);

// 获取服务器版本

String serverInfo=request.getServletContext().getServerInfo();

System.out.println("获取服务器版本:" + serverInfo);

// 获取项目在服务器中的真实路径

String realPath = request.getServletContext().getRealPath("/");

System.out.println("获取项目在服务器中的真实路径:" + realPath);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值