javaBean的基础知识及常见乱码解决方法
javabean的基础知识及常见乱码解决方法
乱码问题应该是做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.urlencoder.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:usebean scope=”….>标志中右边进行表示。将产生一个javabean的快捷参考。 说明:jsp服务器引擎将剥离<jsp。。。。标记。并且在最终用户的浏览器上无法显示实际代码。
存在下面四种范围:页面page、请求request、对话session、应用application。
对话范围:
对话范围的javabean 主要应用于跨多个页面和时间段: 例如填充 用户信息。 添加信息并且接受回馈,保存用户最近执行页面的轨迹。对话范围javabean保留一些和用户对话 id 相关的信息。这些信息来自临时的对话cookie,并在当用户关闭浏览器时,这个cookie将从客户端和服务器删除。
页面/请求范围:
页面和请求范围的javabean有时类似表单 的bean , 这是因为 他们大都用于处理表单。表单需要很长的时间来处理用户的输入,通常情况下用于页面接受http/post或者get请求。另外页面和请求范围的bean可以用于减少大型站点服务器上的负载,如果使用对话bean,耽搁的处理就可能会消耗掉很多资源。
应用:
应用范围通常应用于服务器的部件,例如 jdbc 连接池、应用监视、用户计数和其他参与用户行为的类。 在bean中限制html的产生: 理论上,javabean 将不会产生任何html,因为这是jsp层负责的工作;然而,为动态消息提供一些预先准备的格式是非常有用的。产生的html将被标注的 javabean方法返回。
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!