`

32、servlet --重定向/下载/缓存/中文乱码

    博客分类:
  • mvc
 
阅读更多
重定向1、sendRedirect
rep.sendRedirect(path+"/pages/login.jsp?info=username or password is worng .");
重定向2、Location  一定要设置302  302是指请求重定向
rep.setStatus(302);
rep.setHeader("Location", basePath+"pages/login.jsp?info=username or password is worng .");
重定向3、Refresh
rep.setHeader("Refresh", "2,pages/login.jsp?info=username or password is worng .");


使用sendRedirect()传递参数
1、static变量,纯servlet时可用
2、...jsp?name=name&pwd=111122   缺点:只能穿字符串,而不能传对象
3、使用session
    传字符串:
//存入seesion
 req.getSession().setAttribute("name", name);
//重定向1、sendRedirect
rep.sendRedirect(path+"/pages/login.jsp?info=username or password is worng .");

  获取seesion
  <%=request.getSession().getAttribute("name") %>
传递对象:
  req.getSession().setAttribute("obj", ct);
  <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
   ${obj.name }
在servlet中获取:
   Constant ct = (Constant)request.getSession().getAtttibute("obj");



web容器下载文件的原理:
1、将图片图取到内存中
2、将文件发送给浏览器
response.setContentType("text/html;charset=utf-8");
		//提示浏览器有文件下载,自动弹框,默认是打印在浏览器页面上
		response.setHeader("Content-Disposition", "attachment;filename=1.jpg");
		//获取文件的真实路径
		String realPath = this.getServletContext().getRealPath("/images/1.jpg");
		//System.out.println(realPath);
		//将文件存入内存,创建输入流
		FileInputStream fi = new FileInputStream(realPath);
		byte buff [] = new byte[2048];
		//实际每次读取了多少字节
		int len = 0;
		OutputStream os = response.getOutputStream();
		while((len=fi.read(buff))>0)
		{
			//发送给浏览器
			os.write(buff,0,len);
		}
		os.close();
		fi.close();
	}



缓存:
浏览器缓存(Browser Caching)是为了节约网络的资源加速浏览,浏览器在用户磁盘上对最近请求过的文档进行存储,当访问者再次请求这个页面时,浏览器就可以从本地磁盘显示文档,这样就可以加速页面的阅览。
浏览器默认会缓存所用页面,但对于及时交互性较强的网站如银行、证券系统是不合适的;
1、禁用缓存
response.setDateHeader("Expires",-1);  [ie]
response.setHeader("Cache-control","no-cache"); [firefox]
response.setHeader("Pragme","no-cache"); [other browser]

2、设置缓存时间
response.setDateHeader("Expires",System.currentTimeMillis()+3600);


web容器对每个请求都会 创建一个request对象和一个response对象;作为service()方法的参数;
response不能同时使用getWriter()和getOutputStream();
原因:
1、web容器拆解response为http协议识别的信息
2、web容器检测response所带的对象、属性、流等,查看liu是否关闭,没关闭就容器来关闭流;
3、web关闭了writer流,而还存在output流,提示流已经被关闭错误。


request的中文乱码处理:
response的中文乱码处理:
发生中文的3中情况
1、表单
2、超链接?name=民族(本质是get方式提交)
解决方法:
doPost()
request.setCharacterEncoding("utf-8");
doGet()
String name = req.getParameter("name");
try {
String newname = new String(name.getBytes("iso-8859-1"),"utf-8");
3、response.sendRedirect("...?name=名字");
  而浏览器没有正常显示/login.jsp?info=   后面的汉字不见了。。。
  要进行转码:?name=%E9%9A%8F%E8%BA%AB%E9%82%AE
  rep.sendRedirect(path+"/pages/login.jsp?info="+new String("随身".getBytes("utf-8"),"iso-8859-1"));
  String info = (String)request.getParameter("info");
  String newinfo = new String(info.getBytes("iso-8859-1"),"utf-8");

session只要接收的不是乱码,就不会出现乱码。

文件下载时中文乱码
response.setHeader("Content-Disposition", "attachment;filename=名字.jpg");
解决方法:
String name = new String("名字.jpg".getBytes("utf-8"),"iso-8859-1");
response.setHeader("Content-Disposition", "attachment;filename="+name);

常用编码:gbk,gb2312,iso-8859-1,utf-8
分享到:
评论

相关推荐

    servlet 过滤器大全

    ### Servlet过滤器详解 #### 一、字符编码过滤器 在Web开发中,尤其是在处理中文等多语言环境时,字符编码的问题尤为重要。如果字符编码设置不当,可能会导致页面出现乱码。为此,开发者通常会使用字符编码过滤器...

    servlet filter大全

    Servlet过滤器是Java Web开发中的一个重要概念,它允许开发者在请求到达Servlet之前或者响应离开Servlet之后进行拦截处理。"servlet filter大全"这个主题涵盖了多种常见的过滤器设置,旨在提高应用的功能性和安全性...

    servlet filter

    Servlet过滤器是Java Web开发中的一个重要概念,它在Servlet生命周期中扮演着不可或缺的角色。过滤器允许开发者在请求到达Servlet之前或在响应离开Servlet之后对请求和响应进行处理。这一特性使得过滤器在处理数据、...

    jsp过滤器的使用(含一个project实例说明)

    - **缓存处理**:控制是否缓存页面,提高性能。 - **GZIP压缩**:对响应内容进行压缩,减少网络传输的数据量。 总结,JSP过滤器是Java Web开发中的重要工具,它允许我们在请求到达目标资源之前进行干预,实现各种...

    Servlet过滤器

    - **缓存控制**:根据需要控制资源的缓存策略。 6. **动态配置与编程式注册** 除了在`web.xml`中静态配置过滤器,还可以使用Servlet 3.0及以上版本提供的注解`@WebFilter`进行动态配置。此外,可以通过`Filter...

    Filter知识点整理文档

    1. **字符编码转换**: 在请求进入Servlet之前,统一设置请求和响应的编码格式,防止乱码问题。 2. **权限控制**: 检查用户是否登录,未登录则重定向到登录页面。 3. **日志记录**: 记录请求信息,便于分析系统性能和...

    Servlet过滤器大全

    当用户提交表单数据时,如果编码格式不一致,可能会导致中文显示为乱码。字符编码过滤器可以在请求到达目标资源之前设置请求的字符编码,从而确保数据的正确性。 **代码实现:** ```java public class ...

    java中的filter

    在Java Web开发中,`Filter`(过滤器)是一个至关重要的概念,它允许开发者在请求到达Servlet之前或从Servlet响应返回客户端之前进行拦截处理。`Filter`是Java Servlet API的一部分,定义在`javax.servlet.Filter`...

    java中需要用到的各种过滤器

    - **目的:** 确保客户端发送的数据能够正确解析,避免乱码问题。 **3. 代码实现:** ```java public class CharacterEncodingFilter implements Filter { protected FilterConfig filterConfig = null; ...

    java过滤器讲义

    2. **设置浏览器不缓存服务器内容**:通过过滤器设置响应头,告诉浏览器不要缓存服务器返回的内容,这对于动态内容更新频繁的应用非常有用。 #### 八、总结 Java过滤器作为Servlet规范中的一个重要组成部分,为Web...

    HttpServletResponse

    对于中文乱码问题、网页定时刷新与跳转以及禁止浏览器缓存页面等功能,`HttpServletResponse`都提供了丰富的API来实现这些需求。 #### 二、中文乱码问题及解决方案 在Web应用开发中,经常会遇到中文乱码的问题。这...

    jsp文档 jsp资料 jsp重要知识点

    **JSP重要知识点详解** 1. **Web-App目录结构** ...以上就是JSP的重要知识点,包括目录结构、Servlet生命周期、乱码处理、会话管理以及页面间的跳转和包含等,这些都是进行JSP开发时需要掌握的基础知识。

    过滤器 java servlet

    Java Servlet中的过滤器(Filter)是Java Web开发中一个非常重要的概念,它是Servlet API的一部分,主要用于在请求被发送到目标Servlet或JSP之前对请求进行预处理,以及在响应返回给客户端之前对响应进行后处理。...

    三歪教你学Servlet1

    【Servlet基础】 Servlet是一种Java编程语言中的接口,用于扩展服务器的功能,特别是在Web应用程序中处理HTTP请求。Servlet接口定义了服务器端程序如何响应客户端请求的方法。我们使用Servlet主要是因为它们可以提供...

    六个有用的java过滤器

    字符编码过滤器用于统一整个Web应用程序中的字符编码,确保所有的输入输出都使用相同的字符集,避免乱码问题。实现方法如下: ```java import javax.servlet.*; import javax.servlet.http.HttpServletRequest; ...

    servlet验证码制作和过滤器

    4. **缓存控制**:设置响应头,控制浏览器缓存策略,防止敏感信息被缓存。 5. **日志记录**:记录请求信息,帮助调试和监控应用。 在实际应用中,可以创建自定义的Servlet Filter实现`javax.servlet.Filter`接口,...

    第20章 Request和Response.pdf

    - `setCharacterEncoding(String encoding)`:设置请求体的字符编码,防止中文乱码。 二、Response对象 `Response`对象代表HTTP响应报文,用于向客户端发送响应。其主要功能包括: 1. **设置响应消息**: - `...

    实例详解JSP内置对象--response对象

    7. **处理汉字信息**:在处理包含汉字的请求参数时,可能会遇到乱码问题。可以通过以下步骤解决: - 获取参数:`String textContent=request.getParameter("参数名")` - 编码转换:`byte[] b=textContent.getBytes...

Global site tag (gtag.js) - Google Analytics