Idea模板创建Servlet
第一步
第二步
第三步
此处的Servlet模板也可以定义
如下图所示的地方
在里面把这行代码加上
this.doGet(request,response);
POST请求参数乱码解决
Post底层是使用一个字符输入流来传参的,这里只需要设置这个字符输入流的编码为“utf-8”即可,如下
GET请求参数乱码解决
此处直接上方法
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1. 解决乱码:POST,getReader()
//request.setCharacterEncoding("UTF-8");//设置字符输入流的编码
//2. 获取username
String username = request.getParameter("username");
System.out.println("解决乱码前:"+username);
//3. GET,获取参数的方式:getQueryString
// 乱码原因:tomcat进行URL解码,默认的字符集ISO-8859-1
/* //3.1 先对乱码数据进行编码:转为字节数组
byte[] bytes = username.getBytes(StandardCharsets.ISO_8859_1);
//3.2 字节数组解码
username = new String(bytes, StandardCharsets.UTF_8);*/
username = new String(username.getBytes(StandardCharsets.ISO_8859_1),StandardCharsets.UTF_8);
System.out.println("解决乱码后:"+username);
}
请求转发
定义:一种在服务器内部资源跳转的方式
像下面一样一个请求都资源A解决了一部分后又到了资源B解决完了才返回响应数据给浏览器
实现方式:
将参数传递到下一个资源
请求转发资源之间共享数据:使用Request对象
这里共享数据的实现是通过Request对象的传递来完成的,随着转发携带到了下一个资源
案例实现
先准备两个Servlet
servlet5
@WebServlet("/req5")
public class RequestDemo5 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("demo5...");
System.out.println(request);
//存储数据
request.setAttribute("msg","hello");
//请求转发
request.getRequestDispatcher("/req6").forward(request,response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doGet(request, response);
}
}
servlet6
@WebServlet("/req6")
public class RequestDemo6 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("demo6...");
System.out.println(request);
//获取数据
Object msg = request.getAttribute("msg");
System.out.println(msg);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doGet(request, response);
}
}
请求转发特点