【Java Web】JSP实现数据传递和保存(中)中文乱码 转发与重定向

文章目录

    • 中文乱码
    • 转发与重定向
      • 转发
      • 重定向
      • 区别
    • 升级示例1

中文乱码

JSP 中默认使用的字符编码方式:iso-8859-1,不支持中文。常见的支持中文的编码方式及其收录的字符:

  • gb2312:常用简体汉字
  • gbk:简体和繁体汉字
  • utf-8:所有国家需要的字符

在 Java Web 应用程序中处理字符编码问题的几种方法

设置请求和响应的编码方式

// 请求乱码:指定从客户端发送到服务器的数据(如表单提交)的字符编码
request.setCharacterEncoding("utf-8");
// 响应乱码:设置响应给客户端的 HTTP 内容的字符编码
response.setCharacterEncoding("utf-8");
<% // 在JSP页面顶部使用的指令,告诉浏览器以 UTF-8 格式解析页面%>
<%@ page language="java" contentType="text/html; charset=utf-8"%>

GET 请求出现乱码

当使用GET方法传递参数时,由于URL中的参数通常是用ISO-8859-1编码传输的,如果直接读取可能会遇到中文乱码问题。

治标的方法:new String(变量名.getBytes("iso-8859-1"), "utf-8" )

  • 将字符串先按照 ISO-8859-1 解码为字节数组,然后按照 UTF-8 重新编码成字符串。

治本的方法:通过配置Tomcat的server.xml文件,在<Connector>标签内添加或修改属性

  • URIEncoding="UTF-8"useBodyEncodingForURI="true" 正确地处理包含非英文字符的URL参数。

tomcat\conf\server.xml文件中找到相应的<Connector>元素,并确保它包含如下配置

<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1"redirectPort="8443" URIEncoding="UTF-8" useBodyEncodingForURI="true"/>

一般只设置 URIEncoding=“UTF-8” 就ok

转发与重定向

转发(Forward)和重定向(Redirect)是两种常见的请求处理方式,它们都可以用来将用户从一个资源引导到另一个资源,但实现机制和应用场景有所不同。

转发

在服务器端进行的操作,当一个Servlet或JSP页面接收到请求后,它可以通过RequestDispatcher对象将请求转发给另一个资源(如另一个Servlet、JSP页面等),而客户端对此并不知情。转发过程中URL不会发生变化,对于用户来说就像是访问了一个单一的资源。

特点

  • 请求仍然在同一个HTTP请求内完成。
  • 服务器端控制整个过程,对客户端透明。
  • 可以共享请求作用域中的数据(通过HttpServletRequestsetAttribute方法设置的数据)。
  • 适合于内部资源间的跳转,比如从一个Servlet跳转到一个JSP页面显示结果。

常见方式

在Servlet中使用RequestDispatcherforward方法

// 获取RequestDispatcher
RequestDispatcher dispatcher = request.getRequestDispatcher("/WEB-INF/jsp/targetPage.jsp");
// 转发请求
dispatcher.forward(request, response);

在JSP页面中使用<jsp:forward>动作标签

<jsp:forward page="/WEB-INF/jsp/targetPage.jsp">...
</jsp:forward>

转发的工作方式

在这里插入图片描述

重定向

重定向是一个两步的过程,首先服务器发送一个特殊的响应给浏览器,告诉浏览器去请求一个新的URL。浏览器会用这个新的URL发起一个新的请求。这意味着重定向会导致浏览器地址栏中的URL发生变化。

特点

  • 涉及两次独立的HTTP请求。
  • 客户端可见,因为浏览器地址栏中的URL会发生变化。
  • 不可以共享原始请求中的数据;如果需要传递信息,通常使用查询字符串或者Session。
  • 适用于跨域跳转、外部网站链接以及某些安全性考虑的情况,例如登录成功后的跳转。
response.sendRedirect("http://example.com/anotherPage.html");

重定向的工作方式

在这里插入图片描述

区别

转发是服务器行为,重定向是客户端行为。

// 转发
request.getRequestDispatcher("url").forward(request, response);
// 重定向
response.sendRedirect("url");
  • 转发可以携带参数,重定向不可以
  • 转发 url 不会发生变化,重定向会
  • 转发不会重新发送请求,重定向会
  • 转发只能跳转当前项目路径,重定向可以跳转任意 url

升级示例1

HTML 表单内容不变化

<form action="dologin.jsp" method="post">账号:<input type="text" name="uname"/><br/>密码:<input type="text" name="upwd"/><br/><input type="submit"/>
</form>

不再存储登录信息,改跳转方式转发为重定向,去到【doindex.jsp】

<%// 解决 post 中文乱码问题(必须放在接收参数之前)request.setCharacterEncoding("utf-8");// 接收参数String uname = request.getParameter("uname");String upwd = request.getParameter("upwd");// 调用 Java 方法 登录SmbmsUserDao smbmsUserDao = new SmbmsUserDaoImpl();SmbmsUser smbmsUser =  smbmsUserDao.login(uname,upwd);// 判断登录是否成功if (smbmsUser != null) {// setAttribute 存储登录信息// request.setAttribute("smbmsUserName",smbmsUser.getUserName());// 转发// request.getRequestDispatcher("index.jsp").forward(request,response);// 重定向response.sendRedirect("doindex.jsp");} else {// 登录失败则重定向回登录界面response.sendRedirect("login.jsp");}
%>

doindex.jsp 作为一个中间处理页面,主要负责调用业务逻辑(例如获取供应商列表信息)并将结果存储到请求作用域中,然后将请求转发给 index.jsp 进行视图展示。这种方式相比直接在 index.jsp 中执行业务逻辑,可以做到逻辑与视图分离,增强可读性和可维护性;提高复用性;增强安全性。

<%// 调用 Java 方法 获取供应商列表信息SmbmsProviderDao smbmsProviderDao = new SmbmsProviderDaoImpl();List<SmbmsProvider> providerList = smbmsProviderDao.findAll();// setAttribute 存储供应商信息request.setAttribute("providerList",providerList);// 转发request.getRequestDispatcher("index.jsp").forward(request,response);
%>

不再获取登录信息,处理业务逻辑的部分交由 doindex.jsp 实现。

<%// getAttribute 获取登录信息// String name =  request.getAttribute("smbmsUserName").toString();// getAttribute 获取供应商信息List<SmbmsProvider> smbmsProviderList = (List<SmbmsProvider>)request.getAttribute("providerList");
%>
<h1><%-- <%= name%> --%>欢迎您登录 供应商信管理系统!!!
</h1>
<table border="1"><tr><th>ID</th><th>proCode</th><th>proName</th><th>proDesc</th></tr><% for(SmbmsProvider smbmsProvider : smbmsProviderList){ %><tr><td><%= smbmsProvider.getId()%></td><td><%= smbmsProvider.getProCode()%></td><td><%= smbmsProvider.getProName()%></td><td><%= smbmsProvider.getProDesc()%></td></tr><% } %>
</table>
<%// session.getAttribute 获取登录信息SmbmsUser smbmsUser =  (SmbmsUser)session.getAttribute("smbmsUser");// getAttribute 获取供应商信息List<SmbmsProvider> smbmsProviderList =  (List<SmbmsProvider>)request.getAttribute("providerList");
%>
<h1><%=smbmsUser.getUserName()%>欢迎您登录 供应商信管理系统!!!
</h1>
<form action="logout.jsp" method="get"><input type="submit" value="安全退出"/>
</form>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/59705.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java多线程详解⑤(全程干货!!!)线程安全问题 || 锁 || synchronized

这里是Themberfue 在上一节的最后&#xff0c;我们讨论两个线程同时对一个变量累加所产生的现象 在这一节中&#xff0c;我们将更加详细地解释这个现象背后发生的原因以及该如何解决这样类似的现象 线程安全问题 public class Demo15 {private static int count 0;public …

React前端框架:现代网页开发的基石(附带构建简单任务管理应用案例代码)

&#x1f4dd;个人主页&#x1f339;&#xff1a;一ge科研小菜鸡-CSDN博客 &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; React 是由 Facebook 开发并开源的前端框架&#xff0c;用于构建用户界面。它通过虚拟DOM、高效的渲染机制和组件化的开发模式&am…

在Zetero中调用腾讯云API的输入密钥的问题

也是使用了Translate插件了&#xff0c;但是需要调用腾讯云翻译&#xff0c;一直没成功。 第一步就是&#xff0c;按照这上面方法做&#xff1a;百度、阿里、腾讯、有道各平台翻译API申请教程 之后就是&#xff1a;Zotero PDF translat翻译&#xff1a;申请腾讯翻译接口 主要是…

kelp protocol

道阻且长,行而不辍,未来可期 有很长一段时间我都在互联网到处拾金,but,东拼西凑的,总感觉不踏实,最近在老老实实的看官方文档 & 阅读白皮书 &看合约,挑拣一些重要的部分配上官方的证据,和过路公主or王子分享一下,愿我们早日追赶上公司里那些可望不可及大佬们。…

如何以开源加速AI企业落地,红帽带来新解法

CSDN 看到&#xff0c;生成式 AI 的火爆正在引发计算、开发、交互三大范式全面的升级和转换&#xff0c;全行业或将迎来一次全新的科技变革周期&#xff0c;可能比移动与云计算变革更加剧烈。不过 AI 经历了追求千亿模型效果和芯片、集群硬件的军备竞赛后&#xff0c;如何真正落…

vue的组件使用

1.安装element plus组件库 npm install element-plus --save 2. 3.在页面使用

人保财险(外包)面试分享

前言&#xff1a; 这是本月面的第三家公司&#xff0c;太难了兄弟们&#xff0c;外包都不好找了&#xff0c;临近年底&#xff0c;金九银十已经错过了&#xff0c;金三银四虽然存在&#xff0c;但按照这几年的行情&#xff0c;金九银十和金三银四其实已经是不复存在了&#xf…

Linux-c TCP服务模型

1、TCP模型&#xff0c;服务端与客户端的搭建时序图 2、TCP模型&#xff0c;在创建阶段和通信阶段&#xff0c;对套接字的理解 2.1、tcp连接阶段 2.2、tcp通信状态 一个服务端与多个客户端的通信状态 TCP与UDP的对比 &#xff08;下图是笔者理解所画&#xff0c;可能也许有错…

卡码网KamaCoder 127. 骑士的攻击

题目来源&#xff1a;127. 骑士的攻击 C题解&#xff08;来源A * 算法精讲 &#xff08;A star算法&#xff09; | 代码随想录&#xff09;&#xff1a;Astar Astar 是一种 广搜的改良版。 有的是 Astar是 dijkstra 的改良版。 其实只是场景不同而已 我们在搜索最短路的时候&…

浅谈语言模型推理框架 vLLM 0.6.0性能优化

在此前的大模型技术实践中&#xff0c;我们介绍了加速并行框架Accelerate、DeepSpeed及Megatron-LM。得益于这些框架的助力&#xff0c;大模型的分布式训练得以化繁为简。 然而&#xff0c;企业又该如何将训练完成的模型实际应用部署&#xff0c;持续优化服务吞吐性能&#xf…

闯关leetcode——3222. Find the Winning Player in Coin Game

大纲 题目地址内容 解题代码地址 题目 地址 https://leetcode.com/problems/find-the-winning-player-in-coin-game/description/ 内容 You are given two positive integers x and y, denoting the number of coins with values 75 and 10 respectively. Alice and Bob a…

斗破QT编程入门系列之二:GUI应用程序设计基础:UI文件(四星斗师)

斗破Qt目录&#xff1a; 斗破Qt编程入门系列之前言&#xff1a;认识Qt&#xff1a;Qt的获取与安装&#xff08;四星斗师&#xff09; 斗破QT编程入门系列之一&#xff1a;认识Qt&#xff1a;初步使用&#xff08;四星斗师&#xff09; 斗破QT编程入门系列之二&#xff1a;认识…

高级 HarmonyOS主题课—— 帮助快速构建各种文本识别应用的课后习题

天地不仁&#xff0c;以万物为刍狗&#xff1b; 圣人不仁&#xff0c;以百姓为刍狗。 天地之间&#xff0c;其犹橐龠乎&#xff1f; 虚而不屈&#xff0c;动而俞出。 多闻数穷&#xff0c;不若守于中。 本文内容主要来自 <HarmonyOS主题课>帮助快速构建各种文本识别应用 …

达梦数据库DM管理工具增删改不生效怎么办?如何设置事务自动提交?

前言 我在使用达梦数据库DM时&#xff0c;一开始使用的是达梦数据库自带的连接工具DM管理工具。自带的有它自己的好处&#xff0c;起码对于修改新增字段等是比较兼容的。后面我发现DBeaver也是支持连接达梦数据库的&#xff0c;所以后面用DBeaver也在连接达梦数据库。 我在一…

力扣排序455题(分发饼干)

假设你是一位很棒的家长&#xff0c;想要给你的孩子们一些小饼干。 但是&#xff0c;每个孩子最多只能给一块饼干。 对每个孩子 i&#xff0c;都有一个胃口值 g[i],这是能 让孩子们满足胃口的饼干的最小尺寸;并且每块饼 干j&#xff0c;都有一个尺寸 s[j]。如果 s[j]> g[i]&…

Hadoop---MapReduce(3)

MapTask工作机制 &#xff08;1&#xff09;Read阶段&#xff1a;MapTask通过InputFormat获得的RecordReader&#xff0c;从输入InputSplit中解析出一个个key/value。 &#xff08;2&#xff09;Map阶段&#xff1a;该节点主要是将解析出的key/value交给用户编写map()函数处理&…

ssm052游戏攻略网站的设计与实现+vue(论文+源码)-kaic

毕 业 设 计&#xff08;论 文&#xff09; 题目&#xff1a;游戏攻略网站设计与实现 摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本游戏攻略网站就是在这…

Word大珩助手:超大数字怎么读?35位数字?69位数字?

俄罗斯日前对谷歌开出了20000000000000000000000000000000000&#xff08;35位数字&#xff09;美元的罚款 这一数字远超全球GDP总和&#xff0c;消息一出很快就登上热搜。 面对这样一个庞大的数字&#xff0c;人们不禁好奇&#xff0c;这样的数字该如何读出来&#xff1f; …

VisionPro —— CogIPOneImgeTool工具详解

CogIPOneImageTool工具主要用来对单张图像进行算法处理操作 CogIPOneImgeTool简介 CogIPOneImageTool 工具可完成高斯平滑、高通滤波和图像量化等基本图像处理操作。Image Processing One Image 工具编辑控件为此工具提供图形用户界面。 Image Processing Operations (图像处…

sql数据库-DQL-条件查询

条件查询 SELECT 字段列表 FROM 表名 WHERE 条件列表; 条件列表 比较运算符功能> 大于>大于等于 < 小于<小于等于等于!不等于between...and...某个范围之间&#xff08;闭区间&#xff09;IN(...)在in之后的列表中的值&#xff0c;多选一LIKE 通…