操作记录
2016-12-21 本文已影响0人
橙子潘潘
2016/12/20
$ gedit ~/.bashrc```
添加命令:
export CATALINA=/usr/local/tomcat
export CLASSPATH $CATALINA/common/lib/servlet-api.jar:$CLASSPATH```
至行尾。
以上内容无效。
GBK,UTF-8,和ISO8859-1之间的编码与解码
值得注意的是在执行setCharacterEncoding()之前,不能执行任何getParameter()。java doc上说明:This method must be called prior to reading request parameters or reading input using getReader()。而且,**该指定只对POST方法有效,对GET方法无效。
分析原因,POST方法在执行第一个getParameter()的时候,java将会按照编码分析所有的提交内容,而后续的getParameter()不再进行分析,所以setCharacterEncoding()无效。而对于GET方法**提交表单是,提交的内容在URL中,一开始就已经按照编码分析所有的提交内容,setCharacterEncoding()自然就无效。
注意:
iso-8859-1是JAVA网络传输使用的标准字符集,而gb2312是标准中文字符集,当你作出提交表单等需要网络传输的操作的时候,就需要把 iso-8859-1转换为gb2312字符集显示,否则如果按浏览器的gb2312格式来解释iso-8859-1字符集的话,由于2者不兼容,所以会是乱码.
规律:
utf-8编码可以用gbk和iso8859-1解码后编回去;
gbk编码后只能用iso8859-1解码后编回去.
在JSP页面获取表单的值时会出现乱码,有两种解决方法:
- 在调用getParameter之前通过request.setCharacterEncoding设置字符编码
- 调用new String(str.getBytes("iso8859-1"), "UTF-8");编码后解码
Servlet表单数据
-
使用GET方法提交表单时:
HelloForm.java中修改内容
//处理中文,编码格式转换,教程内容
//String name = new String(request.getParameter("name").getBytes("UTF-8"),"UTF-8");
String docType = "<!DOCTYPE html> \n";
out.println(docType +
"<html>\n" +
"<head><title>" + "</title></head>\n" +
"<body bgcolor=\"#f0f0f0\">\n" +
"<h1 align=\"center\">" + title + "</h1>\n" +
"<ul>\n" +
" <li><b>站点名</b>:"
+ request.getParameter("name") + "\n" +//教程中:request.getParameter("name")=name
" <li><b>网址</b>:"
+ request.getParameter("url") + "\n" +
"</ul>\n" +
"</body></html>");```
2. **使用POST提交表单时**
```java
//处理中文,编码格式转换,教程内容
String name = new String(request.getParameter("name").getBytes("ISO8859-1"),"UTF-8");
String docType = "<!DOCTYPE html> \n";
out.println(docType +
"<html>\n" +
"<head><title>" + "</title></head>\n" +
"<body bgcolor=\"#f0f0f0\">\n" +
"<h1 align=\"center\">" + title + "</h1>\n" +
"<ul>\n" +
" <li><b>站点名</b>:"
+ name + "\n" +//教程中:request.getParameter("name")=name
" <li><b>网址</b>:"
+ request.getParameter("url") + "\n" +
"</ul>\n" +
"</body></html>");```