BCSP-玄子Java开发之Java Web编程CH02_JSP核心内置对象

这篇具有很好参考价值的文章主要介绍了BCSP-玄子Java开发之Java Web编程CH02_JSP核心内置对象。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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请求
  1. 在获取请求参数值之前,调用setCharacterEncoding(“UTF-8”)方法,将请求的解码方式设定为UTF-8
request.setCharacterEncoding("UTF-8");
  • 针对GET请求有两种方式
  1. 获取数据时处理中文乱码问题
String feedback = request.getParameter("feedback");
feedback = new String(feedback .getBytes("ISO-8859-1"), "UTF-8");
  1. 修改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)

//显示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模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包