9.Java web—JSP内置对象
容器内置了9大对象,这些对象在jsp页无需实例化,可以直接使用。
分别为request、 response 、session、 application 、out、 pageContext 、config 、page、 exception
1)request对象
request封装了由客户端请求的http所有细节,包括HTTP头信息,系统信息,请求方式,请求参数
request.getParameter("参数name"); //获取请求的url参数。不存在此参数返回null,存在参数但没有值返回””。
在作用域管理属性:
当使用<jsp:forward>请求转发时,可为后面的页面传参数。
request.setAttribute(String name,Object obj);//当前页写入值
request.getAtrribute(String name);//目标页获取到值 ,值为Object,需要转换;有可能name不存在,最好需要判断一下
cookie读与取
java里面不能通过已知cookie名称直接获取其值,要循环所有cookies来判断方式获取
1 2 3 4 | //写入cooke,如果有中文,要使用URLEncoder.encode()编码 Cookie ck= new Cookie( "UserInfo" , URLEncoder.encode( "我是值" , "utf-8" )); ck.setMaxAge( 60 * 60 * 24 * 30 ); //有效期为30天 response.addCookie(ck); //给客户端写cookie |
取cookie
1 2 3 4 5 6 7 8 | String result= "" ; Cookie[] cks = request.getCookies(); if (cks != null ) { for (Cookie ck : cks) { //有中文要使用URLDecoder.decode()来解码 result+= "名称:" +ck.getName()+ " 值为:" + URLDecoder.decode(ck.getValue(), "utf-8" ); } } |
其他请求
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <body> <br />客户提交信息的方式equest.getMethod():<%=request.getMethod()%> <br />使用的协议request.getProtocol():<%=request.getProtocol()%> <br />获取发出请求字符串的客户端地址request.getRequestURI():<%=request.getRequestURI()%> <br />获取发出请求字符串的客户端地址request.getRequestURL():<%=request.getRequestURL()%> <br />获取提交数据的客户端IP地址request.getRemoteAddr():<%=request.getRemoteAddr()%> <br />获取服务器端口号request.getServerPort():<%=request.getServerPort()%> <br />获取服务器名称request.getServerName():<%=request.getServerName()%> <br />获取客户端主机名request.getRemoteHost():<%=request.getRemoteHost()%> <br />获取客户端所请求的脚本文件的文件路径request.getServletPath():<%=request.getServletPath()%> <br />获取Http协议定义的文件头信息HOST值request.getHeader( "host" ):<%=request.getHeader( "host" )%> <br />获取Http协议定义的文件头信息User-Agent值request.getHeader( "user-agent" ):<%=request.getHeader( "user-agent" )%> <br />获取Http协议定义的文件头信息accept-language值request.getHeader( "accept-language" ):<%=request.getHeader( "accept-language" )%> <br />获取请求文件的绝对路径request.getRealPath( "index.jsp" ):<%=request.getRealPath( "index.jsp" )%> </body> |
结果为:
客户提交信息的方式equest.getMethod():GET
使用的协议request.getProtocol():HTTP/1.1
获取发出请求字符串的客户端地址request.getRequestURI():/crm/index.jsp
获取发出请求字符串的客户端地址request.getRequestURL():http://localhost:8080/crm/index.jsp
获取提交数据的客户端IP地址request.getRemoteAddr():0:0:0:0:0:0:0:1
获取服务器端口号request.getServerPort():8080
获取服务器名称request.getServerName():localhost
获取客户端主机名request.getRemoteHost():0:0:0:0:0:0:0:1
获取客户端所请求的脚本文件的文件路径request.getServletPath():/index.jsp
获取Http协议定义的文件头信息HOST值request.getHeader("host"):localhost:8080
获取Http协议定义的文件头信息User-Agent值request.getHeader("user-agent"):Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36
获取Http协议定义的文件头信息accept-language值request.getHeader("accept-language"):zh-CN,zh;q=0.9
获取请求文件的绝对路径request.getRealPath("index.jsp"):E:\study\java\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\crm\index.jsp
获取客户的国际化信息:
1 2 3 4 | Locale locale=request.getLocale(); if (locale.equals(Locale.CHINA)){ //当前客户端环境为中文 } |
2)response对象
//跳转
response.sendRedirect("http://www.baidu.com");
//设置header
response.setHeader("cache-control", "no-store");
response.setDateHeader("Expires", 0);
response.setHeader("refresh", "5");
//设置缓冲区大小,8的倍数
response.setBufferSize(32);
//强制缓冲区内容输出到客户端
response.flushBuffer();
//获取缓冲区大小
response.getBufferSize();
//缓冲区内容是否已发送完成
response.isCommitted();
3)session对象
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | //设置session,值为object session.setAttribute( "name" , "guocheng" ); //获取session值,值为 object,要转换 session.getAttribute( "name" ); //获取session最近一次访问时间 session.getLastAccessedTime(); //移除某个session session.removeAttribute( "name" ); //获取超时时间 session.getMaxInactiveInterval(); //设置超时时间,秒为单位 session.setMaxInactiveInterval( 10 ); //销毁session,之后所有session操作都报错,谨慎用 session.invalidate(); |
4)application对象
应用的全局参数,在\WEB-INF\web.xml中的<context-param>标记中配置 。修改web.xml的内容需要重启应用才能生效
1 2 3 4 | <context-param> <param-name>name</param-name> <param-value>陈小东</param-value> </context-param> |
读取方法:
1 2 3 4 5 6 7 8 9 | //获取方式 application.getInitParameter( "已知名称" ); //列出所有参数名称 Enumeration es = application.getInitParameterNames(); while (es.hasMoreElements()) { String name = (String) es.nextElement(); String v = application.getInitParameter(name); out.print(name + ":" + v); } |
类似session,出可以程序运行中为application添加属性及值
1 2 | application.setAttribute( "gg" , "值" ); String s = (String) application.getAttribute( "gg" ); |
5)out对象
可以在页面输入内容,清空缓冲区等
out.clear();
6)pageContext对象
当前页面的上下文,仅为当前页面级别.
1 2 3 4 5 6 7 8 9 10 11 | //定向到本站其页面,而非外站 pageContext.forward( "p1.jsp" ); //同样可以为上下文内添加属性 pageContext.setAttribute( "name" , "234" ); pageContext.getAttribute( "name" ); pageContext.removeAttribute( "name" ); //与request对象一致 pageContext.getRequest(); pageContext.getResponse(); pageContext.getSession(); pageContext.getOut(); |
7)config对象
获取服务器的一些信息
1 2 3 4 5 6 7 | //servlet上下文 config.getServletContext(); //当前servlet名称 config.getServletName(); //等于jsp //web.xml全局参数 config.getInitParameter(name); config.getInitParameterNames(); |
8)page对象
page代表的就是jsp的本身,可以用this做别名。一个jsp页实质上就是一个servlet类。
page.getClass();//如等于org.apache.jsp.index_jsp
page.hashCode();
9)exception对象
当一个页使用使用<%@page errorPage=”error.jsp” %>,当本页报异常时会转向到error.jsp页
在error.jsp页可直接使用<%=exception.getMessage()%>显示错误信息
error.jsp要<%@page isErrorPage=”true”%>
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构