JSP的内置对象

article/2025/9/23 17:21:43

文章目录

  • 一. 概述
    • 1. 定义
    • 2. 特点
  • 二. JSP九大内置对象
    • 1. out 输出对象
    • 2. request 请求对象
      • (1). 定义
      • (2). 对应的类型
      • (3). request获取客户端信息的常见方法
        • 1. String getParameter(String name)
        • 2. String[] getParameterValues(String name)
        • 3. void setCharacterEncoding("编码格式utf-8")
        • 4. getRequestDispatcher("B.jsp").forward(request,response)
        • 5. ServletContext getServerContext()
        • 6. 实例分析
          • ①. 结构思维图
          • ②.代码部分
          • ③注意事项:
      • (4). 统一请求编码request
        • 1. get请求方式
        • 2. post方式
    • 3. response 响应对象
      • (1). 定义
      • (2). 提供的方法
        • 1. void addCookie(Cookie cookie);
        • 3. void setContentType(String type);
        • 3. void sendRedirect(String location) throws IOException;
          • (1). 实例:登录
            • ①. 思维导图
            • ②. 代码
          • (2). 请求转发和重定向的区别
    • 4. session 会话对象
      • (1). 定义
      • (2). Cookie对象
        • 1. 定义
        • 2. 本质
        • 3. Cookie对象有的方法
        • 4. 服务端发送给客户端:
        • 5. 实例1
        • 6. 实例2
        • 7. 实例3
        • 8. Cookie的特点
          • 1. 缺点
          • 2. 优点
          • 3. 解决cookie安全的方法
      • (3). session:会话
        • 1. 概述
        • 2. session运行机制
        • 3. 举例理解session
        • 5. session对象的方法
        • 6. 实例1
      • (4). cookie和session的区别
      • (5). session的钝化和活化
    • 5. application 全局对象
      • (1). 方法
      • (2). 举例理解
    • 6. exception 异常对象
      • (1). 方法
    • 7. page 当前JSP页面对象(相当于java的this)
      • (1). 方法
    • 8. pageContext JSP页面容器对象
      • (1). 方法
    • 9. config 配置对象(服务器配置信息)
      • (1). 方法
  • 三. 四种范围对象(从小到大)
    • 1. 以上四个对象共有方法
    • 2. pageContext 当前页面有效
    • 3. request 同一次请求有效;其他请求无效
    • 4. session 同一次会话有效
    • 5. application 整个项目运行期间有效
    • 6. 总结
  • 四. 乱码问题理解
    • 1. JSP编码乱码
    • 2. HTML编码乱码
    • 3. request获取数据乱码
    • 4. response输出信息乱码
    • 5. Cookie导致的编码问题

一. 概述

1. 定义

JSP内置对象:JSP自带的,不需要new也能使用的对象

JSP预定义了内置对象原因:提高程序员的开发效率

2. 特点

  • 内置对象是自动载入的,不需要直接实例化
  • 内置对象通过web容器来实现和管理的
  • 在所有的JSP页面中,直接调用内置对象都是合法的

二. JSP九大内置对象

  • 内置对象使用的时候需要配合jsp的脚本语法。
  • 需要引入servlet和jsp的jar包。
示例代码:
<%--内置对象使用的时候必须配合jsp脚本--%><%//变量名称不需要new  系统内置,直接使用变量调用方法即可out.write("out对象");request.setAttribute("name","admin");application.getAttribute("url");pageContext.setAttribute("","");%>

1. out 输出对象

负责向客户端输入内容

2. request 请求对象

(1). 定义

存储客户端向服务端发送的请求信息

在这里插入图片描述

(2). 对应的类型

javax.servlet.http.HttpServletRequest

(3). request获取客户端信息的常见方法

1. String getParameter(String name)

根据请求的字段名key(input标签的name属性值),返回字段值value(input标签value属性值)

功能:获取客户端传送给服务器的name参数的值,当传送给此函数的参数名没有实际参数与之对应时返回null

2. String[] getParameterValues(String name)

根据请求的字段名key,返回多个字段值value

常见用于checkbox

功能:以字符串数组的形式返回指定参数的所有值

3. void setCharacterEncoding(“编码格式utf-8”)

设置请求编码

Tomcat7以前默认编码为ISO-8859-1
Tomcat8以后改为了utf-8

4. getRequestDispatcher(“B.jsp”).forward(request,response)

请求转发的方式跳转页面 A—>B

5. ServletContext getServerContext()

获取项目的ServletContext对象

6. 实例分析

①. 结构思维图

在这里插入图片描述
在这里插入图片描述

②.代码部分

注册页

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body><form action="show.jsp" method="get">用户名:<input type="text" name="uname"><br/>密码:<input type="text" name="upwd"><br/>年龄:<input type="text" name="uage"><br/>爱好:<br/><input type="checkbox" name="uhobbies" value ="足球" />足球、<input type="checkbox" name="uhobbies" value ="篮球" />篮球、<input type="checkbox" name="uhobbies" value ="乒乓球" />乒乓球<br/><input type="submit" value="注册"></form>
</body>
</html>

显示页面

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body><% request.setCharacterEncoding("utf-8");String name = request.getParameter("uname");int age =Integer.parseInt(request.getParameter("uage"));String pwd = request.getParameter("upwd");String[] hobbies = request.getParameterValues("uhobbies");%>注册成功,信息如下:<br/>姓名:<%=name %><br>年龄:<%=age %><br>密码:<%=pwd %><br>爱好:<%if(hobbies != null){for(String hobby :hobbies)	{out.print(hobby+"&nbsp;");}}%>
</body>
</html>
③注意事项:

get提交方式:method=“get” 和地址栏、超链接(a href=“xxx”)请求方式默认都属于get提交方式

结构:连接/文件? 参数名1=参数值1 & 参数名2=参数值2 & 参数名3=参数值3

地址栏提交方式
http://localhost:8080/yanqunJSP/show.jsp?uname=zs&upwd=123&uage=15&uhobbies=%E7%AF%AE%E7%90%83&uhobbies=%E4%B9%92%E4%B9%93%E7%90%83

get与post请求方式的区别

get方式在地址栏显示请求信息(但是地址栏能够容纳信息有限4-5KB,如果请求数据存在大文件、图片、视频,会出现地址栏容纳不下报错)post不会显示、文件上传操作必须是post(推荐使用)

在这里插入图片描述

(4). 统一请求编码request

1. get请求方式

如果出现乱码

解决:
方法一:统一每一个变量的编码(麻烦,不推荐)

new String(旧编码,新编码)

方法二:修改server.xml,一次性修改Tomcat默认get提交方式的编码(utf-8)

在修改端口号的地方,后面加上URIEncode="utf-8"

2. post方式

如果出现乱码

解决:
设置post方式编码:request.setCharacterEncoding(“utf-8”)
这个只适用于post方式请求编码

这个方法缺点是:只能解决当前页面的乱码问题

过滤器:
想要对整个web应用进行统一编码
可以使用过滤器进行统一的过滤,比较方便

3. response 响应对象

(1). 定义

响应对象
在这里插入图片描述

(2). 提供的方法

1. void addCookie(Cookie cookie);

服务端向客户端增加一个cookie对象

3. void setContentType(String type);

设置服务端响应时的编码,设置服务端的contentType类型

3. void sendRedirect(String location) throws IOException;

页面跳转的一种方式(重定向)

(1). 实例:登录
①. 思维导图

在这里插入图片描述

②. 代码

login.jsp页面

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body><form action="check.jsp" method="post">用户名:<input type="text" name="uname"><br/>密码:<input type="password" name="upwd"><br/><input type="submit" value="登录"><br/></form>
</body>
</html>

check.jsp页面

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body><% request.setCharacterEncoding("utf-8");String name = request.getParameter("uname");String pwd = request.getParameter("upwd");if(name.equals("zs")&&pwd.equals("abc")){//假设是zs、abc	//方式一:页面跳转:重定向会导致数据丢失//response.sendRedirect("main.jsp");//这里面是相对路径//方式二:页面跳转 请求转发,可以获取到数据,并且地址栏没有改变(仍然保留转发时的页面check.jsp)request.getRequestDispatcher("main.jsp").forward(request, response);}else{//登录失败out.print("用户名或密码有误!");}%>
</body>
</html>

mian.jsp页面

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>登录成功!<br>欢迎你:<%String name = request.getParameter("uname");out.print(name);%>
</body>
</html>
(2). 请求转发和重定向的区别
  • 地址栏是否改变

    请求转发:不变

      forward方法属于服务器端去请求资源,服务器直接访问目标地址,并对该目标地址的响应内容进行读取,再把读取内容发给浏览器。
    

    重定向:改变

      Redirect告诉客户端,使浏览器去请求哪一个地址,相当于客户端从新请求一遍。
    
  • 是否保留第一次请求时的数据

    请求转发(forword):保留
    重定向(redirect):不保留
    在这里插入图片描述

  • 请求的次数
    请求转发:1次
    在这里插入图片描述
    重定向:2次
    在这里插入图片描述

  • 跳转发生的位置

    请求转发:服务端
    重定向:客户端发出的第二次跳转

转发、重定向实例:
转发:

	张三(客户端) -> [服务窗口A(服务端)——>服务窗口B ]

重定向:

	张三(客户端) -> 服务窗口A(服务端)——> 去找B张三(客户端) -> 服务窗口B(服务端)——> 结束

4. session 会话对象

(1). 定义

session(服务端)
cookie(客户端,不是内置对象)

session对应类(接口)是:javax.servlet.http.HttpSession

(2). Cookie对象

1. 定义

由服务端生成,再发送给客户端保存

相当于本地缓存的作用:客户端(hello.mp4;zs/123)——>服务端(hello.mp4;zs/123)

提高访问服务端的效率,但是安全性较差

2. 本质

Cookie:key=value

Cookie对象由javax.servlet.http.Cookie产生

3. Cookie对象有的方法

  • public Cookie(String key, String value)
  • String getName()
  • String getValue()
  • void setMaxAge(int expiry);最大有效期(秒)

4. 服务端发送给客户端:

产生完cookie放在以下方法里面去:
response.addCookie(Cookie cookie)

发送给客户端:
页面跳转(转发、重定向)

客户端获取cookie:
request.getCookies();

注意:

服务端增加cookie:response对象
客户端获取对象:request对象
获取只能获取全部的cookie,不能获取单独对象

通过F12可以发现,除了自己设计的Cookie对象外,还有一个name为JSESSIONID的cookie
每一个cookie都有一个JSESSIONID
在这里插入图片描述

5. 实例1

了解Cookie的工作流程
在这里插入图片描述

response_addCookie.jsp<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%><!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body><%//服务端Cookie cookie1 = new Cookie("name","zs");Cookie cookie2 = new Cookie("pwd","abc");response.addCookie(cookie1);response.addCookie(cookie2);//页面跳转到客户端(转发、重定向)response.sendRedirect("result.jsp");%>
</body>
</html>
result.jsp<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body><%//客户端获取cookie(获取所有的cookie)Cookie[] cookies = request.getCookies();for(Cookie cookie:cookies){out.print(cookie.getName()+"---"+cookie.getValue()+"<br/>");}%></body>
</html>

6. 实例2

使用Cookie实现 记住用户名功能
在这里插入图片描述

7. 实例3

了解cookie最大有效期的方法,进行代码实现。

8. Cookie的特点

1. 缺点

cookie不是绝对的安全,用户名、密码保存在cookie中,当cookie被盗取就会暴露了

盗取cookie的方法:

1.利用跨站脚本技术,将信息发送给目标服务器
2. 通过某些软件盗取硬盘下的cookie
2. 优点

cookie能够持久化保存
cookie可以帮助服务器保存多个状态信息,但不用服务器分配专门存储资源
cookie可以持久保持一些和客户相关的信息

3. 解决cookie安全的方法
  • 替代cookie,将数据保存在服务器端,选用session
  • 及时删除cookie

(3). session:会话

1. 概述

一次会话:从一次开始——>一次结束

a. 浏览网站:从开始——>关闭就是一次会话
b. 购物: 从浏览、付款、退出就是一次会话
c. 电子邮件:浏览、写邮件、退出就是一次会话

2. session运行机制

客户端第一次请求服务端时,(JSESSIONID——sessionid匹配失败),服务端会产生一个session对象(用于保存该客户的信息);
并且每个session对象 都会有一个唯一的sessionId(用于区分其他session)
服务端又会产一个cookie,并且该cookie的name(key)=JSESSIONID,value=sessionId的值;
然后服务端会在响应客户端的同时 将该cookie发送给客户端,至此 客户端就有了一个cookie(里面是JSESSIONID);
因此客户端的cookie就可以和服务端的session一一对应起来(cookie的JSESSIONID和session的sessionID对应)

客户端第二/n次请求服务端时,服务器会先用客户端cookie中的JSESSIONID去服务端的session中匹配sessionid,如果匹配成功(cookie的JSESSIONID和session的sessionid值相同),说明此用户不是第一次访问,无需登录;

session在用户登录的时候创建

在这里插入图片描述
注:

  1. session存储在服务端
  2. session是在同一个用户(客户)请求时共享
  3. 实现机制:第一次客户请求 产生一个sessionid并复制给cookie的jsessionid然后发给客户端。最终通过session的sessionid——和cookie的jsessionid一一对应

3. 举例理解session

例子:
客户端:顾客(客户端)
服务端:存包处——商场(服务端)

顾客第一次存包:商场判断此人是否之前已经存过包(通过你手里面是否有钥匙)
如果是新顾客(没钥匙),分配一个钥匙给该顾客:钥匙会和柜子一一对应

第二次/n次存包:商场判断此人是否之前已经存过包(通过你手里面是否有钥匙)
如果是老顾客(有钥匙),则不需要分配,该顾客手里面的钥匙会和柜子自动一一对应起来

在这里插入图片描述

5. session对象的方法

  • String getId():获取sessionId
  • boolean isNew():判断是否是新用户(第一次访问)
  • void invalidate():使session失效(退出登录、注销)
  • void setMaxInactiveInterval(秒):设置最大有效 非活动时间
  • int getMaxInactiveInterval():获取最大有效 非活动时间

属性操作

  • void setAttribute()
  • Object getAttribute()

6. 实例1

登录

在这里插入图片描述

在这里插入图片描述

同一个浏览器可以共用一个session

login.jsp<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body><form action="check.jsp" method="post">用户名:<input type="text" name="uname"><br/>密码:<input type="password" name="upwd"><br/><input type="submit" value="登录"><br/></form>
</body>
</html>
check.jsp<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body><% request.setCharacterEncoding("utf-8");String name = request.getParameter("uname");String pwd = request.getParameter("upwd");if(name.equals("zs")&&pwd.equals("abc")){//只有登录成功,session中才会存在uname/upwdsession.setAttribute("uname", name);session.setAttribute("upwd", pwd);//控制台打印输出看看sessionIDSystem.out.println("sessionId:"+session.getId());//服务端产生完cookie,发送给客户端//Cookie cookie = new Cookie("uname",name);//response.addCookie(cookie);//服务端在第一次响应客户端时,会自动发送一个JSESSIONID的cookierequest.getRequestDispatcher("welcome.jsp").forward(request, response);//session.setMaxInactiveInterval(10); //有效非活动时间10s,(10s内没有进行操作就需要重新登录)}else{//登录失败response.sendRedirect("login.jsp");}%>
</body>
</html>
welcome.jsp<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>欢迎您!:<%String name = (String)session.getAttribute("uname");//如果用户没有登录,而是直接通过地址栏访问welcome.jsp,则必然获取到的name是null//如果没有登录,应该跳回登录页if(name!=null){out.print(name);%><a href="invalidate.jsp">注销</a><%}else{response.sendRedirect("login.jsp");}%>
</body>
</html>
a.jsp<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body><%out.print(session.getAttribute("uname"));Cookie[] cookies = request.getCookies();for(Cookie cookie:cookies){if(cookie.getName().equals("JSESSIONID")){//打印看看控制台的JSSSIONID和sessionID是否对应System.out.println("JSESSIONID:"+cookie.getValue());}}%></body>
</html>
invalidate.jsp<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body><%session.invalidate();		//一次性将session全部失效response.sendRedirect("login.jsp");//session.removeAttribute("uname");//将用户名失效%>
</body>
</html>

在这里插入图片描述
注:

客户端在第一次请求服务端时,如果服务端发现,此请求没有JSESSIONID,则会创建一个拥有name=JSESSIONID的cookie 并返回给客户端

cookie:
不是内置对象,要使用必须new
但是,服务端会自动生成一个(服务端自动new一个cookie)name=JSESSIONID的cookie 并返回给客户端

(4). cookie和session的区别

  • 保存的位置

    session:服务端
    cookie:客户端

  • 安全性

    session:较为安全
    cookie:较不安全

  • 保存的内容

    session:Object
    cookie:String

(5). session的钝化和活化

  • 钝化:内存—>硬盘
  • 活化:硬盘—>活化
    在这里插入图片描述

5. application 全局对象

(1). 方法

  • String getContextPath(); 获取虚拟路径
  • String getRealPath(); 获取绝对路径(虚拟路径相对的绝对路径)

(2). 举例理解

实现页面被访问次数的统计

6. exception 异常对象

(1). 方法

  • 功能:异常处理对象(需要页面设置isErrorPage属性参数)
  • 类型:Throwable

7. page 当前JSP页面对象(相当于java的this)

(1). 方法

  • 功能:描述页面的对象
  • 类型:Object

8. pageContext JSP页面容器对象

(1). 方法

  • 功能:页面的全局对象【作用域】
  • 类型:PageContext

9. config 配置对象(服务器配置信息)

(1). 方法

  • 功能:配置
  • 类型:ServletConfig

三. 四种范围对象(从小到大)

pageContext JSP页面容器对象 (page对象)

范围:当前页面有效
  • 当前页面定义的变量只能本页面使用不能跨页面调用

request 请求对象

范围:同一次请求有效
  • 客户端发起请求到服务器响应结束

session 会话对象

范围:同一次会话有效
  • 从浏览器打开到结束的过程,过程中可以发起多次请求操作

application 全局对象

范围:全局有效(整个项目有效)
  • 服务器从启动到停止的整个过程

1. 以上四个对象共有方法

  • Object getAttribute(String name):根据属性名,获取属性值

  • void setAttribute(String name, Object obj):设置属性值(新增,修改)

      setAttribute("a", "b");//如果a对象之前不存在,则新建一个a对象;//如果a之前已经存在,则将a的值改为b
    
  • void removeAttribute(String name);根据属性名,删除对象

2. pageContext 当前页面有效

页面跳转后无效

3. request 同一次请求有效;其他请求无效

请求转发后有效;重定向后无效

4. session 同一次会话有效

无论怎么跳转,都有效;
关闭/切换浏览器后无效;
从登录到退出之间全部有效

5. application 整个项目运行期间有效

全局变量

切换浏览器任然有效

6. 总结

对个项目共享、重启后仍然有效LJNDI

  1. 以上的4个范围对象,通过setAttribute()赋值,再通过getAttribute()取值
  2. 以上范围对象,尽量使用最小的 范围对象,对象范围越大造成的损耗越大

作用域对象范围:从小到大排列

  • pageContext<request<session<application

代码举例:
在这里插入图片描述
在这里插入图片描述

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>四大域对象练习</title>
</head>
<body><%--四大域对象存储数据--%><%pageContext.setAttribute("username", "zhangsan");request.setAttribute("url", "www.baidu.com");session.setAttribute("token", "123456");application.setAttribute("pageSize", "120");%><%--获取作用域对象的数据--%><%Object username = pageContext.getAttribute("username");Object url = request.getAttribute("url");Object token = session.getAttribute("token");Object pageSize = application.getAttribute("pageSize");%><%--输出变量--%><%=username%>  <br><%=url%>  <br><%=token%> <br><%=pageSize%> <br><%--删除作用域对象参数--%><%pageContext.removeAttribute("username");%><%--重新获取变量--%><%Object username1 = pageContext.getAttribute("username");%>删除pageContext对象数据: <%=username1%>  <br>
</body>
</html>

四. 乱码问题理解

1. JSP编码乱码

这种是最常见的,设置编码的位置位于JSP的第一行,如果在Eclipse中新建一个JSP默认是下面这种:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>

它默认的页面编码和传输编码都是ISO-8859-1,这是用于欧洲国家的编码。
可以通过设置Eclipse中JSP的编码格式,来修改默认生成的编码格式。

如果想要支持中文,可以使用UTF-8、GB2312、GBK等,其中UTF-8是国际化的,哪个国家的都支持。

上面涉及到编码的两个地方:charset 和 pageEncoding

charset是指服务器发往客户端展现时的编码;
pageEncoding用于设置JSP页面本身的编码。

JSP在部署后提供给用户使用,会经过三个阶段:

1 JSP生成java文件:这个阶段会使用pageEncoding所定义的编码格式进行转换

2 java文件生成class文件:这个阶段由服务器tomcat自动使用utf-8编码把java文件转换成字节码class文件

3 通过读取class文件展现给用户:这个阶段由tomcat服务器获取字节码内容,通过使用contentType所定义的编码格式展现给用户。

大致过程如下图:
在这里插入图片描述
可以这样设置:

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

2. HTML编码乱码

因为JSP中也包含HTML的内容,HTML本身也是有编码格式的。

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body></body>
</html>

如果这部分编码出现问题,那么HTML中标签的中文命名就会出现乱码。

HTML中因为只涉及到表现层,所以只有一个属性content中charset,这个编码格式设置对了,就没问题了。

3. request获取数据乱码

有时候在做jsp逻辑处理时,比如提交表单,从前台注册的页面提交了一部分的数据,但是后面处理的JSP页面

通过 request.getParameter 调用时,获取到的是一堆乱码。

这是因为虽然前面JSP设置了编码格式,却没有在当前的JSP中设置读取数据的编码格式。

使用下面的代码,就可以是设置request获取请求内容的数据编码:

request.setCharacterEncoding("UTF-8");

需要注意的是,这种方式对 URL传参这种JSP请求 是没有作用的。比如:

<a href="jspRequest.jsp?username=lisi">url test request(en)</a>
<a href="jspRequest.jsp?username=李四">url test request(zh)</a>

这种情况仍然会出现乱码,这种URL传参的方式,只能修改服务器tomcat的传输编码格式。

修改tomcat安装文件 apache-tomcat-6.0.43\conf 目录下的server.xml
在这里插入图片描述

4. response输出信息乱码

response输出页面元素内容时,也会出现乱码。

使用下面代码就可以设置response输出的编码格式:

response.setContentType("text/html;charset=UTF-8");

在这里插入图片描述
response.setCharacterEncoding(“UTF-8”)的作用是指定服务器响应给浏览器的编码。
response.setContentType(“text/html;charset=utf-8”)的作用是指定服务器响应给浏览器的编码。同时,浏览器也是根据这个参数来对其接收到的数据进行重新编码(或者称为解码)。

转载至:
在这里插入图片描述

5. Cookie导致的编码问题

Cookie由于需要保存在客户端中,因此使用过程中都需要编码以及转码:

在保存Cookie数据前首先引入java.net.*,该包中包含URLEncoder类;保证response与request的编码正确;使用URLEncoder进行转码,并保存。
<%@ page language="java" contentType="text/html; charset=UTF-8"import="java.net.*"pageEncoding="UTF-8"%>
<%
//保证request以及response的编码 
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");//使用URLEncoder解决cookie中中文问题
String username = URLEncoder.encode(request.getParameter("username"),"UTF-8");
String password = URLEncoder.encode(request.getParameter("password"),"UTF-8");Cookie usernameCookie = new Cookie("username",username);
Cookie passwordCookie = new Cookie("password",password);
usernameCookie.setMaxAge(864000);
passwordCookie.setMaxAge(864000);response.addCookie(usernameCookie);
response.addCookie(passwordCookie);
%>

在使用Cookie数据前

依然要注意导入必备的包:java.net.*

注意request的编码;

使用URLDecoder进行解码

转载至:详细请访问链接


http://chatgpt.dhexx.cn/article/7rZ2KUjD.shtml

相关文章

JavaWeb学习——JSP内置对象

内置对象简介 JSP内置对象是Web容器创建的一组对象&#xff0c;不使用new关键字就可以直接使用的内置对象。 <% int[] value{60,70,80}; for(int i:value){ out.println(i); //这里out对象就是内置对象 } %>常用的JSP内置对象&#xff1a;out、request、response、sess…

JSP内置对象实例实训报告

**JSP程序设计程第二版 JSP内置对象实例实训报告 JSP内置对象实例实训 设备仪器/软件环境** 1.Windows 10系统 2.JDK、eclipse、Tomcat 实验(实训)/目标 1.掌握JSP中request对象、reponse对象、session对象及application对象的使用方法。 2.理解request对象、reponse对象、se…

JSP内置对象和4大作用域

什么是JSP内置对象 JSP内置对象&#xff0c;就是编写JSP页面时&#xff0c;不需要做任何声明就可以直接使用的对象&#xff0c;列如下面的代码片段。 <% int [] value { 60 , 70 , 80}; for(int i : value){ out.print(i); } %> 代码out.print()可以实现页面的输出显…

如何在cmd命令提示符中到达指定路径或文件夹

补充&#xff01;&#xff01;&#xff01;快速方法&#xff01; 可以直接在文件夹路径处单击&#xff0c;然后输入cmd&#xff0c;按回车就可以了 ** 以下为传统方法&#xff1a; ** 1.如果要找的路径在C盘 (1)&#xff08;用相对路径&#xff09;若果是在要到当前目录下…

cmd中回退到上一级文件目录 与 定位下一级目录

回退到上一级 cd… 定位到下一级 cd xxx(输入想到达的下一级文件名)

Windows系统下cmd中直接返回根目录

今天在vscode中使用 cd/ 命令返回根目录&#xff0c;但是发现命令不识别&#xff0c;如图&#xff1a; 切换到 cmd 中使用 cd/ 命令则正常使用&#xff1a; 眼神好的同学应该已经发现了&#xff0c;vscode 中目前使用的终端是 PS&#xff0c;即 Power Shell&#xff0c;打开系统…

Win7 64的cmd控制台进入下级目录和返回上级目录(上级目录cd .. 下级目录cd+文件名称)

本博客主要总结在win7 64位系统下&#xff0c;在cmd控制台&#xff0c;一级一级进入目录。然后再一级一级返回上一级目录&#xff0c;具体的如下面所述。 背景知识&#xff1a; a1.进入下一级目录命令: cd 文件夹名称 cd 文件夹名称 a2.返回上一级目录命令: …

cmd如何返回上一级目录,如何进入其他文件目录

当我们打开cmd或者composer运行命令时都会进入一个默认文件目录&#xff0c;那么cmd该如何返回上一级目录&#xff0c;和如何进入其他文件目录运行命令呢&#xff0c;具体方法如下图所示&#xff01; 1&#xff1a;在默认的命令后加 cd.. 即可返回上一级目录 2&#xff1a;cmd…

Barman 2.7 发布,PostgreSQL 数据库备份工具

开发四年只会写业务代码&#xff0c;分布式高并发都不会还做程序员&#xff1f; Barman 2.7 已发布&#xff0c;Barman 是 PostgreSQL 数据库的备份和灾难恢复管理器。新版本修复了备份并行副本、异地冗余可用性和 UTF-8 输入/输出处理中的各种错误。 新版的更新亮点是并行备…

pg备份还原工具--barman

2019独角兽企业重金招聘Python工程师标准>>> 一、系统 [rootbarman ~]# cat /etc/issue CentOS release 6.5 (Final) Kernel \r on an \m[rootbarman ~]# uname -a Linux barman 2.6.32-431.11.2.el6.x86_64 #1 SMP Tue Mar 25 19:59:55 UTC 2014 x86_64 x86_64 x86…

Postgres流式备份(1)Barman概述

参考文档&#xff1a;http://docs.pgbarman.org/release/2.5/index.html 概述 Barman是使用Python编写的PostgreSQL开源备份和恢复管理器 功能 多种备份方式集成备份文件的管理 流备份技术和工具 pg_basebackup&#xff1a;用于数据库全量备份pg_receivewal/pg_receivexl…

Barman 常用命令

http://docs.pgbarman.org/release/2.3/ 官方操作手册 数据库备份命令 barman备份命令 1、执行全备份 barman backup vlnx053001.foneshare.cn 数据库备份检查命令 1、查看可监听的数据库服务器 barman list-server 2、状态检查 barman check vlnx053003.foneshare.cn barman…

barman使用复制槽备份

http://docs.pgbarman.org/release/2.5/ 使用复制槽就不用创建公钥及传递公钥了在 barman和pg服务器间 复制槽和 rsync 最好不要一起使用&#xff0c;一起使用的话 会导致 incoming里的文件爆满不会自动删除&#xff08;实践是这样的&#xff09; 搭建测试环境 vlnx15100510…

Barman离线安装(一步到位)

软件版本信息 软件版本CentOS Linux release 7.8.2003 (Core)Python 3.6.8pip 9.0.3 from /usr/lib/python3.6/site-packages (python 3.6)psql (PostgreSQL) 13.6 安装postgresql客户端 1. 配置yum源&#xff0c;安装依赖 # vim /etc/yum.repos.d/CentOS-Media.repo [c7-m…

barman

拓扑&#xff1a; 注意&#xff1a; 1.barman的安装需要使用postgresql的模块&#xff0c;尽量保证pg1 &#xff0c;barman-server&#xff0c;backup-pg上的postgresql版本一致。 步骤&#xff1a; 1 在pg1上安装postgresql-11 yum install https://download.postgresql.org/…

Barman备份方案介绍

Barman 是一款开源的基于Python开发的集备份和恢复为一体的优秀PG数据库备份工具&#xff0c;它可以对单个/多个PG数据库进行远程/本地备份&#xff0c;用以增强业务数据的安全性&#xff0c;为DBA提供恢复数据库提供可靠的帮助。 Barman 优点 支持对多版本PG的备份, 已知支持…

PostgreSQL 备份恢复工具之 Barman

文章目录 Barman 简介Barman 与 pg_dump 对比 Barman 简介 Barman&#xff08;Backup and Recovery Manager&#xff0c;备份与恢复管理器&#xff09;是一个用于 PostgreSQL 数据库灾难恢复的开源管理工具&#xff0c;使用 Python 编写。Barman 使得企业能够执行多个关键业务…

使用 barman的备份和归档PostgreSQL

1 前言 1.1 Barman简介 barman&#xff08;备份和恢复管理器&#xff09;是用于PostgreSQL服务器进行灾难恢复的开源管理工具&#xff0c;是以Python编写的。它支持对多台服务器执行远程备份&#xff0c;以降低风险并帮助DBA进行数据库恢复。 1.2 Barman的备份方式 本文假定…