http协议4---GET方式和POST方式获取表单数据举例3(统一方式获取,解决中文乱码问题)

来源:互联网 发布:淘宝好看的情侣装店铺 编辑:程序博客网 时间:2024/05/29 19:44

http协议---GET方式和POST方式获取表单数据举例3(统一方式获取,解决中文乱码问题)

上篇文章只适用于提交的数据都是英文的,但如果是中文的就会出现乱码的情况,因为我们指定的编码格式为UTF-8,但服务器默认的编码格式为iso-8859-1,所以要解决乱码问题需要进行编码转换

注意:POST方式参数编码:request.setCharacterEncoding("utf-8");

           GET方式参数编码:手动单个解码---> String name = new String(name.getBytes("iso-8859-1"),"utf-8");

html文件:testParam.html

<!DOCTYPE html><html>  <head>    <title>请求参数传递和接收的问题</title>    <meta name="keywords" content="keyword1,keyword2,keyword3">    <meta name="description" content="this is my page">    <meta name="content-type" content="text/html; charset=UTF-8">        <!--<link rel="stylesheet" type="text/css" href="./styles.css">-->  </head>    <body>  <h3>GET请求</h3>  <form action="/day08_web/Demo_Request2" method="GET">  用户名:<input type="text" name="name"/></br>  密码:<input type="password" name="password"></br>  <input type="submit" value="提交"/>  <br/>  性别:  <input type="radio" name="gender" value="male"/>男  <input type="radio" name="gender" value="female"/>女  <br/>    籍贯:  <select name="jiguan">  <option value="gd">广东</option>  <option value="gx">广西</option>  <option value="hn">湖南</option>  </select>  <br/>    爱好:  <input type="checkbox" name="hobit" value="lq"/>篮球  <input type="checkbox" name="hobit" value="zq"/>足球  <input type="checkbox" name="hobit" value="ymq"/>羽毛球  <br/>    个人简介:  <textarea rows="5" cols="10" name="info"></textarea>  <br/>    <!-- 隐藏域 -->  <input type="hidden" name="id" value="001">  <br/>    <input type="submit" value="提交"></form><hr/><h3>POST请求</h3>  <form action="/day08_web/Demo_Request2" method="POST">  用户名:<input type="text" name="name"/></br>  密码:<input type="text" name="password"></br>  <input type="submit" value="提交"/>  <br/>    性别:  <input type="radio" name="gender" value="male"/>男  <input type="radio" name="gender" value="female"/>女  <br/>    籍贯:  <select name="jiguan">  <option value="gd">广东</option>  <option value="gx">广西</option>  <option value="hn">湖南</option>  </select>  <br/>    爱好:  <input type="checkbox" name="hobit" value="lq"/>篮球  <input type="checkbox" name="hobit" value="zq"/>足球  <input type="checkbox" name="hobit" value="ymq"/>羽毛球  <br/>    个人简介:  <textarea rows="5" cols="10" name="info"></textarea>  <br/>    <!-- 隐藏域 -->  <input type="hidden" name="id" value="001">  <br/>    <input type="submit" value="提交"></form>  </body></html>

主程序 Demo_Request2.java

package Request;import java.io.IOException;import java.io.InputStream;import java.io.PrintWriter;import java.util.Enumeration;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;/* * 获取GET方式和POST方式提交的参数 */public class Demo_Request2 extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {/* * 设置参数查询的编码,解决不同的编码解析导致中文乱码的情况(直接改的是全部的,方便) * 但是该方法只能对请求实体内容的数据编码起作用。POST提交的数据在实体内容中, * 所以该方法对POST方式起作用,而GET方法的参数放在URI后面,所以对GET方式无效!!! * 所以GET方法的只能手动解码。。。 */request.setCharacterEncoding("utf-8");/* * 统一方便的获取请求参数方法 */System.out.println(request.getMethod()+"方式获取数据");//根据参数名得到参数值(只能获取一个值得参数)String name = request.getParameter("name");/* * 手动重新解码(ios-8859-1 字符串 -> utf-8字符串)(只是单个的改解码格式,比较麻烦) * 但GET方法的只能手动解码 */if("GET".equals(request.getMethod())) {name = new String(name.getBytes("iso-8859-1"),"utf-8");}String password = request.getParameter("password");if("GET".equals(request.getMethod())) {password = new String(password.getBytes("iso-8859-1"),"utf-8");}System.out.println(name+"---"+password);System.out.println("=================================================");//获取全部的参数名和参数值Enumeration<String> enums = request.getParameterNames();while(enums.hasMoreElements()) {String paramName = enums.nextElement();if("hobit".equals(paramName)) {/* * 根据参数名获取参数值(但是可以获取多个值) */String[] hobits = request.getParameterValues("hobit");for(String h : hobits) {if("GET".equals(request.getMethod())) {h = new String(h.getBytes("iso-8859-1"),"utf-8");}System.out.println(paramName+"---"+h+", ");} } else {String paramValue = request.getParameter(paramName);if("GET".equals(request.getMethod())) {paramValue = new String(paramValue.getBytes("iso-8859-1"),"utf-8");}System.out.println(paramName+"---"+paramValue);}}}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {//System.out.println("POST方式提交");//InputStream in = request.getInputStream();//byte[] buf = new byte[1024];//int len = 0;//while((len = in.read(buf)) != -1) {//System.out.println(new String(buf,0,len));//}//System.out.println(request.getMethod()+"方式获取数据");////根据参数名得到参数值//String name = request.getParameter("name");//String password = request.getParameter("password");//System.out.println(name+"---"+password);////获取全部的参数名和参数值//Enumeration<String> enums = request.getParameterNames();//while(enums.hasMoreElements()) {//String paramName = enums.nextElement();//String paramValue = request.getParameter(paramName);//System.out.println(paramName+"---"+paramValue);//}//一定调用doGet方法this.doGet(request, response);}}


 

0 0
原创粉丝点击