中文乱码,求原因?此外参数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>
运行结果如下(乱码)
1回答
同学你好,1、关于乱码,建议在过滤器中对请求和响应都设置字符集编码utf-8。因为同学在没有对响应设置编码集。所以会出现乱码,具体如下:
2、关于bookName的参数的获取,建议同学检查一下提交的参数名是否为bookName,如果不是这里的问题,建议同学将jsp,以及编写的其他代码都粘贴一下哦~建议在回答中贴出代码,而不要贴出代码截图,不便于我们复制运行,定位问题,贴出代码可以在"我要回答"中。
如果我的回答解决了你的疑惑,请采纳!祝学习愉快!
相似问题