中文乱码,求原因?此外参数bookName用getParametr()为什么也获取不到?

来源:6-2 项目作业

棉花糖阿水

2019-10-09 20:13:51

package com.imooc.servlet;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

import com.imooc.modle.Book;
import com.imooc.service.impl.ServiceImpl;
import com.imooc.utils.FilleName;

/**
 * Servlet implementation class AddBook
 */
@WebServlet("/dept/add.do")
public class AddBook extends HttpServlet {
	private static final long serialVersionUID = 1L;
	
	private ServiceImpl serviceImpl;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public AddBook() {
        super();
        serviceImpl = new ServiceImpl();
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		/**
		 * 获取数据
		 */
		String bookName = request.getParameter("bookName");
		System.out.println(bookName);
		//创建磁盘文件项工厂
		DiskFileItemFactory diskFileItemFactory = new DiskFileItemFactory();
		//创建核心解析类
		ServletFileUpload servletFileUpload = new ServletFileUpload(diskFileItemFactory);
		//创建一个map集合接收数据
		Map<String, String> map = new HashMap<String, String>();
		//解析请求,将请求分为几部分
		try {
			@SuppressWarnings("unchecked")
			List<FileItem> fileItems = servletFileUpload.parseRequest(request);
			for (FileItem fileItem : fileItems) {
				if (fileItem.isFormField()) {
					String name = fileItem.getFieldName();
					String value = fileItem.getString();
					map.put(name, value);
					System.out.println("name= "+name + ",value= "+value);
				}else {
					//获得上传文件的文件名
					String fileName = fileItem.getName();
					//获取唯一文件名
					String uuidFileName = FilleName.getUniqueFileName(fileName);
					//获得文件的输入流
					InputStream iStream = fileItem.getInputStream();
					//获取文件的输出路径
					String path = getServletContext().getRealPath("/cover/") + uuidFileName;
					//重映射图书封面的存储路径 src= 工程名 + /cover/ + 文件名
					String  imgPath = request.getContextPath() + "/cover/" + uuidFileName;
					map.put("imgPath", imgPath);
					//将输入流和输出流对接
					OutputStream out = new FileOutputStream(path);
					int len = 0;
					byte[] b = new byte[1024];
					while((len = iStream.read(b)) != -1) {
						out.write(b, 0, len);
					}
					//关闭流
					iStream.close();
					out.close();
				}
			}
		} catch (FileUploadException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		/**
		 * 封装数据
		 */
		Book book = new Book();
		book.setBookId(map.get("bookId"));
		book.setBookName(map.get("bookName"));
		book.setCategory(map.get("categoryName"));
		book.setImgPath(map.get("imgPath"));
		book.setPrice(Float.valueOf(map.get("bookPrice")));
		book.setRemark(map.get("remarks"));
		//处理数据
		serviceImpl.addBook(book);
		List<Book> books = ServiceImpl.getBooks();
		request.getSession().setAttribute("Books", books);
		//显示界面
		response.setContentType("html/text;charset=utf-8");
		response.sendRedirect(request.getContextPath() + "/pages/admin/bookList.jsp");
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}

字符编码过滤器(对所有页面都起作用)

package com.imooc.filter;

import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;


/**
 * Servlet Filter implementation class EncodeFilter
 */
public class EncodeFilter implements Filter {

    /**
     * Default constructor. 
     */
    public EncodeFilter() {
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see Filter#destroy()
	 */
	public void destroy() {
		// TODO Auto-generated method stub
	}

	/**
	 * @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)
	 */
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
		request.setCharacterEncoding("utf-8");
		chain.doFilter(request, response);
	}

	/**
	 * @see Filter#init(FilterConfig)
	 */
	public void init(FilterConfig fConfig) throws ServletException {
		// TODO Auto-generated method stub
	}

}
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
  <display-name>imooclibrary</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>
  <filter>
  	<filter-name>loginCheckFilter</filter-name>
  	<filter-class>com.imooc.filter.LoginFilte</filter-class>
  </filter>
  <filter-mapping>
  	<filter-name>loginCheckFilter</filter-name>
  	<url-pattern>/server.jsp</url-pattern>
  </filter-mapping>
  <filter>
  	<filter-name>encodeFilter</filter-name>
  	<filter-class>com.imooc.filter.EncodeFilter</filter-class>
  </filter>
  <filter-mapping>
  	<filter-name>encodeFilter</filter-name>
  	<url-pattern>/*</url-pattern>
  </filter-mapping>
</web-app>

运行结果如下(乱码)

http://img.mukewang.com/climg/5d9dce9e09f2537304500171.jpg

写回答

1回答

好帮手慕酷酷

2019-10-10

 同学你好,1、关于乱码,建议在过滤器中对请求和响应都设置字符集编码utf-8。因为同学在没有对响应设置编码集。所以会出现乱码,具体如下:

http://img.mukewang.com/climg/5d9eade809dca5dd07230168.jpg

2、关于bookName的参数的获取,建议同学检查一下提交的参数名是否为bookName,如果不是这里的问题,建议同学将jsp,以及编写的其他代码都粘贴一下哦~建议在回答中贴出代码,而不要贴出代码截图,不便于我们复制运行,定位问题,贴出代码可以在"我要回答"中。

如果我的回答解决了你的疑惑,请采纳!祝学习愉快! 

0

0 学习 · 9666 问题

查看课程