Javaweb的9个内置对象

    科技2025-04-06  22

    Javaweb的9个内置对象

    文章目录

    Javaweb的9个内置对象JSP共有以下9大内置对象: 一、内置对象out**out.clear(),out.flush(),out.clearButtfer()的区别**:star:1.out.clear()是直接清空缓冲区数据,不输出到客户端且刷新缓存时抛出异常:star:2.out.flush()先输出缓冲区数据再清空。:star:3.**out.clearBuffer() 清空缓冲区,不输出到客户端** **二、内置对象request**getParameter(key) 获取提交表单的数据 JAVA中request.getParameterMap()用法Map

    JSP共有以下9大内置对象:

    out

    request

    response

    session

    application

    pageContext

    config

    page

    exception

    一、内置对象out

    ​ 作用:主要用来向客户端输出数据

    ​ clear() 清空缓冲区;

    ​ clearBuffer() 清空当前区的内容;

    ​ close() 先刷新流,然后关闭流;

    ​ flush() 刷新流;

    ​ getBufferSize() 以字节为单位返回缓冲区的大小;

    ​ getRemaining() 返回缓冲区中没有使用的字符的数量;

    ​ isAutoFlush()返回布尔值,自动刷新还是在缓冲区溢出时抛出IOException异常

    <body> <h1>out内置对象</h1> <% out.println("<h2>静夜思</h2>");//可以在println();里面加入标签 out.println("床前明月光"); out.println("疑是地上霜"); out.flush(); out.clear();//这里会抛出异常,因为上面有flush out.clearBuffer();//这里不会抛出异常 out.println("举头望明月"); out.println("低头思故乡"); %> 缓冲区大小:<%=out.getBufferSize() %>byte<br> 缓冲区剩余大小:<%=out.getRemaining() %>byte<br> 是否自动清空缓冲区:<%=out.isAutoFlush() %><br> </body>

    out.clear(),out.flush(),out.clearButtfer()的区别

    ⭐️1.out.clear()是直接清空缓冲区数据,不输出到客户端且刷新缓存时抛出异常

    ⭐️2.out.flush()先输出缓冲区数据再清空。

    ⭐️3.out.clearBuffer() 清空缓冲区,不输出到客户端

    二、内置对象request

    描述:来自客户端的请求经Servlet容器处理后,由request对象进行封装。注:客户端和服务器的一次通信就是一次请求(发送请求或得到相应)。

    作用域:request。说明,这次请求结束后,它的生命周期 就结束了。

    getParameter(key) 获取提交表单的数据

    ⭐️Get请求和Post的区别:get参数通过URL传递,post放在request body中。安全性:post比get安全。请求缓存:GET 会被缓存,而post不会。

    Get请求上传的数据不能大于2KB(是因为浏览器对于URL的长度有限制),而Post请求对于传输的数据理论上来说是没有限制的。所以,在JavaWeb开发中,对于文件的上传的表单的提交方法必须为“Post”方式

    getParameterValues(key) 获取提交表单的一组数据(用于获取数组的数据)

    request.getRequestDispatcher(“list.jsp”).forward(request,response) 转发(通过代码的方式进行转发)

    1 <%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 4 <html> 5 <head> 6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 7 <title>Insert title here</title> 8 </head> 9 <body> 10 <form action="request-receiver.jsp" method="post"> 11 username:<input type="text" name="user"/><br/> 12 password:<input type="password" name="pwd"/><br/> 13 14 <input type="submit" name="登陆"/> 15 16 </form> 17 </body> 18 </html> <% 2 //获取请求数据 3 //设置请求方式的编码 4 request.setCharacterEncoding("UTF-8"); 5 String name = request.getParameter("user"); 6 String pwd = request.getParameter("pwd"); 7 System.out.println(name+","+pwd); 8 9 if("smyh".equals(name) && "007".equals(pwd)) { 10 out.println("登陆成功"); 11 request.setAttribute("age", "22"); 12 request.getRequestDispatcher("request-success.jsp").forward(request, response); 13 14 }else{ 15 out.println("errors"); 16 } 17 %> 如果用户名密码正确,就将这个请求转发给"request-success.jsp".forward(request, response)表示当前的请求对象和当前的响应对象。

    request.setAttribute(key,object) 设置请求对象的属性

    request.getAttribute(key) 获取请求对象的属性

    <%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 4 <html> 5 <head> 6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 7 <title>Insert title here</title> 8 </head> 9 <body> 10 欢迎你,<%=request.getParameter("user") %> <br/> 11 年龄:<%=request.getAttribute("age") %> 12 13 </body> 14 </html>

    request.setCharacterEncoding(“UTF-8”) 对请求数据重新编码System.out.println("request.getRemoteAddr(): " + request.getRemoteAddr()); 获得客户端的ip地址System.out.println("request.getRemoteHost(): " + request.getRemoteHost());获得客户端的主机名System.out.println(request.getContextPath());获取项目名;request.getServletContext().getRealPath("/");//获取web服务器项目的真实物理(绝对)路径;//😄:\java\apache-tomcat-9.0.37-windows-x64\apache-tomcat-9.0.37\webapps\tmail\ ;request.getRequestURI(); 返回除去host(域名或者ip)部分的路径:/tmail/welcome.jsp

    JAVA中request.getParameterMap()用法

    Map<String,String[]> map = request.getParameterMap();
    for(String s:map.keySet()) { out.println(s+"---"+request.getParameter(s)+"<br/>"); }

    quest.getParameterMap()方法也是通过前台表单中的name值进行获取的,获取到后又进行了一次封装。 之所以返回的map中的value为字符串类型的数组,是为了解决表单中有多个name值一样的项。****

    request.getParameterMap()返回的是一个Map类型的值,该返回值记录着前端(如jsp页面)所提交请求中的请求参数和请求参数值的映射关系。这个返回值有个特别之处——只能读。不像普通的Map类型数据一样可以修改。

    对request.getParameterMap()的返回值使用泛型时应该是Map<String,String[]>形式,因为有时像checkbox这样的组件会有一个name对应对个value的时候,所以该Map中键值对是String[]>的实现。

    三、内置对象resonpse

    重要方法:

    response.sendRedirect(“页面”):页面跳转。注意,之前的forward是转发,这里是跳转,注意区分。

    //重定向;服务端的两次页面跳转,显示跳转地址 //response.send ("success.jsp"); //转发(服务端的一次页面跳转,是服务器的一次行为) //request.getRequestDispatcher("success.jsp").forward(request, response);

    response.setCharacterEncoding(“utf-8”):设置响应编码

    <%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3 <% 4 //获取请求数据 5 //设置请求方式的编码 6 request.setCharacterEncoding("UTF-8"); 7 String name = request.getParameter("user"); 8 String pwd = request.getParameter("pwd"); 9 System.out.println(name+","+pwd); 10 11 12 if("smyh".equals(name) && "007".equals(pwd)) { 13 out.println("登陆成功"); 14 request.setAttribute("age", "22岁"); 15 request.getRequestDispatcher("request-success.jsp").forward(request, response); 16 17 }else{ 18 //out.println("errors"); 19 response.setCharacterEncoding("UTF-8"); //设置响应的编码 20 //设置响应内容的类型 21 response.setContentType("text/html;charset=UTF-8"); 22 response.sendRedirect("response.jsp"); 23 } 24 %>

    19行至22行是添加的代码:如果用户名、密码错误,就调到response.jsp页面去。

    新建response.jsp,代码如下:

    1 <%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 4 <html> 5 <head> 6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 7 <title>Insert title here</title> 8 </head> 9 <body> 10 不好意思,登陆失败。 11 </body> 12 </html>

    注意第06行的“content=text/html”,表示:指定服务器返回的数据类型。

    运行程序,当输入的用户名、密码错误后,效果如下:(注意url)

    重定向和转发:

    重定向的意思是说,当页面进行跳转之后,request和response的生命周期已经结束,完全交给下一个页面去处理了(连url都变了);而转发的时候,还可以往request里面添加携带参数(url不变)。

    四、session(会话)

    描述:表示一个会话,用来保存用户信息,以便跟踪每个用户的状态。(不要用来保存业务数据,request)

    定义:是指在一段时间内客户端和服务器之间的一连串的相关的交互过程。

    作用域:session。

    如果是第一次接触“会话”这个概念,需要重复一下。说白了,客户端与服务器之间可能需要不断地进行数据交互(请求与相应),这个过程就可以理解为一段回话。Tomcat默认的会话时间为30分钟,这段时间内如果没有交互,会话结束;下次客户端一旦发送请求,重新创建会话。当客户端第一次发送请求的时候,才会创建一个会话。session的生命周期比request长

    重要方法:

    session.getid():取得session的id号.id由tomcat自动分配。

    session.isnew():判断session时候是新建的

    session.setAttribute(key,object):往当前会话中设置一个属性(保证会话的安全)【常用于跳转页面之前】

    session.getAttribute(key):获取当前会话中的一个属性

    session.removeAttribute(key):删除当前会话中的属性

    session.setMaxInactiveInterval(10006030):设置当前会话失效时间(ms) 。Tomcat默认的会话时间为30分钟。

    session.invalidate():初始化当前会话对象(一般在推出的时候使用,可以删除当前会话的数据)

    会话结束的条件之一:

    服务器关闭会话过期(一段会话时间默认为30分钟)手动终止会话

    五、内置对象application

    类型:javax.servlet.ServletContext

    描述:从servlet配置对象获得的servlet上下文

    作用域:application

    ⭐️application对象的生命周期:从Web服务器启动,直到Web服务器关闭.

    这个对象的生命周期是最长的。服务器启动的时候就会创建application对象。从服务器存在到服务器终止,都一直存在,且只保留一个对象,所有用户共享一个application。不是很常用。

    四大作用域总结:

    page:当前页面。

    request:一次请求。//重定向response.sendRedirect(“success.jsp”);(得不到request的数据,因为客户端进行了两次请求request不一样) //转发(服务端的一次页面跳转,是服务器的一次行为) //request.getRequestDispatcher(“success.jsp”).forward(request, response);(可以拿到request的数据,只进行了一次请求)

    session:关闭浏览器,或者session过期。或者设置session.invalidate()使session过期。

    application:服务器重启。

    六、内置对象pageContext

    描述:本JSP的页面上下文。

    作用域:page

    注:上下文的理解:上下文可以联系到当前页面所有的信息

    JavaWeb的Cookie相关操作

    1.1 cookie 的常用方法:

    1.创建Cookie,以键值对的方式存储: Cookie[] cookie = request.getCookies();

    2.Cookie的生命周期: setMaxAge();

    ​ cookie.setMaxAge(-1):cookie的maxAge属性的默认值就是-1,表示只在浏览器内存中存活。一旦关闭浏览器窗口,那么cookie就会消失*。

    ​ cookie.setMaxAge(0):cookie生命等于0是一个特殊的值,它表示cookie被作废!也就是说,如果原来浏览器已经保存了这个Cookie,那么可以通过Cookie 的setMaxAge(0)来删除这个Cookie。无论是在浏览器内存中,还是在客户端硬盘上都会删除这个Cookie。

    3.获取Cookie的名称: getName();

    4.设置Cookie的值: setValue();

    5.获取Cookie的值: getValue();

    <% Cookie[] cookie = request.getCookies(); String name = ""; String pwd = ""; for (Cookie c : cookie) { if (c.getName().equals("UNAME")) { name = c.getValue(); } if (c.getName().equals("UPWD")) { pwd = c.getValue(); } } %> </head> <body> <form method="post" action="loginSubmitCookie.jsp" name="loginForm"> 用户名:<input type="text" name="username" value="<%=name%>" /><br />&nbsp;码:<input type="password" name="userpwd" value="<%=pwd%>" /><br /> <input type="checkbox" name="fLogin" value="1" />记住我<br /> <input type="submit" value="登陆" /> </form> </body> <body> <% String name = request.getParameter("username"); String pwd = request.getParameter("userpwd"); String fLogin = request.getParameter("fLogin"); out.println(fLogin); if ("admin".equals(name) && "123".equals(pwd)) { if ("1".equals(fLogin)) { Cookie cookName = new Cookie("UNAME", name); cookName.setMaxAge(10); response.addCookie(cookName);//将Cookie信息写回到客户端浏览器中 Cookie cookPwd = new Cookie("UPWD", pwd); cookPwd.setMaxAge(10); response.addCookie(cookPwd);//将Cookie信息写回到客户端浏览器中 } } %> </body>
    session是什么? Cookie是什么? 两者区别?

    Cookie就是服务器保存在客户端的数据;

    Cookie采用客户端存储,Session采用的服务端存储的机制。

    session依赖于cookie(原因:客户端与服务器之间保持状态的解决方案,sessionID存储在浏览器端的cookie里,当浏览器发送请求的时候,服务器用一个sessionID来区分是哪个用户session变量,要不然服务器怎么知道是那个用户发过来的请求呢)。

    session一直存储在服务器内存中。当浏览器不变时请求的是同一个Session。当浏览器关闭时候,再打开session就会发生变化(“只要关闭浏览器,session就消失了”),原因:其实关闭浏览器前的session并没有消失,只是在关闭浏览器的时候seesionId消失了,再次打开浏览器时无法找到原来的session了,如果把原来的sessionId再发服务器,还是能找到原来的Session。

    cookie 当设置cookie不设置生命周期时,保存在内存中,当关闭浏览器时cookie被清空。当设置生命周期时候,cookie被保存在硬盘中,所以当关闭浏览器,再打开还是可以访问到,直到生命周期结束。

    sessionId 默认(通过Cookie)存储在浏览器的内存中,所以关闭浏览器,sessionId会消失。

    jsp 三大指令

    指令描述<%@ page … %>定义网页依赖属性,比如脚本语言、error页面、缓存需求等等<%@ include … %>包含其他文件<%@ taglib … %>引入标签库的定义
    Page指令:

    Page指令为容器提供当前页面的使用说明,Page指令一般位于jsp页面顶端。**一个JSP页面可以包含多个page指令。**Page指令的语法格式:

    buffer指定out对象使用缓冲区的大小autoFlush控制out对象的 缓存区contentType指定当前JSP页面的MIME类型和字符编码errorPage指定当JSP页面发生异常时需要转向的错误处理页面isErrorPage指定当前页面是否可以作为另一个JSP页面的错误处理页面extends指定servlet从哪一个类继承import导入要使用的Java类info定义JSP页面的描述信息isThreadSafe指定对JSP页面的访问是否为线程安全language定义JSP页面所用的脚本语言,默认是Javasession指定JSP页面是否使用sessionisELIgnored指定是否执行EL表达式isScriptingEnabled确定脚本元素能否被使用

    例如

    <%@ page contentType="text/html;charset=UTF-8" language="java" import="java.util.*,java.time.*" %>
    Include指令:

    JSP可以通过include指令来包含其他文件。被包含的文件可以是JSP文件、HTML文件或文本文件。包含的文件就好像是该JSP文件的一部分,会被同时编译执行。Include指令的语法格式如下:

    <%@ include file="relative url" %> |

    | isELIgnored | 指定是否执行EL表达式 | | isScriptingEnabled | 确定脚本元素能否被使用 |

    例如

    <%@ page contentType="text/html;charset=UTF-8" language="java" import="java.util.*,java.time.*" %>
    Include指令:

    JSP可以通过include指令来包含其他文件。被包含的文件可以是JSP文件、HTML文件或文本文件。包含的文件就好像是该JSP文件的一部分,会被同时编译执行。Include指令的语法格式如下:

    <%@ include file="relative url" %>
    Processed: 0.009, SQL: 8