mysql show variables like 'character%';
查看当前mysql数据库的所有属性的字符编码,
1,设置客户端使用的字符集
2,设置链接数据库时的字符集
3,设置创建数据库的编码格式
4,文件系统的编码格式
5,数据库给客户端返回数据时的编码格式
6,服务器安装时指定的编码格式
7,数据库系统使用的编码格式
8,字符集的安装目录
1、启动weblogic 管理服务器,使用管理用户登录weblogic管理控制台。
2、打开管理控制台后,在左侧的树形域结构中,选择服务->数据源。
3、在右侧的窗口中,选择 新建->一般数据源。
4、填写数据源名称,JNDI名,选择数据库类型(本文以Oracle数据库为例)
点击下一步按钮。
5、选择数据库驱动程序,点击下一步按钮。
6、事务处理选项画面,点击 下一步 按钮。
7、新建JDBC数据源,点击 测试配置 按钮,查看已经配置完成的JDBC数据源是否可用。
出现 连接测试成功 提示消息 表示 JDBC数据源 配置成功。
8、点击 下一步 按钮,配置 JDBC数据源 目标服务器。
9、在需要 应用此 JDBC数据源的 服务器的 复选框 打勾。
10、点击 完成 按钮。
到此位置 完成JDBC配置。不需要重启。直接可以使用。
1 什么是URL编码。
URL编码是一种浏览器用来打包表单输入的格式,浏览器从表单中获取所有的name和其对应的value,将他们以name/value编码方式作为URL的一部分或者分离的发送到服务器上。
2 URL编码规则。
每对name/value由&分开,每对来自表单的name/value用=分开。如果用户没有输入值的那个name依旧会出现不过就是没有值。
URL编码是在字符ASCII码的十六进制数的前面加上%。例如\(她的十六进制数表示为5c)的URL编码就是%5c。
3 简单介绍乱码和http请求
其实做web开发乱码问题是经常出现的,有了上面编码的基础之后下面来看看乱码。
1) 乱码问题是web开发过程中经常遇到的问题,主要原因就是URL中使用了非ASCII码造成服务器后台程序解析出现乱码的问题。
2) URL中最容易出现中文的地方就是在QueryString的参数值还有Servletpath中。
3) 简单用一个图来说明一下http请求的流程:
第一步:浏览器把URL经过编码送给服务器;
第二步:服务器把这些请求解码处理完毕之后将显示的内容进行编码发送给客户端浏览器;
第三步:浏览器按照指定的编码显示网页
4) 详细剖析GET提交如何编码以及服务器如何解码以及乱码解决方案
对于GET方式,我们知道它的提交是将请求数据附加到URL后面作为参数,这样依赖乱码就会很容易出现,因为数据name和value很有可能就是传递的为非ASCII码。
当URL拼接后,浏览器对其进行encode,然后发送到服务器。具体规则见URL编码规则。
这里详细说一下encode的过程中容易出现的问题,在这个过程中我们要明白需要URL encode的字符一般都是非ASCII码字符,所以我们就能知道出现乱码主要是URL中附加了中文或特殊字符做成的,另一个要知道URL encode到底是以什么样的编码方式对字符进行编码的,其实这个编码方式是由浏览器决定的,不同的浏览器和同一浏览器的不同设置影响了URL的编码,所以为了避免我们不需要的编码,我们可以通过java代码或javaspcript代码统一进行控制。
完成了URL encode之后URL就成了ASCII范围内的字符了,然后就以iso-8859-1的编码方式转换为二进制随着请求头一起发送出去。
到了服务器之后,首先服务器会先用iso-8859-1进行解码,服务器获取的数据都是ASCII范围内的请求头字符,其中请求URL里面带有参数数据,如果是中卫或特殊字符,那么encode后的%XY(编码规则中的十六进制数)通过requestsetCharacterEncoding()是不管用的。这时候我们就能发现出现乱码的根本原因就是客户端一般是通过用UTF-8或GBK等对数据进行encode的,到了服务器却用iso-8859-1方式decoder显然不行。
这里的解决方式有两种,
一种:是通过String类的getBytes方法进行编码转换,具体java代码是:
new String(requestgetParameter(“name”)getBytes(“iso-8859-1”),“客户端编码方式”)
第二种:在服务器xml代码中改配置信息:
<Connector port="8080"protocol="HTTP/11" maxThreads="150" connectionTimeout="20000"
redirectPort="8443"URIEncoding="客户端编码"/>
5) 详细剖析POST提交如何编码以及服务器如何解码以及乱码解决方案
对于POST方式,表单中的参数值对是通过request包发送给服务器,此时浏览器会根据网页的ContentType("text/html; charset=GBK")中指定的编码进行对表单中的数据进行编码,然后发给服务器。
在服务器端的程序中我们可以通过
RequestsetCharacterEncoding()设置编码,然后通过
requestgetParameter获得正确的数据。
这里出现乱码可以通过RequestsetCharacterEncoding()直接解决。
1 乱码问题
为何会出现乱码问题?既然有乱码问题,肯定是由于编码设置的不一致导致的。在Web开发 过程中,涉及以下一些编码设置,客户端参数的编码设置,Web服务器的编码设置,服务器端应用程序的编码设置,数据库的编码设置等。只要这四处的编码设置 有不相同的,就可能会出现乱码问题。瑭锦TANJURD建议开发人员在进行开发之前,不防先了解一下这四个编码在哪里设置,当前自己的项目设置是怎么样的,这样就可以很好的避免 编码问题。
2 客户端Javascript技术
客户端技术有很多,Javascript应该说是功能最强大、应用最广泛的一个了。用好Javascript,在系统设计时多考虑客户端的实现方式,可以很好的辅助进行服务器端的功能设计。优秀的Javascript框架还是推荐jQuery,其功能简单、实用而强大。
3 Ajax
现在的Java Web系统,不使用Ajax技术是不可能的了。Ajax实在是一项不错的技术,不刷新页面而完成与服务器端的通信,它使得基于B/S的结构功能更强大了, 许多传统的Web应用程序所无法完成的功能现在大都可以用B/S架构来实现。对于Ajax现在已经有很多成熟的Javascript框架可以使用。首推 jQuery,其提供的Ajax功能简单而实用。
4 异常处理
应该说对于每个系统来说,异常处理都是很重要的。但在B/S结构的环境中,异常就显得更为重要,一个设计良好的异常处理框架可以减少很多的代码编写工作。
5 权限控制
对于一个Java Web系统,不是所有的页面与功能都允许所有的用户访问的,这样就需要对用户能访问哪些页面进行控制了。一般的Java Web系统,都需要进行权限控制。进行权限控制的方法有很多,以前看到有不少项目直接在程序里写权限控制的代码,这样的弊端是显而易见的,太不利于扩展 了,只要有任何的修改,都需要改动相当的代码,一是容易出错,二是修改的代价大。一个比较好的想法是基于AOP的思想,使用拦截器来进行权限控制,瑭锦TANJURD提醒前提是系统要配置一定的数据库结构,如用户-角色-权限表这样的表结构。当然,目前有不少的权限控制开源框架如acegi。
6 参数验证
All Input Is Evil。对于输入参数的验证是少不了的。对于参数的验证,有客户端验证与服务器端验证,一般来说,能够在客户端进行验证的,优先考虑客户端验证以减少服 务器端压力。现在有许多的Javascript框架可以很好的完成这一工作。如Jquery Validation插件。
主要分response的字节字符输出流和request接受中文参数doGet(),doPost()的设置四种以及从服务器下载文件到浏览器的编码问题
都是我学习java时总结的,希望能帮到你
response的字节输出流:
// 设置浏览器默认打开的时候采用的字符集编码
responsesetHeader("Content-Type", "text/html;charset=UTF-8");
// 设置中文转成字节数组的时候取出的编码
responsegetOutputStream()write("如果不设置编码,这里就是乱码"getBytes("UTF-8"));
response的字符输出流:
//设置浏览器默认打开的时候采用的字符集编码,response的字符流的缓冲区的编码
responsesetContentType("text/html;charset=UTF-8");
responsegetWriter()println("中文");
request的doGet()编码解决:
String name = new String(requestgetParameter("name")getBytes("ISO-8859-1"),"UTF-8");
Systemoutprintln("GET方式:"+name);
request的doPost()编码解决:
requestsetCharacterEncoding("UTF-8");
String name = requestgetParameter("name");
Systemoutprintln("POST方式:"+name);
下载文件时浏览器编码问题:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 1接收参数
String filename = new String(requestgetParameter("filename")getBytes("ISO-8859-1"),"UTF-8");
Systemoutprintln(filename);
// 2完成文件下载:
// 21设置Content-Type头(获取文件的mime类型)
String type = thisgetServletContext()getMimeType(filename);
//设置文件的mime类型
responsesetHeader("Content-Type", type);
// 23web项目文件的绝对路径
String realPath = thisgetServletContext()getRealPath("/download/"+filename);
// 获得浏览器的类型处理中文文件的乱码问题(User-Agent:服务器收到客户端版本之类的一些信息)
String agent = requestgetHeader("User-Agent");
Systemoutprintln(agent);
if(agentcontains("Firefox")){
filename = base64EncodeFileName(filename);
}else{
//IE谷歌编码
filename = URLEncoderencode(filename,"UTF-8");
}
// 22设置Content-Disposition头(固定写法,让浏览器必须下载,不能直接打开)
responsesetHeader("Content-Disposition", "attachment;filename="+filename);
//获得文件
InputStream is = new FileInputStream(realPath);
// 获得response指定的方法获取输出流:如果用其他流是直接拷贝而不是下载
OutputStream os = responsegetOutputStream();
int len = 0;
byte[] b = new byte[1024];
while((len = isread(b))!= -1){
oswrite(b, 0, len);
}
//响应流可以不关,在服务器做出相应后服务器会自动把response获得的流关闭
isclose();
}
//火狐
public static String base64EncodeFileName(String fileName) {
BASE64Encoder base64Encoder = new BASE64Encoder();
try {
return "=UTF-8B"
+ new String(base64Encoderencode(fileName
getBytes("UTF-8"))) + "=";
} catch (UnsupportedEncodingException e) {
eprintStackTrace();
throw new RuntimeException(e);
}
}
0条评论