java项目实践-请求转发以及重定向-day18

1. 中文乱码问题

创建一个工程secondweb

  1. 添加jar包依赖
  2. new servlet
  3. web.xml添加servlet
  4. 构建配置修改
<?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处理请求的逻辑

  1. 设置request的编码格式
  2. 设置response的编码格式
  3. 获取请求参数
  4. 逻辑处理
  5. 返回响应

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");
        }

4 总结

posted @ 2023-10-17 00:28  jack-chen666  阅读(45)  评论(0编辑  收藏  举报