Javaweb接收表单数据并处理中文乱码

前端表单数据

常见的表单项的传值,如:

  • 普通input
  • 单选radio
  • 多选checkbox
  • select下拉选择
  • textarea文本域

普通 input : name属性值为后台接收时的参数值。

用户名:<input type="text" name="username"><br>
密码:<input type="password" name="password"><br>

单选 radio :单选按钮的 name 值相同才能实现只能点击一个。

性别:

<input type="radio" name="gender" value="男">男
<input type="radio" name="gender" value="女">女

多选checkbox :name值相同。

爱好:

<input type="checkbox" name="hobby" value="唱">唱
<input type="checkbox" name="hobby" value="跳舞">跳舞
<input type="checkbox" name="hobby" value="rap">rap
<input type="checkbox" name="hobby" value="篮球">篮球

select下拉选择 :后台通过degree作为参数,获取选中的那个option的value值。

下拉选择:

<select name="degree">
<option value="">---请选择---</option>
<option value="大一">大一</option>
<option value="大二">大二</option>
<option value="大三">大三</option>
<option value="大四">大四</option>
</select>

textarea文本域 :rows定义显示的行数,cols定义的是显示的列数。

文本域:<br><textarea name="other" rows="10" cols="30"></textarea><br>

后台接收数据

接收表单数据:

String 表单name= request.getParameter(表单name);

普通input、单选radio、select下拉选择、textarea文本域可通过此方法获取。

String[] hobbies = request.getParameterValues("hobby");

多选checkbox可通过此方法获取。

中文乱码处理

GET方式提交的数据

先通过 String username = request.getParameter(username) 获得该表单的值,此时是乱码的。

使用String new_username = new String(username.getBytes("iso8859-1"), "utf-8") 进行编码转换

相关APi :

String(byte[] bytes, Charset charset) 构造一个新的String,由指定的字节的数组转化为指定编码的字节数组。

getBytes(Charset charset)使用指定的编码方式将该String编码为字节序列,将结果存储到新的字节数组中。

解释:通过get方式提交的数据的编码方式为iso8859-1, 先获取该编码方式的字节数组,再将该字节数组转化为utf-8编码的字节数组,然后将该字节数组转换为字符串。

POST方式提交的数据

request.setCharacterEncoding("utf-8");

服务器端向客户端发送的数据

response.setContentType("text/html;charset=utf-8");

以下是全部代码:

GET提交方式:

@WebServlet(name = "RegisterServlet",urlPatterns = "/register")
public class RegisterServlet extends HttpServlet {
  protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    //get提交方式处理中文乱码
    String username = request.getParameter("username");
    String new_username = new String(username.getBytes("iso8859-1"), "utf-8");

    String password = request.getParameter("password");
    String new_password = new String(password.getBytes("iso8859-1"), "utf-8");

    String gender = request.getParameter("gender");
    String new_gender = new String(gender.getBytes("iso8859-1"), "utf-8");

    String[] hobbies = request.getParameterValues("hobby");
    for (int i = 0; i < hobbies.length; i++) {
      hobbies[i]=new String(hobbies[i].getBytes("iso8859-1"), "utf-8");
    }

    String degree = request.getParameter("degree");
    String new_password = new String(password.getBytes("iso8859-1"), "utf-8");

    String other = request.getParameter("other");
    String new_password = new String(password.getBytes("iso8859-1"), "utf-8");
  }

  protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    doPost(request, response);
  }
}

POST提交方式:

@WebServlet(name = "RegisterServlet",urlPatterns = "/register")
public class RegisterServlet extends HttpServlet {
  protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    //post提交方式的中文乱码解决方法
    request.setCharacterEncoding("utf-8");
    String username = request.getParameter("username");
    String password = request.getParameter("password");
    String gender = request.getParameter("gender");
    String[] hobbies = request.getParameterValues("hobby");
    String degree = request.getParameter("degree");
    String other = request.getParameter("other");

    //如果服务器端需要向客户端发送的数据
    response.setContentType("text/html;charset=utf-8");
  }

  protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    doPost(request, response);
  }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • JAVA防止重复提交Web表单的方法

    本文实例讲述了JAVA防止重复提交Web表单的方法.分享给大家供大家参考,具体如下: package cn.com.form; import java.io.IOException; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.util.Random; import javax.servlet.ServletException; import java

  • Java Web实现文件下载和乱码处理方法

    文件上传和下载是web开发中常遇到的问题,这几天在做一个项目又用到了文件下载,之前也零零散散记了些笔记,今天来做一下整理.文件上传还有待进一步测试,这里先说一下文件下载. 一.文件下载处理流程 文件下载处理流程其实很清晰,即: 1.根据文件名或者文件路径定位文件,具体的策略主要根据自己的需求,总之需要系统能找到的文件全路径. 2.获取输入流,从目标文件获取输入流. 3.获取输出流,从response中获取输出流. 4.从输入流读入文件,通过输出流输出文件.这是真正的下载执行过程. 5.关闭IO流

  • 解决JavaWeb读取本地json文件以及乱码的问题

    最近在开发项目的时候遇到一个问题,在myecilpes上使用googlede gson读取项目中的json文件成功,然后把项目发布到tomcat上再使用同样的方法,会提示"系统找不到指定的路径" 文件放在src/config/下 JsonParser parser = new JsonParser(); JsonObject object = (JsonObject) parser.parse(new FileReader("config/Test.json"));

  • javaWEB中前后台乱码问题的解决方法总结

    JAVA中几种常见的编码格式及含义: ASCII 码 学过计算机的人都知道 ASCII 码,总共有 128 个,用一个字节的低 7 位表示,0~31 是控制字符如换行回车删除等:32~126 是打印字符,可以通过键盘输入并且能够显示出来. ISO-8859-1 128 个字符显然是不够用的,于是 ISO 组织在 ASCII 码基础上又制定了一些列标准用来扩展 ASCII 编码,它们是 ISO-8859-1~ISO-8859-15,其中 ISO-8859-1 涵盖了大多数西欧语言字符,所有应用的最

  • 解决javaWEB中前后台中文乱码问题的3种方法

    中文乱码问题真的是一个很棘手的问题,特别是从前台传到后台之后,都不知道问题出在哪里了.现在分享解决javaWEB中前后台中文乱码问题的3种方法. 方法一: tomcat的自带编码是ISO-8859-1的格式,是不兼容中文的编码的.所以我们从后台接收的时候要注意. 采用相同的格式去接收(ISO-8859-1),然后用能解析的编码(utf-8)去转换.这样我们就能得到能兼容中文的格式了.这样处理之后发往前台.注意:发往前台的时候也需要设置一下 resp.setContentType("text/ht

  • Java在web页面上的编码解码处理及中文URL乱码解决

    编码&解码  通过下图我们可以了解在javaWeb中有哪些地方有转码: 用户想服务器发送一个HTTP请求,需要编码的地方有url.cookie.parameter,经过编码后服务器接受HTTP请求,解析HTTP请求,然后对url.cookie.parameter进行解码.在服务器进行业务逻辑处理过程中可能需要读取数据库.本地文件或者网络中的其他文件等等,这些过程都需要进行编码解码.当处理完成后,服务器将数据进行编码后发送给客户端,浏览器经过解码后显示给用户.在这个整个过程中涉及的编码解码的地方较

  • Javaweb使用getPart接收表单文件过程解析

    使用getPart接收表单文件时,注意Tomcat版本要在8之上. 前台 : form.jsp <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> <form action="${pageC

  • java web过滤器处理乱码

    我们在servlet页面中读取前台的数据时  经常会出现乱码问题 而自己每次都要在servlet中使用 String encoding="utf-8"; request.setCharacterEncoding(enconding); response.setCharacterEncoding(enconding); 来进行编码的转换  会很麻烦 所以使用过滤器 我们可以避免这些重复的工作 web.xml配置 <filter> <filter-name>enco

  • JavaWeb中获取表单数据及乱码问题的解决方法

    首先使用一个用户提交界面作为举例(文本框,密码框,选择,下拉表单等),效果如下 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="t

  • Javaweb接收表单数据并处理中文乱码

    前端表单数据 常见的表单项的传值,如: 普通input 单选radio 多选checkbox select下拉选择 textarea文本域 普通 input : name属性值为后台接收时的参数值. 用户名:<input type="text" name="username"><br> 密码:<input type="password" name="password"><br>

  • Javaweb获取表单数据的多种方式

    Javaweb获取表单数据的几种方式 一.通过键值对的形式获取表单数据 getParameter(String name):通过key,返回一个value. getParameterValues(String name):通过key返回一个string数组(多个值) getParameterNames():返回form表单中的所有key值. 下面介绍通过键值对获取form表单数据的数据的方法: @WebServlet({ "/FormServlet", "/form"

  • PHP利用超级全局变量$_POST来接收表单数据的实例

    利用$_POST超级全局变量接收表单的数据,然后利用echo输出到页面. 下面是代码: <!doctype html> <html> <head> <title>利用超级全局变量$_POST接收表单</title> <meta http-equiv="content-type" contnet="text/html" charset="utf-8"/> </head&g

  • PHP利用超级全局变量$_GET来接收表单数据的实例

    我们在linux上用 touch php_get.html php_get.php创建两个文件. php_get.html文件的代码如下: <!doctype html> <html> <head> <title>超级全局变量$_GET来接收提交的数据,然后返回信息</title> <meta http-equiv="contnet-type" content="text/htm" charset=&

  • Struts2中接收表单数据的三种驱动方式

    1.属性驱动 前台表单中字段的name和后台action中的属性字段的名称必须保持一致: 2.域驱动 前台表单中字段的name应该为:objectName.attribute的形式; 后台action中以object为单位进行数据的接收,前台页面的取值方式为: 3.模型驱动 前台表单中字段的name应该为:attribute的形式; 后台action实行ModelDriven接口,并重写getModel方法:前台页面的取值方式为: ${attribute}; 以上所述是小编给大家介绍的Strut

  • jQuery使用serialize()表单序列化时出现中文乱码问题的解决办法

    序列化中文时之所以乱码是因为.serialize()调用了encodeURLComponent方法将数据编码了 解决方法就是进行解码 原因:.serialize()自动调用了encodeURIComponent方法将数据编码了 解决方法:调用decodeURIComponent(XXX,true);将数据解码 例如: var params = jQuery("#formId").serialize(); // http request parameters. params = deco

  • Springboot接收 Form 表单数据的示例详解

    目录 一.接收 Form 表单数据 1,基本的接收方法 2,参数没有传递的情况 3,使用 map 来接收参数 4,接收一个数组 5,使用对象来接收参数 6,使用对象接收时指定参数前缀 二.接收字符串文本数据 三.接收 JSON 数据 1,使用 Map 来接收数据 2,使用 Bean 对象来接收数据 一.接收 Form 表单数据 1,基本的接收方法 (1)下面样例Controller接收form-data格式的POST数据: import org.springframework.web.bind.

  • PHP Post获取不到非表单数据的问题解决办法

    问题描述 在使用vue-axios向后端post数据时,PHP端获取不到post的数据. 问题解决 修改php.ini配置 找到php.ini配置文件,查找enable_post_data_reading变量,修改为打开状态,注释掉句前分好 ; Whether PHP will read the POST data. ; This option is enabled by default. ; Most likely, you won't want to disable this option

  • Javaweb中Request获取表单数据的四种方法详解

    目录 表单代码 request.getParamter(String name);通过name获取值 request.getParamterValues(String name);通过name获取value值(一般用于复选框获取值) 代码片段 request.getParameterNames();直接获取表单所有对象的name值,返回值是枚举集合 request.getParameterMap();直接获取表单所有对象的name值以及数据 表单代码 <!DOCTYPE html> <h

随机推荐