中文乱码,求原因?此外参数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,以及编写的其他代码都粘贴一下哦~建议在回答中贴出代码,而不要贴出代码截图,不便于我们复制运行,定位问题,贴出代码可以在"我要回答"中。
如果我的回答解决了你的疑惑,请采纳!祝学习愉快!
相似问题