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. 零基础 从 yolo8 入门计算机视觉超简单:物体识别、图像分类、轨迹追踪、姿势识别

    目录 安装 Ultralytics 训练 模型验证 预测 & 识别 导出 追踪 图像分割提取 分类 姿势识别 轨迹生成 Ultralytics YOLOv8 是备受好评的实时目标检测和图像分割 ...

  2. Cesium最简单的视效升级方案,无需修改代码即可实现

    Cesium依靠其开源免费的特点基本上完全垄断了GIS这一块,并且其中99%的用户都是使用的CesiumJS,然而,对于一些使用Cesium的项目来说,要想升级视效可能需要进行繁琐的代码修改,增加了开 ...

  3. Python——第二章:字符串操作——大小写转换

    字符串常规操作 字符串的操作一般不会对原字符串产生影响. 一般是返回一个新的字符串 字符串大小写转换 .capitalize() 是字符串方法之一,在 Python 中用于将所有字符串的第一个母转换为 ...

  4. 【K8S系列】快速初始化⼀个最⼩集群

    序言 走得最慢的人,只要不丧失目标,也比漫无目的地徘徊的人走得快. 文章标记颜色说明: 黄色:重要标题 红色:用来标记结论 绿色:用来标记一级重要 蓝色:用来标记二级重要 希望这篇文章能让你不仅有一定 ...

  5. 斯坦福 UE4 C++ ActionRoguelike游戏实例教程 10.5.作业五 为游戏添加一个积分系统,随机生成增益道具

    斯坦福课程 UE4 C++ ActionRoguelike游戏实例教程 0.绪论 概述 本篇文章将解决作业五提出的问题,使用PlayerState,在原本游戏的基础上引入积分系统,实现击杀敌人得分,拾 ...

  6. PyTorch项目源码学习(2)——Tensor代码结构初步学习

    PyTorch版本:1.10.0 Tensor Tensor是Pytorch项目较为重要的一部分,其中的主要功能如存储,运算由C++和CUDA实现,本文主要从前端开始探索学习Tensor的代码结构. ...

  7. 监控cpu高的进程shell

    #!/bin/bash while [ 1 ]do ps aux|awk '{if($3>10){print $3" => "$0}}' sleep 0.5sdone

  8. 构建万物互联,华为云IoT+鸿蒙重燃物体感知

    摘要:鸿蒙的出现,让硬件.软件行业面临着变革与重构的洪流,但激流勇进中,也潜藏着巨大机遇.物联网设备与鸿蒙结合成为必然趋势,本文将解读华为云IoT+鸿蒙如何强强联合,为物联网行业提供新的思路和方法. ...

  9. 华为云SparkRTC面向低时延、大通量传输业务的技术探索

    摘要:网络和移动设备高速发展的今天,人们开始思考如何用更短的时间下载更大的文件,追求更快的速度.当下在稳定的基础上有什么方法可以提升速度呢? 本文分享自华为云社区<华为云SparkRTC面向低时 ...

  10. allowedOrigins cannot contain the special value "*"

    Spring Boot的版本高于 2.4以后 ,原来的配置已经不适合目前的版本 将代码中的allowedOrigins改为allowedOriginPatterns @Configuration pu ...