当前位置: 首页 > news >正文

java web 通过 servlet 给前端设置编码格式

项目结构


├── src\
│   └── com\
│       └── zhang\
│           ├── filter\
│           │   ├── EncodingFilter.java
│           │   └── LoginFilter.java
│           └── servlet\
│               └── LoginServlet.java
└── web\├── WEB-INF\│   ├── lib\│   └── web.xml├── index.jsp└── login.jsp
  • 请求过滤 :通过LoginFilter实现登录状态验证
  • 字符编码处理 :EncodingFilter统一请求响应编码
  • 登录流程 :LoginServlet 演示登录表单提交和验证逻辑

后端过滤器

package com.zhang.filter;import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;//@WebFilter(filterName = "EncodingFilter")
public class EncodingFilter implements Filter {public void init(FilterConfig config) throws ServletException {System.out.println("EncodingFilter编码过滤器初始化");}public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {System.out.println("编码过滤器的逻辑处理");//设置编码方式req.setCharacterEncoding("utf-8");resp.setContentType("text/html;charset=UTF-8");chain.doFilter(req, resp);System.out.println("编码过滤器执行完成");}public void destroy() {System.out.println("编码过滤器被销毁");}}package com.zhang.filter;import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;//@WebFilter(filterName = "LoginFilter")
public class LoginFilter implements Filter {public void init(FilterConfig config) throws ServletException {System.out.println("登陆过滤器初始化");}public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {System.out.println("登陆过滤器处理逻辑");HttpSession session = ((HttpServletRequest) req).getSession();if (session.getAttribute("user")==null){((HttpServletResponse)resp).sendRedirect("login.jsp");}else{chain.doFilter(req, resp);}System.out.println("登陆过滤器处理逻辑完成");}public void destroy() {System.out.println("登陆过滤器销毁");}}package com.zhang.servlet;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;//@WebServlet(name = "LoginServlet")
public class LoginServlet extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {System.out.println("loginServlet的处理过程");response.getWriter().write("登陆成功");}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request,response);}
}

web配置文件

<?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"><!-- 设置编码方式过滤器  --><filter><filter-name>encoding</filter-name><filter-class>com.zhang.filter.EncodingFilter</filter-class></filter><filter-mapping><filter-name>encoding</filter-name><url-pattern>/*</url-pattern></filter-mapping><!-- 登陆过滤器   --><filter><filter-name>login</filter-name><filter-class>com.zhang.filter.LoginFilter</filter-class></filter><filter-mapping><filter-name>login</filter-name><url-pattern>*.do</url-pattern></filter-mapping><servlet><servlet-name>LoginServlet</servlet-name><servlet-class>com.zhang.servlet.LoginServlet</servlet-class></servlet><servlet-mapping><servlet-name>LoginServlet</servlet-name><url-pattern>/login.do</url-pattern></servlet-mapping>
</web-app>

前端页面

用到的jar
jsp-api.jar
servlet-api.jar

访问
http://localhost/login.jsp
http://localhost/login.do

http://www.dtcms.com/a/307973.html

相关文章:

  • 2025年物联网新趋势:格行随身WiFi的模块化架构与低延迟优化
  • AI Agent 的 10 种应用场景:物联网、RAG 与灾难响应
  • 【前端知识】JS单线程模型深入解析
  • 第 10 章 文件和异常
  • 机器人学和自动化领域中的路径规划方法
  • 在幸狐RV1106板子上用gcc14.2本地编译安装samba-4.22.3服务器,并且支持XP系统访问共享文件夹
  • 单调栈:739. 每日温度,496. 下一个更大的元素
  • 【ELasticsearch】集群故障模拟方案(二):磁盘空间满、重选主节点
  • C++ 入门基础(2)
  • Docker compose和Docker-compose的区别
  • 智慧交通中目标检测 mAP↑28%:陌讯多模态融合算法实战解析
  • 【NLP舆情分析】基于python微博舆情分析可视化系统(flask+pandas+echarts) 视频教程 - 微博评论数据可视化分析-点赞区间折线图实现
  • 从“健忘”到“懂我”:构建新一代AI记忆系统
  • 开发指南126-参数管理
  • 【C语言学习】scanf函数
  • TCP 连接管理 之 三次握手详解
  • 在Trae中使用MoonBit月兔1 创建项目
  • 力扣-102. 二叉树的层序遍历
  • 【BUG】nvm无法安装低版本Node.js:The system cannot find the file specified解决方案
  • 关于npm前端项目编译时栈溢出 Maximum call stack size exceeded的处理方案
  • 去重、top_n()、pull()、格式化
  • LCM中间件入门(1):工作原理核心概念及Ubuntu环境下的C++实践
  • 如何在NPM上发布自己的React组件(包)
  • 基于岗位需求的康养休闲旅游服务实训室建设方案
  • 达梦(DM8)常用管理SQL命令(3)
  • JavaScript内存管理完全指南:从入门到精通(通俗版+硬核版)
  • python后端之DRF框架(下篇)
  • Linux 服务器性能优化:性能监控,系统性能调优,进程优先级,内核升级全解析
  • 常见的中间件漏洞(tomcat,weblogic,jboss,apache)
  • 制造业企业如何保障文件外发图纸数据安全的?