消息关闭
    暂无新消息!
新人第一次发帖,我在做一个合同管理项目,JSP中14-16行对表中的录入日期自动带入,最后提交表单到servlet处理,但是这个自动带入的日期到了后台就显示为?2017?-?07?-?20,这个是什么原因啊,求大神帮忙分析是哪里编码出了问题吗?
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML>
<html>
  <head>
<base href="<%=basePath%>">
<title>新增合同</title>
<meta name="viewport" content="initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no">
<script type="text/javascript" src="JS/laydate-v1.1/laydate/laydate.js"></script>
<script type="text/javascript">
window.onload=function indate(){
var myDate = new Date();
document.getElementById("indate").value=myDate.toLocaleDateString();//可以获取当前日期
}
function dosubmit(){
var th = document.form1;
th.action="<%= path%>/servlet/ProductAction?action_flag=add";
th.submit();
}
</script>
  </head>
  <body>
<div align="center">

<table width=70% style="margin:auto;">
<tr><td align="center" height=150 valign="bottom">合同信息添加</td></tr>
<tr>
<td>
<form id="form1" name="form1" action="" method="post" enctype="multipart/form-data">
<table border=1 style="margin:auto">
<tr >
<td>录入日期</td>
<td><input type="date" name="indate" onclick="laydate()" id="indate" /></td>
<td>签订日期</td>
<td><input type="date" name="signdate" onclick="laydate()" id="signdate"/></td>
</tr>
<tr >
<td>合同期限</td>
<td><input type="date" onclick="laydate()" name="deadline" id="deadline"></td>
<td>合同名称</td>
<td><input type="text" name="contractname" id="contractname"/></td>
</tr>
<tr>
          <td colspan="4">上传文件1:<input type="file" name="file1"><br/></td>
          </tr>
          <tr>
         <td colspan="4">上传文件2:<input type="file" name="file2"><br/></td>
        
</tr>
</table> 
</form>   
</td>
</tr>
<tr>
<td colspan="4" align="center">
<button type="button" onclick="javascript:dosubmit();">确定</button>
<button type="button" onclick="javascript:location.href='main.jsp'">返回</button>
</td>
</tr>
</table>
</div>
  </body>

以下代码中24行输出???2017???-???07???-???20 第25行输出?2017?-?07?-?20
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

response.setContentType("text/html;charset=utf-8");
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
String action_flag = request.getParameter("action_flag");
if (action_flag.equals("add")) {
addProduct(request,response);
}}
private void addProduct(HttpServletRequest request, HttpServletResponse response) 
throws ServletException, IOException{
            //1、创建一个DiskFileItemFactory工厂
            DiskFileItemFactory factory = new DiskFileItemFactory();
            //2、创建一个文件上传解析器
            ServletFileUpload upload = new ServletFileUpload(factory);
            List<FileItem> list = upload.parseRequest(request);
            for(FileItem fileItem : list){
if (fileItem.isFormField()) {//是文本字段
String fileItemName = fileItem.getFieldName(); //获取 <input>控件的 名称
String fileItemValue = fileItem.getString("utf-8");//获取<input>控件的值
for(FileItem fileItem : list){
if (fileItemName.equals("indate")) {
System.out.println(fileItem.getString());
System.out.println("indate"+fileItemValue);
params.add(fileItemValue);//参数传入 indate
}else if (fileItemName.equals("signdate")) {
params.add(fileItemValue);////参数传入 signdate

7个回答

︿ 2
楼主,是tomcat服务器吗,是的话,改下tomcat的配置试试
    <Connector port="8080" protocol="HTTP/1.1" 
               connectionTimeout="20000" 
               redirectPort="8443" useBodyEncodingForURI="true" URIEncoding="UTF-8"/>
︿ 1
加过滤器filter,都设置成utf-8,自己不会写可以百度下,网上一大堆
︿ 0
将接收到的日期转码一下
String s = new String("s".getBytes(),"utf-8");
︿ 0
目前尝试包括
1.在的哦post中加入 response.setContentType("text/html;charset=UTF-8");
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
2、JSP页面加入contentType="text/html; charset=UTF-8"
3、配置过滤器httpServletRequest.setCharacterEncoding(charEncode);
httpServletResponse.setCharacterEncoding(charEncode);
httpServletResponse.setContentType("text/html;charset="+charEncode);
                filterChain.doFilter(httpServletRequest, httpServletResponse);
public void init(FilterConfig filterConfig) throws ServletException {
this.charEncode = filterConfig.getInitParameter("charEncode"); 
  <filter>
   <filter-name>MyFilter</filter-name>
   <filter-class>com.filter.MyFilter</filter-class>
   <init-param>
   <param-name>charEncode</param-name>
   <param-value>utf-8</param-value>
   </init-param>
  </filter>
  <filter-mapping>
   <filter-name>MyFilter</filter-name>
   <url-pattern>/*</url-pattern>   
  </filter-mapping>
4、尝试 用正则替换掉?String fileItemValuesub=fileItemValue.replaceAll("//?", "");  
以上方法都试了,不行啊,难受想哭