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. ...
随机推荐
- GSM/WCDMA/LTE/NR网元架构
1.GSM系统网元架构: 一套完整的蜂窝移动通信系统主要是由交换网络子系统(NSS).无线基站子系统(BSS).移动台(MS)及操作维护子系统(OMS)四大子系统设备组成. NSS 包括: MSC: ...
- 【Python】【OpenCV】视频帧和摄像头帧操作 and 窗口显示
一.读取写入视频文件 1 import cv2 2 3 # 创建一个视屏捕获对象 4 videoCapture = cv2.VideoCapture('AVI.avi') 5 6 # 获取视频的属性值 ...
- 支付宝 v3 验签如何实现
上次给大家介绍了 支付宝 v3 自签名如何实现,这次顺便再把验签也写一下. 为什么要验签 说起为什么要验签,如果要详细一点解释的话,可以写很多很多...... 我们就简单一点来解释:验签可以证明接收到 ...
- mybatis测试类的书写步骤
mybatis测试类的书写步骤 private SqlSession session; @Test //* 1.根据UserMapper接口的Class对象获取Mapper接口类型的对象 //* 2. ...
- 神经网络优化篇:详解梯度检验(Gradient checking)
梯度检验 梯度检验帮节省了很多时间,也多次帮发现backprop实施过程中的bug,接下来,看看如何利用它来调试或检验backprop的实施是否正确. 假设的网络中含有下列参数,\(W^{[1]}\) ...
- Win10笔记本开启热点让手机上网
Win10开启热点让手机上网,笔记本电脑开启热点,笔记本电脑开启WiFi,手机连接笔记本电脑热点上网. 1.前提条件:笔记本电脑网线联网,笔记本电脑支持热点 2.胆子要大,不怕公司网管统计发现你的电脑 ...
- JAVAEE基础知识
JAVAEE基础知识 2018年3月,开源组织Eclipse基金会宣布,JavaEE(Enterprise Edition)被更名为JakartaEE,也就是9版本后改名Jakarta EE,也就是J ...
- HTML&CSS基本知识
HTML&CSS基本知识 一.HTML基本介绍 W3C标准(成立于1994年,web技术领域最权威和具影响力的国际中立性技术标准机构) world Wide web Consortium(万维 ...
- 亿级日活业务稳如磐石,华为云CodeArts PerfTest发布
摘要:近日,华为云性能测试服务CodeArts PerfTest全新上线,提供低门槛.低成本的一站式云化性能测试解决方案. 本文分享自华为云社区<亿级日活业务稳如磐石,华为云CodeArts P ...
- 教你用Java7的Fork/Join框架开发高并发程序
摘要:Fork/Join框架位于J.U.C(java.util.concurrent)中,是Java7中提供的用于执行并行任务的框架,其可以将大任务分割成若干个小任务,最终汇总每个小任务的结果后得到最 ...