ServletContext介绍 ,request response中文乱码问题
2017-08-06 18:02
471 查看
ServletContext介绍
当Web项目被部署到Tomcat的时候就会创建一个ServletContext对象,而且这个对象生命的周期是伴随者整个Web项目,同android的ApplicationContext的功能是一致,可以用来存储数据,在任何的一个Servlet都可以随时去调用API的介绍,路径问题
用来存取数据的 void setAttribute(String name,Object value); —-向ServletContext域中存放数据
Object getAttribute(String name); —-从ServletContext域中获取数据
void removeAttribute(String name); —-从ServletContext域中移除数据
去读配置文件
InputStream getResourceAsStream(String path); —-将一个文件转换成输入流
String getRealPath(String path); —-获取某个文件的磁盘绝对路径
当资源文件放到Web项目的src目录下,最终会被部署到Tomcat的/WEB-INF/classes/db.properties路径下
Properties properties = new Properties(); String path = this.getServletContext().getRealPath("/WEB-INF/classes/db.properties"); //返回的磁盘路径包括C盘符 D盘符的。。 //InputStream resourceAsStream = this.getServletContext().getResourceAsStream("/WEB-INF/classes/db.properties"); 读取配置文件的方式 System.out.println(path); InputStream is = new FileInputStream(path); properties.load(is); String username = properties.getProperty("username"); String password = properties.getProperty("password");
Request对象
request对象内部封装了 请求行 请求头 请求体的内容 通过API去操作对应内容,无技术含量ServletRequest(接口)–>HttpServletRequest(接口)–>HttpServletRequestWrapper(实现类)
Request提交中文请求post get 乱码问题解决
产生的原因
提交汉子产生的乱码的源码是因为浏览器在编辑汉子是使用ISO88591进行编码,这套编码不支持中文,TomCat也是采用ISO88591进行解密的所有需要在servlet用service方法中讲提交过来的数据按照utf-8进行解密;Get方式乱码解决 ( 2种 )
**方式一:** // get方式解决中文乱码 // String username = new String(request.getParameter("username").getBytes("ISO-8859-1"),"UTF-8"); **方式二 : URLEncoder和URLDecoder
Post方式乱码解决
因为post方式,提交的数据都tomcat的缓存区中,默认缓存区是按照ISO9951进行编码
request.setCharacterEncoding("UTF-8"); //设置缓存器编码
Response提交中文请求post get 乱码问题解决
服务端想浏览器响应数据封装的一个对象API介绍
响应行部分void setStatus(int sc);
响应头部分
void setHeader(String name,String value);
void addHeader(String name,String value); 添加请求头
响应体部分
ServletOutputStream getOutputStream();
PrintWriter getWriter(); //字节流 字符流不可以同时使用,输入的标签可以被解析
void sendRedirect(String location) //location 项目名/action
void addCookie(Cookie cookie);
void setCharacterEncoding(String encoding);
void setContentType(String type);
重定向路径问题
路径有两种 客户端路径 服务端路径如果要定向到外部服务端需要加全路径 ,如果重定向到服务器内部可以不用加项目名称
response.sendRedirect(“/ruirui/ResponseDemo2”);
响应中文编码问题
response.setContentType(“text/html;charset=UTF-8”); //设置浏览器解析时编码
定时跳转
response.setContentType("text/html;charset=UTF-8"); response.getWriter().println("你好"); response.setHeader("Refresh", "5;url=file:///E:/Code/PP/servlet/demoServlet/WebContent/WEB-INF/repose.html");
响应字节流 字符流中文乱码问题
输出字符流 乱码问题当响应种含有中文一定会出现中文乱码问题
1 字符流缓冲区 默认是ISO8859编码 支持中文,需要设置缓冲区编码为utf-8
2 浏览器默认也是ISO8859编码 支持中文,
因此需要同时去设置两个区域的编码
设置浏览器默认打开的时候采用的字符集的编码: response.setHeader("Content-Type", "text/html;charset=UTF-8"); 设置response的缓冲区的编码: response.setCharacterEncoding("UTF-8"); 可以简写response.setContentType("text/html;charset=UTF-8");
输出字节流乱码问题
不一定会产生乱码问题 关键看浏览器是用什么来解密 ,
因此需要设置浏览器的编码,还有字节流转二进制要设置为utf-8编码
// 设置浏览器默认打开的时候采用的字符集的编码: response.setHeader("Content-Type", "text/html;charset=UTF-8"); // 设置中文转字节数组的时候采用的编码 response.getOutputStream().write("中文".getBytes("UTF-8"));
重定向同转发的区别
重定向请求两次,响应两次,转发是请求一次 响应一次重定向浏览器中的url会变 转发不变
重定向可以跳转外部项目 , 转发只能内部
相关文章推荐
- request、response 中文乱码问题与解决方式
- LoadRunner 中文乱码问题(request 和Response)
- request、response 中文乱码问题与解决方式
- request、response 中文乱码问题与解决方式
- request、response 中文乱码问题与解决方式
- 中文乱码问题-pageEncoding与charset区别, response和request的setCharacterEncoding 区别
- request和response的中文乱码问题及解决方案
- request和response中文乱码问题
- request、response 中文乱码问题与解决方式
- request、response 中文乱码问题与解决方式
- request、response 中文乱码问题与解决方式
- JSP内置对象(包括request和response)以及解决url传中文参数出现乱码问题
- C#request和response的中文乱码问题
- request和response的中文乱码问题
- request和response的中文乱码问题
- request和response的中文乱码问题
- C#request和response的中文乱码问题
- request、response 中文乱码问题与解决方式
- request、response 中文乱码问题与解决方式
- 服务器中文乱码问题(request和response)