java项目实践-请求转发以及重定向-day18
1. 中文乱码问题
创建一个工程secondweb
- 添加jar包依赖
- new servlet
- web.xml添加servlet
- 构建配置修改
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<servlet>
<servlet-name>CharsetServlet</servlet-name>
<servlet-class>com.msb.CharsetServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>CharsetServlet</servlet-name>
<url-pattern>/charset</url-pattern>
</servlet-mapping>
</web-app>
package com.msb;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* @Auther: jack.chen
* @Date: 2023/10/16 - 10 - 16 - 23:31
* @Description: ${PACKAGE_NAME}
* @version: 1.0
*/
public class CharsetServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String name = request.getParameter("name");
System.out.println(name);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
String name = request.getParameter("name");
System.out.println(name);
response.getWriter().write("hello");
}
}
修改 index.jsp 用于发起post请求
<%--
Created by IntelliJ IDEA.
User: chenw
Date: 2023/10/16
Time: 23:28
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>$Title$</title>
</head>
<body>
<form action="charset" method="post">
<input type="text" name="name" value="">
<input type="submit" value="login">
</form>
</body>
</html>
servlet的post方法增加如下逻辑
System.out.println("------post-----------------");
String name = request.getParameter("name");
System.out.println(name);
response.getWriter().write("post");
后台出现乱码
前台出现乱码:
response编码格式改成gbk就ok
servlet处理请求的逻辑
- 设置request的编码格式
- 设置response的编码格式
- 获取请求参数
- 逻辑处理
- 返回响应
2. 请求的转发servlet
使用上次的 登录项目
如何实现登录失败 则返回继续登录的页面 并给出提示
//登录失败则再次回到登录 页面/page 注意这里的请求方式还是POST
request.getRequestDispatcher("page").forward(request, response);
this.doGet(request, response); // 修改这里 post方法也转 get方法处理
如何实现给前端提示
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("get method !!!!");
response.setContentType("text/html");
// 获取 LoginServlet设置的属性
String msg = (String)request.getAttribute("msg")==null?"":(String)request.getAttribute("msg");
PrintWriter writer = response.getWriter();
writer.write("<html>");
writer.write("<header>");
writer.write("</header>");
writer.write("<body>");
writer.write("<font color='red' size='20pix'>"+msg+"</font>");
// 将获取的属性 用 红色 字体返回前端
writer.write("<form action='/user/login', method='post'>");
writer.write("username:<input type='login' name='name' value=''></br>");
writer.write("password:<input type='login' name='pwd' value=''></br>");
writer.write("<input type='submit' value='login'>");
writer.write("</form>");
writer.write("</body>");
writer.write("</html>");
}
}
记得设置 request response编码集
package com.msb.control;
import com.msb.entity.User;
import com.msb.service.UserService;
import com.msb.service.impl.UserServiceImpl;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.sql.SQLException;
/**
* @Auther: jack.chen
* @Date: 2023/10/15 - 10 - 15 - 20:29
* @Description: ${PACKAGE_NAME}
* @version: 1.0
*/
public class LoginServlet extends HttpServlet {
UserService userService = new UserServiceImpl();
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("gbk");
System.out.println("post method !");
String name = request.getParameter("name");
String pwd= request.getParameter("pwd");
User user = new User(name, pwd);
User u = null;
try {
u = userService.checkUser(user);
} catch (ClassNotFoundException | SQLException e) {
e.printStackTrace();
}
if (u!=null){
response.getWriter().write("welcome:" + u.getName());
}else{
System.out.println("登录失败");
//登录失败则再次回到登录 页面/page 注意这里的请求方式还是POST
request.setAttribute("msg", "用户名或者密码错误");
request.getRequestDispatcher("page").forward(request, response);
return;
}
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
}
搞定
3. 登录后的重定向
package com.msb.control;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
/**
* @Auther: jack.chen
* @Date: 2023/10/17 - 10 - 17 - 0:21
* @Description: ${PACKAGE_NAME}
* @version: 1.0
*/
public class HelloServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doGet(request, response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("gbk");
PrintWriter writer = response.getWriter();
writer.write("<html>");
writer.write("<header>");
writer.write("</header>");
writer.write("<body>");
writer.write("<h1>欢迎登录<h1>");
writer.write("</body>");
writer.write("</html>");
}
}
LoginServlet
登录成功的地方改下
if (u!=null){
// response.getWriter().write("welcome:" + u.getName());
response.sendRedirect("hello");
}