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


4 总结

java项目实践-请求转发以及重定向-day18的更多相关文章
- JSP中的请求转发与重定向
在说请求转发和重定向之前,得了解下JSP九大内置对象中的response和request response:将服务器端数据发送到客户端,可通过在客户端浏览器中显示,用户浏览页面的重定向以及在客户端创建 ...
- spring mvc 请求转发和重定向(转)
spring mvc controller间跳转 重定向 传参 url:http://zghbwjl.blog.163.com/blog/static/12033667220137795252845/ ...
- spring mvc 请求转发和重定向
spring mvc controller间跳转 重定向 传参 url:http://zghbwjl.blog.163.com/blog/static/12033667220137795252845/ ...
- Spring MVC 3.0 请求转发和重定向
首先看一下如何获得request对象.session对象: 普通的Controller类,示例代码如下: @Controller @RequestMapping(value = "user& ...
- ServletRequest HttpServletRequest 请求方法 获取请求参数 请求转发 请求包含 请求转发与重定向区别 获取请求头字段
ServletRequest 基本概念 JavaWeb中的 "Request"对象 实际为 HttpServletRequest 或者 ServletRequest, ...
- 04_web基础(六)之请求转发与重定向
1.交互方式 Web组件之间跳转: 从AServlet 跳转到 BServlet. 三种类型: 1:请求转发(forward) 2:URL重定向(redirect) 3:请求包含(include) 3 ...
- day32 6 请求转发与重定向的区别、session会话对象 & cookie & 8 应用程序上下文对象ServletContext & 5 请求转发与jsp页面内置对象
1 请求转发与重定向的区别 2 session与cookie的区别 3 过滤器与监听器的区别 4 web-inf目录 web-inf目录是安全目录,无法从客户端访问,只能通过(服务端的)servlet ...
- HttpServletRequest 接口、HttpServletResponse 接口、请求转发与重定向
上篇文章我们讲了servlet的基本原理,这章将讲一下剩余的部分. HttpServletRequest 接口 该接口是 ServletRequest 接口的子接口,封装了 HTTP 请求的相关信息, ...
- web之请求转发与重定向
请求转发: 重定向:
- Java 请求转发和重定向的区别以及JavaWeb三大作用域
三大作用域以及转发和重定向 学习总结 1. 转发和重定向 转发 重定向 转发和重定向的区别: 什么时候用转发什么时候用重定向 三大作用域 作用域类型 作用域方法 如何选择作用域 总结 学习总结 1. ...
随机推荐
- C++ Qt开发:ComboBox下拉组合框组件
Qt 是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍ComboBo ...
- 在Linux服务器上装jenkins(方式一:war包)
官网下载jenkins https://www.jenkins.io/zh/download/ 官网下载太慢,可以去清华镜像下载(百度搜索:清华镜像) 下载的文件是jenkins.war 把安装文件放 ...
- Swagger配置类
Swagger配置类 package com.guoba.servicebase.config; import com.google.common.base.Predicates; import or ...
- PersistenceException 持久性异常
首先查看他提供的错误信息 检查pom.xml文件,查看是否有: 确保文件夹是这种xml格式的 操作maven >>>>clean 和compile 进行清理和重新 ...
- ElasticSearch之Analyze index disk usage API
本API用于分析.统计指定index当前占用的存储空间. 考虑到本特性目前仍然处于预览状态,因此使用方法.参数等可能会发生变化,或者未来也许会被删除. 本API暂时不建议在生产系统中使用. 命令样例如 ...
- Python——CSS(层叠样式表,Cascading Style Sheets)、选择器(Selectors)
CSS(层叠样式表,Cascading Style Sheets)是一种用于描述文档样式和布局的样式表语言.它可以与HTML结合使用,用于控制网页的外观和格式.以下是CSS的主要特点和一些基本概念: ...
- redis的基本数据类型测试
依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spri ...
- 云小课|RDS for MySQL参数模板一键导入导出,参数配置轻松搞定
摘要:云数据库RDS for MySQL支持参数模板的导入和导出功能. 本文分享自华为云社区<[云小课][第56课]RDS for MySQL参数模板一键导入导出,参数配置轻松搞定>,作者 ...
- 人人都在聊的云原生数据库Serverless到底是什么?
摘要:华为云数据库营销专家Tony Chen和华为云数据库高级产品经理佳恩开展了一场关于云原生数据库与Serverless结合的直播对话. 云计算的迅猛发展推动了数据库的变革,云原生数据库成为当前数据 ...
- DTSE Tech Talk 第18期丨统计信息大揭秘,数仓SQL执行优化之密钥
摘要:华为云EI DTSE技术布道师王跃,针对统计信息对于查询优化器的重要性,GaussDB(DWS)最新版本的analyze当前能力,与开发者和伙伴朋友们展开交流互动,帮助开发者快速上手使用统计信息 ...