BCSP-玄子Java开发之Java Web编程CH02_JSP核心内置对象
JSP 内置对象
JSP内置对象是 Web 容器创建的一组对象
- out对象
- request对象
- response对象
- session对象
- application对象
- ……
无需实例化,可以直接使用
<%
out.print("Hello!JSP!");
%>
为什么JSP的内置对象不需要实例化?
- JSP内置对象是由Web容器初始化并加载的
- 这些实例按照JSP规范进行了默认的初始化操作,可以直接在JSP中使用
request 内置对象
服务器通过request对象获取浏览器发送的数据,request对象主要用于处理客户端请求
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-A5IjBpEm-1687705735450)(./assets/image-20230624191313656.png)]
常用方法
方法名称 | 说明 |
---|---|
String getParameter(String name) | 根据表单组件名称获取提交数据 |
String[ ] getParameterValues(String name) | 获取表单组件对应多个值时的请求数据 |
void setCharacterEncoding(String charset) | 指定每个请求的编码 |
RequestDispatcher getRequestDispatcher(String path) | 返回一个RequestDispatcher对象,该对象的forward( )方法用于转发请求 |
处理中文乱码
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FqzIVwrF-1687705735451)(./assets/image-20230624191458612.png)]
由于示例1功能涉及浏览器、Tomcat服务器、 Java等多个环境,不同环境所使用的编码不尽相同,导致中文乱码出现
解决方案
- 针对POST请求
- 在获取请求参数值之前,调用setCharacterEncoding(“UTF-8”)方法,将请求的解码方式设定为UTF-8
request.setCharacterEncoding("UTF-8");
- 针对GET请求有两种方式
- 获取数据时处理中文乱码问题
String feedback = request.getParameter("feedback");
feedback = new String(feedback .getBytes("ISO-8859-1"), "UTF-8");
- 修改Tomcat默认字符集
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" URIEncoding="UTF-8" />
Tomcat8.0及之前的版本默认编码是ISO-8859-1”,编码过程中需要处理GET请求乱码问题
response 内置对象
response对象用于设置响应参数和获取响应流
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BUjeKLUg-1687705735452)(./assets/image-20230624192030310.png)]
常用方法
方法名称 | 说明 |
---|---|
void addCookie(Cookie cookie) | 向客户端添加Cookie |
void setContentType(String type) | 设置HTTP响应的contentType类型 |
void setCharacterEncoding(String charset) | 设置响应所采用的字符编码类型 |
void sendRedirect(String location) | 将请求重新定位到一个新的URL上 |
重定向
response
对象提供了请求重定向功能,sendRedirect()
方法可以将请求重定向到一个新的URL
response.sendRedirect("index.jsp");
从request对象中获取用户名并输出
<% String name = request.getParameter("username"); %>
你好!<%= name%>!
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-a3ZmtUGV-1687705735452)(./assets/image-20230624192319356.png)]
未获取到用户名:
- response.sendRedirect()方法是发送新的请求,不包含上次请求中的数据
- 要保证请求数据依然可用,需要使用
转发
功能
转发
使用forward()方法,将请求转发到index.jsp页面
<%
request.setCharacterEncoding("UTF-8");
String name = request.getParameter("username");
String pwd = request.getParameter("password");
if("lv".equals(name)&&"123".equals(pwd)){
request.getRequestDispatcher("index.jsp").forward(request,response);
}
%>
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eMx3unTv-1687705735452)(./assets/image-20230624192443854.png)]
request.getRequestDispatcher(“目标页面地址”).forward(request,response);
使用查询字符串
使用查询字符串可以在重定向时实现简单的数据传递
- 名值对方式
- 通过字符“?”连接在URL地址后面
- 多个名值对可用字符“&“进行分隔
response.sendRedirect("index.jsp?username="+URLEncoder.encode(name,"UTF-8"));
在超链接中使用查询字符串传递数据
<a href = "index.jsp?id=102001">
- 标准URL规范不允许在URL中传递中文和一些特殊字符,如果传递,则需要转换编码
- 使用查询字符串的方式传递数据,可以传递值类型、字符串等简单数据
Session 内置对象
会话跟踪机制
- 一种服务器端的机制
- 用户第一次请求服务器时创建会话,并返回sessionId
- 后续请求携带该sessionId,携带同一sessionId的请求被认为处于同一会话中
使用session内置对象描述一次会话
- 一次会话包含多次请求和响应
- 服务器创建session对象
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RniPENoO-1687705735453)(./assets/image-20230624192932713.png)]
session与窗口的关系
- 每个session对象都与一个浏览器窗口对应
- 重新开启一个浏览器窗口,可以重新创建一个session对象
- 通过超链接打开的新窗口,新窗口的session与其父窗口的session相同
不同版本浏览器可能有所差别
session对象主要方法
方法名称 | 说明 |
---|---|
String getId() | 获取sessionid |
long getCreationTime() | 返回session对象被创建的时间,以毫秒为单位 |
void setMaxInactiveInterval(int interval) | 设定session的非活动时间,以秒为单位 |
int getMaxInactiveInterval() | 获取session的有效非活动时间,以秒为单位 |
void invalidate() | 设置session对象失效 |
void setAttribute(String key, Object value) | 以key/value的形式将对象保存到session中 |
Object getAttribute(String key) | 通过key获取session中保存的对象 |
void removeAttribute(String key) | 从session中删除指定key对应的对象 |
- 通过session对象的getId()方法可以获取sessionid
- 通过getCreationTime()方法可以获取创建时间
Session Id 是:<%= session.getId()%></br>
Session 创建时间:<%= new Date(session.getCreationTime())%>
会话超时和销毁
会话销毁
- 调用session对象的invalidate()方法,可以销毁session对象
会话超时
-
通过setMaxInactiveInterval(int interval)方法设置session有效时长,单位秒
session.setMaxInactiveInterval(15*60);
-
通过项目配置文件设置session有效时长,单位是分钟
<session-config> <session-timeout>10</session-timeout> </session-config>
-
通过Tomcat服务器设置session有效时长,单位是分钟。修改Tomcat目录下的/conf/web.xml文件
<session-config> <session-timeout> 30</session-timeout> </session-config>
Cookie
Web服务器保存在客户端的一系列文本信息
作用
- 对特定对象的追踪
- 实现各种个性化服务
- 在Cookie有效期内,记录用户登录信息
安全性
- 容易泄露信息
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-slcp9E5z-1687705735453)(./assets/image-20230624194059052.png)]
Cookie会将用户的个人信息保存在客户端,可能会包含用户的隐私信息等敏感内容。因此,Cookie存在信息泄露的安全隐患
在JSP中使用Cookie
- 创建Cookie对象
Cookie newCookie = new Cookie(String key, String value);
- 写入Cookie对象
response.addCookie(newCookie);
- 读取Cookie对象
Cookie[] cookies = request.getCookies();
常用方法
方法名称 | 说明 |
---|---|
void setMaxAge(int expiry) | 设置cookie的有效期,以秒为单位 |
void setValue(String value) | 在cookie创建后,对cookie进行赋值 |
String getName() | 获取cookie的名称 |
String getValue() | 获取cookie的值 |
int getMaxAge() | 获取cookie的有效时间,以秒为单位 |
Cookie的存取
在登录处理页面(do_login.jsp)写入Cookie
//添加Cookie保存登录信息
Cookie name = new Cookie("username",username);
Cookie pwd = new Cookie("password",password);
response.addCookie(name);
response.addCookie(pwd);
response.sendRedirect("getCookies.jsp");
创建显示Cookie信息页面(getCookies.jsp)文章来源:https://www.toymoban.com/news/detail-500538.html
//显示Cookies
Cookie[] cookies = request.getCookies();
if(cookies != null){
for(int i=0; i<cookies.length; i++){
out.print("cookie name: " + cookies[i].getName());
out.print("<br/>");
out.print("cookie value: " + cookies[i].getValue());
out.print("<br/>");
}
}
设置Cookie有效时间
使用Cookie对象的setMaxAge(int expiry)方法可以设置Cookie有效期,单位为秒文章来源地址https://www.toymoban.com/news/detail-500538.html
- 当expiry参数大于0时,表示Cookie的有效存活时间
- 当expiry参数等于0时,表示从客户端删除该Cookie
- 当expiry参数小于0或者不设置时,表示Cookie会在当前浏览器窗口关闭后失效
//添加Cookie保存登录信息
Cookie name = new Cookie("username",username);
Cookie pwd = new Cookie("password",password);
name.setMaxAge(60);
pwd.setMaxAge(60);
到了这里,关于BCSP-玄子Java开发之Java Web编程CH02_JSP核心内置对象的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!