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 总结

java项目实践-请求转发以及重定向-day18的更多相关文章

  1. JSP中的请求转发与重定向

    在说请求转发和重定向之前,得了解下JSP九大内置对象中的response和request response:将服务器端数据发送到客户端,可通过在客户端浏览器中显示,用户浏览页面的重定向以及在客户端创建 ...

  2. spring mvc 请求转发和重定向(转)

    spring mvc controller间跳转 重定向 传参 url:http://zghbwjl.blog.163.com/blog/static/12033667220137795252845/ ...

  3. spring mvc 请求转发和重定向

    spring mvc controller间跳转 重定向 传参 url:http://zghbwjl.blog.163.com/blog/static/12033667220137795252845/ ...

  4. Spring MVC 3.0 请求转发和重定向

    首先看一下如何获得request对象.session对象: 普通的Controller类,示例代码如下: @Controller @RequestMapping(value = "user& ...

  5. ServletRequest HttpServletRequest 请求方法 获取请求参数 请求转发 请求包含 请求转发与重定向区别 获取请求头字段

      ServletRequest 基本概念 JavaWeb中的 "Request"对象  实际为   HttpServletRequest  或者  ServletRequest, ...

  6. 04_web基础(六)之请求转发与重定向

    1.交互方式 Web组件之间跳转: 从AServlet 跳转到 BServlet. 三种类型: 1:请求转发(forward) 2:URL重定向(redirect) 3:请求包含(include) 3 ...

  7. day32 6 请求转发与重定向的区别、session会话对象 & cookie & 8 应用程序上下文对象ServletContext & 5 请求转发与jsp页面内置对象

    1 请求转发与重定向的区别 2 session与cookie的区别 3 过滤器与监听器的区别 4 web-inf目录 web-inf目录是安全目录,无法从客户端访问,只能通过(服务端的)servlet ...

  8. HttpServletRequest 接口、HttpServletResponse 接口、请求转发与重定向

    上篇文章我们讲了servlet的基本原理,这章将讲一下剩余的部分. HttpServletRequest 接口 该接口是 ServletRequest 接口的子接口,封装了 HTTP 请求的相关信息, ...

  9. web之请求转发与重定向

    请求转发: 重定向:

  10. Java 请求转发和重定向的区别以及JavaWeb三大作用域

    三大作用域以及转发和重定向 学习总结 1. 转发和重定向 转发 重定向 转发和重定向的区别: 什么时候用转发什么时候用重定向 三大作用域 作用域类型 作用域方法 如何选择作用域 总结 学习总结 1. ...

随机推荐

  1. MybatisPlus实现高效的多对多查询

    1.前置 事先声明一下代码中蕴含了大量的Stream和Lambda表达式操作,还不清楚的小伙伴可以去参考一下Java8新特性Stream流,而却我是用的是MybatisPlus这方面不清楚的也可以参考 ...

  2. 【流式传输】使用Spring Boot实现ChatGpt流式传输

    引言 在ChatGpt火了这么久,他的那种单字单字返回的格式可能让很多朋友感到好奇,在之前我用c#写了一个版本的,同时支持IAsyncEnumerable以及SSE,今天把之前写的Java版本的也发出 ...

  3. Selenium浏览器属性、提取数据

    浏览器属性 在使用selenium过程中,实例化driver对象后,driver对象有一些常用的属性和方法 driver.page_source 当前标签页浏览器渲染之后的网页源代码. driver. ...

  4. C++ Qt开发:TableView与TreeView组件联动

    Qt 是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍TableVi ...

  5. Bazel 如何生成 clangd/clang-tidy 所需的 compile_commands.json

    VSCode 中如何使用 clang-tidy 安装 clangd 插件 禁用 ms-cpp 插件(VSCode 会自动提示有冲突) 生成 clangd 所需的 compile_commands.js ...

  6. <Python全景系列-1> Hello World,1分钟配置好你的python环境

    <从此开始:1分钟配置好你的python环境> 欢迎来到我们的系列博客<Python360全景>!在这个系列中,我们将带领你从Python的基础知识开始,一步步深入到高级话题, ...

  7. Ambient Mesh:Istio 数据面新模式

    摘要:基于Istio对于Kubernetes生态的完美补充,随着Kubernetes的大规模普及,Istio 数据面新模式 -Ambient MeshIstio也实现了对用户心智以及市场的快速抢占. ...

  8. 干货时间:聊聊DevOps下的技术系列之契约测试

    摘要:本期和大家简单聊聊在服务交互场景下使用服务契约的重要性,以及契约管理的必要性,最后简单介绍了下契约测试. 1.服务交互带来的问题 在上一篇文章中,我们系统的列举了DevOps各个流程中常用的测试 ...

  9. 云小课 | 不了解EIP带宽计费规则?看这里!

    摘要:带宽要变更, 费用不会算?要问怎么办,小课带你看! 和小课一起来学习弹性公网IP(EIP)带宽的计费方式.使用场景及变更影响吧~ 在使用弹性公网IP(EIP)产品后,你是否遇到过以下几种场景: ...

  10. Java中观察者模式与委托,还在傻傻分不清

    摘要:本文通过对比Java中观察者模式与委托,希望能够让开发者分清二者的区别和联系. 本文分享自华为云社区<Java中观察者模式与委托的对比>,作者: 小小张自由--张有博 . 代码背景 ...