六、从表单和request中获取数据、乱码问题的解决
1、从表单中获取数据和从request范围中获取数据的区别?
2、乱码问题的解决:
|实例|

xml文件中的内容:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
<display-name>prj-servlet08</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>SaveDeptServlet</servlet-name>
<servlet-class>com.bj.SaveDeptServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>SaveDeptServlet</servlet-name>
<url-pattern>/sds</url-pattern>
</servlet-mapping>
</web-app>
index.html文件
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="/prj-servlet08/sds" method="post">
部门名<input type="text" name="dname"><br>
<input type="submit" name="保存">
</form>
</body>
</html>
SaveDeptServlet内容:
package com.bj;
import java.io.IOException;
import javax.servlet.GenericServlet;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import sun.org.mozilla.javascript.internal.ast.NewExpression;
public class SaveDeptServlet extends GenericServlet {
@Override
public void service(ServletRequest request, ServletResponse response)
throws ServletException, IOException {
//从表单中获取数据:
String dname=request.getParameter("dname");
System.out.println(dname);//此时在控制台的输出显示为:????乱码
//第一种解决方式:万能解决方案,POST和get都可以使用
byte[] bytes=dname.getBytes("ISO-8859-1");
dname=new String(bytes,"UTF-8");//解码
System.out.println(dname);
/*
注意:以下两种方法的区别:
String dname= request.getParameter("dname");//从表单中获取数据
Object obj= request.getAttribute(dname);//从request范围中获取数据(之前一定调用过:setAttribute)
*/
//第二种解决方案:调用request的setCharacterEncoding,但是这种方式只适合post请求,只对请求体编码
//告诉tomcat服务器,请求体中的数据,采用utf-8的方式进行编码
request.setCharacterEncoding("UTF-8");
String dname2=request.getParameter("dname");
System.out.println(dname2);
}
}

浙公网安备 33010602011771号