您的位置:首页 > 编程语言 > Java开发

【问题】JSP常见乱码解决以及javaBean基础知识

2013-04-25 22:12 567 查看
http://bbs.csdn.net/topics/70409966


首先声明文章来自Java程序员从笨鸟到菜鸟之(二十三)

        乱码问题应该是做javaWeb开发人员都遇到过的问题吧,这个问题当时还影响了 我学习java的想法,甚至有过想放弃的想法,没办法,当时年轻,呵呵。其实产生乱 码问题的原因有很多,解决乱码的问题也有很多,现在就⼀⼀来看⼀下:

出现乱码的地方大致可以分为以下三种:

1 jsp页面中 2 jsp页面之间相互传参的参数 3 与数据库中数据的存取 解决方案大致可以分为三种:

  1 出现在jsp页面中,是由于没有设置jsp页面的中文字符编码。  2 出现在jsp页面之间相互传参,是由于参数没有设置正确的字符编码。  3 以上2个问题解决了,那么存到数据库中,自然就不存在乱码。除非你对存入到数 据库里的数据再次进行编码。

具体的解决方法:

1.在表单页面头部设置字符编码为utf-8

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>

加上这句解决jsp页面中的中文乱码显示,tomcat编译完后向客户端输出的html文件不是 采用中文编码,所以会导致乱码产生。

 2.设置页面请求和回应的编码:

 <%request.setCharacterEncoding("utf-8");

  response.setCharacterEncoding("utf-8"); %>

加上这句解决jsp页面中的中文参数传递乱码。把浏览器默认使用的编码设置为“UTF- 8”发送请求参数。

3.String(request.getParameter("name").getBytes("ISO8859_1"),"utf-8");这句 的意思是,把传来的参数全部编码转换成utf-8,这样做的缺点是每次传来⼀个参数都 要这样写,很麻烦。

同样可通过设置server.xml配置文件来实现。

< Connector port ="8080" maxHttpHeaderSize ="8192" maxThreads ="150"  minSpareThreads ="25"  maxSpareThreads ="75" enableLookups ="false"  redirectPort ="8443"  acceptCount ="100" connectionTimeout ="20000"  disableUploadTimeout ="true"   URIEncoding ="utf-8"/>

但是这样就应用到整个webapp中去了。

4.还可以修改web.xml文件,配置⼀个过滤器。其原理都⼀样,只是换种方式而已

1.编写过滤器类:

package org.RN.util;

import java.io.IOException;

import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse;

public class Encoding implements Filter {   @SuppressWarnings("unused")   private FilterConfig config=null;   String encoding=null; public void destroy() {  this.encoding=null;  this.config=null;

 }

 public void doFilter(ServletRequest request, ServletResponse response,   FilterChain chain) throws IOException, ServletException {     if(encoding!=null)      request.setCharacterEncoding(encoding);     chain.doFilter(request, response);     

 }

 public void init(FilterConfig arg0) throws ServletException {  this.config=arg0;  this.encoding=arg0.getInitParameter("encoding");

 }

}

 2.在web.xml配置

<filter>  <description>缓存过滤</description>  <filter-name>Encoding </filter-name>  <filter-class>   filter.Encoding  </filter-class> </filter> <filter-mapping>  <filter-name>Encoding </filter-name>  <url-pattern>*</url-pattern> </filter-mapping>

</filter>

5.还有⼀种常见的乱码问题就是下载时出现文件名乱码

原来处理下载的代码如下: response.setHeader("Content-Disposition", "attachment; filename=" + java.net.URL Encoder.encode(fileName, "UTF-8"));

URLEncoder类包含将字符串转换为application/x-www-form-urlencoded MIME 格式 的静态方法。

URLDecoder与URLEncoder 类相对应的URLDecoder 类有两种静态方法。它们解码 以x-www-form-url-encoded这种形式编码的string。也就是说,它们把所有的加号(+) 转换成空格符,把所有的%xx分别转换成与之相对应的字符:

   

       JavaBean 是⼀种JAVA语言写成的可重用组件。为写成JavaBean,类必须是具体 的和公共的,并且具有无参数的构造器。JavaBean 通过提供符合⼀致性设计模式的 公共方法将内部域暴露成员属性。众所周知,属性名称符合这种模式,其他Java 类 可以通过自身机制发现和操作这些JavaBean 属性。

         JavaBean的任务就是: “Write once, run anywhere, reuse everywhere”,即“⼀次性 编写,任何地方执行,任何地方重用”。这个任何实际上就是要解决困扰软件工业的 日益增加的复杂性,提供⼀个简单的、紧凑的和优秀的问题解决方案。

        JavaBean 的范围 Scope 是⼀个具有生命时间的变量。JavaBean的范围在<jsp:use Bean scope=”….>标志中右边进行表示。将产生⼀个JavaBean的快捷参考。 说明:jsp 服务器引擎将剥离<jsp。。。。标记。并且在最终用户的浏览器上无法显示实际代码 。   

存在下面四种范围:页面page、请求request、对话session、应用application。

对话范围:

  对话范围的JavaBean 主要应用于跨多个页面和时间段: 例如填充 用户信息。 添 加信息并且接受回馈,保存用户最近执行页面的轨迹。对话范围JavaBean保留⼀些和 用户对话 ID 相关的信息。这些信息来自临时的对话cookie,并在当用户关闭浏览器时 ,这个cookie将从客户端和服务器删除。

页面/请求范围:

  页面和请求范围的JavaBean有时类似表单 的bean , 这是因为 他们大都用于处理 表单。表单需要很长的时间来处理用户的输入,通常情况下用于页面接受HTTP/POS T或者GET请求。另外页面和请求范围的bean可以用于减少大型站点服务器上的负载 ,如果使用对话bean,耽搁的处理就可能会消耗掉很多资源。

应用:
  应用范围通常应用于服务器的部件,例如 JDBC 连接池、应用监视、用户计数和 其他参与用户行为的类。 在Bean中限制HTML的产生: 理论上,JavaBean 将不会产 生任何HTML,因为这是jsp层负责的工作;然而,为动态消息提供⼀些预先准备的格 式是非常有用的。产生的HTML将被标注的 JavaBean方法返回。

另外分享个论坛贴:
http://bbs.csdn.net/topics/70409966
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐