下面技术工兵通过一个向某人问好的实例讲解jsp请求与响应编码问题。页面出现乱码,是初学者必然遇到的问题,通过本章学习您可以解决这问题了。
Netbeans生成的jsp页面默认的编码为UTF-8。jsp指令(directive)<%@page contentType=”text/html” pageEncoding=”UTF-8″%>声明了页面(page)pageEncoding属性为”UTF-8″,这样在页面中就能输入中文内容了。若pageEncoding =”ISO-8859-1″,页面中的中文则会成为乱码。这是page指令,还有include和taglib指令,技术工兵会在后面陆续讲到。
在index.jsp页面输入以下代码,
<form action=”do.jsp”>
姓名 : <input type=”text” name=”username”/>
<br />
<input type=”submit” value=”提交” >
</form>
在do.jsp页面输入以下代码,
Hello <%=request.getParameter(“username”)%>
在index.jsp输入英文提交,可以正常显示,比如我们输入“onion.yang”则返回显示“Hello onion.yang”。看代码知道,除了<% %>其他都是html的东西,<% %>是jsp的东西,其中夹包java代码。<%= %>是输出语句,<%=request.getParameter(“username”)%>等同于<%out.print(request.getParameter(“username”));%>
这里是一个简单的form,里面只有一个名叫username的文本框,点击提交之后它的值就会提交到服务器上,由do.jsp处理响应。那么在do.jsp里,如何得到用户输入的username呢?
首先是request,它被称作jsp九大默认对象之一,与http请求相关的操作都是通过request实现的,你完全可以把它看作是浏览器发送过来的http请求。request对象里就包含了我们需要获得的参数,只要调用request对象获取参数的方法getParameter(“username”)就可以获得了。你交给request一个参数名(username),它会返回对应的参数值。因为http协议的限制,获得的参数值都是字符串,不过在参数不存在的时候,会返回null,所以一定要记住在使用参数值之前判断是否为null,免得频繁出现NullPointerException。
但是输入中文时候,比如输入“技术工兵”提交,则会显示“Hello ææ¯å·¥å
µ”,浏览器地址栏显示
“http://localhost:8080/Demo2_0/do.jsp?username=%E6%8A%80%E6%9C%AF%E5%B7%A5%E5%85%B5”。什么会这样呢?发送请求的时候,使用的编码是ISO-8859-1,意味着只有英文是有效字符,这个限制是因为当初指定http标准的成员都来自英语国家,所以如果对request不进行编码设置,从request获取的中文数据会全部变成乱码。只要在获取request对象值前,对request编码设置<%request.setCharacterEncoding(“UTF-8″); %>就能得到中文值了。或者用以下代码形式也可以得到中文信息
<%
String username = request.getParameter(“username”);
byte[] bytes = username.getBytes(“iso-8859-1″);
String result = new String(bytes, “UTF-8″);
out.print(“Hello “+result+”<br/>”);
%>
上一篇:技术工兵教你jsp – 浏览器(Browser)/服务器(Server)结构
下一篇: