JEE_JSP3.JSP内置对象
JSP内置对象:Request,Response,Out,Session,Application,Cookie,Config,Page,Exception。
Request对象:
该对象封装了用户提交的信息,通过调用该对象相应的方法可以获取封装的信息,即使用该对象可以获取用户提交的信息。
1.获取访问请求参数:
request.getParameter("id");
当我们通过超链接的形式发送请求时,可以为该请求传递参数,只要在超链接的后面加上问号“?”来实现,如果有多个参数则用“&”分隔开。
request对象则可用于处理HTTP请求中的各项参数。
客户端表单提交后,后台才可以调用request.getParameter("id");,
但客户端提交时可以调用request.setAttribute(String name, Object object);??
<a href="delete.jsp?id="1">删除</a> <% request.getParameter("id"); %>
例:request对象获取请求参数
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<%@ page language="java" contentType="text/html; charset=GB18030" pageEncoding="GB18030"%> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=GB18030"> <title>使用request对象获取请求参数值</title> </head> <body> <a href="deal.jsp?id=1&user=">处理页</a> </body> </html>
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<%@ page language="java" contentType="text/html; charset=GB18030" pageEncoding="GB18030"%> <% String id=request.getParameter("id"); //获取id参数的值 String user=request.getParameter("user");//获取user参数的值 String pwd=request.getParameter("pwd");//获取pwd参数值 %> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=GB18030"> <title>处理页</title> </head> <body> id参数的值为:<%=id %><br> user参数的值为:<%=user %><br> pwd参数的值为:<%=pwd %> </body> </html>
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> <display-name>7.1</display-name> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> <welcome-file>default.html</welcome-file> <welcome-file>default.htm</welcome-file> <welcome-file>default.jsp</welcome-file> </welcome-file-list> </web-app>
2.获取表单提交的信息
|
复选框和多选列表框选定内容则是由getParameterValues(String name)方法获取。
3.解决中文乱码
//1. String user = new String(request.getParameter("user").getBytes("iso-8859-1"),"GB18030"); //2. <% request.setCharacterEncoding("GB18030"); %> String user = request.getParameter("username");
4.通过request对象进行数据传递
//1
request.setAttribute(String name, Object object);
//2
request.getAttribute(String name);
例:request的setAttribute()和getAttribute()方法
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<%@ page language="java" contentType="text/html; charset=GB18030" pageEncoding="GB18030"%> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=GB18030"> <title>Insert title here</title> </head> <body> <% try{//捕获异常信息 int money=100; int number=0; request.setAttribute("result",money/number);//保存执行结果 }catch(Exception e){ request.setAttribute("result","很抱歉,页面产生错误!");//保存错误提示信息 } %> <jsp:forward page="deal.jsp"/> </body> </html>
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<%@ page language="java" contentType="text/html; charset=GB18030" pageEncoding="GB18030"%> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=GB18030"> <title>结果页</title> </head> <body> <%String message=request.getAttribute("result").toString(); %> <%=message %> </body> </html>
5.获取客户端信息
例:使用request对象的相关方法获取客户端信息
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<%@ page language="java" contentType="text/html; charset=GB18030" pageEncoding="GB18030"%> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=GB18030"> <title>使用request对象的相关方法获取客户端信息</title> </head> <body> <br>客户提交信息的方式:<%=request.getMethod()%> <br>使用的协议:<%=request.getProtocol()%> <br>获取发出请求字符串的客户端地址:<%=request.getRequestURI()%> <br>获取发出请求字符串的客户端地址:<%=request.getRequestURL()%> <br>获取提交数据的客户端IP地址:<%=request.getRemoteAddr()%> <br>获取服务器端口号:<%=request.getServerPort()%> <br>获取服务器的名称:<%=request.getServerName()%> <br>获取客户端的主机名:<%=request.getRemoteHost()%> <br>获取客户端所请求的脚本文件的文件路径:<%=request.getServletPath()%> <br>获得Http协议定义的文件头信息Host的值:<%=request.getHeader("host")%> <br>获得Http协议定义的文件头信息User-Agent的值:<%=request.getHeader("user-agent")%> <br>获得Http协议定义的文件头信息accept-language的值:<%=request.getHeader("accept-language")%> <br>获得请求文件的绝对路径:<%=request.getRealPath("index.jsp")%> </body> </html>
6.获取cookie
cookie指小段的文本信息,在网络服务器上生成,并发送给浏览器。通过cookie可以标识用户身份,记录用户名和密码,跟踪重复用户等。
浏览器将cookie以键值对的方式保存到客户机的某个指定目录中。
通过cookie的getCookies()方法可以获得所有cookie对象的集合;通过cookie对象的getName()方法可以获取指定名称的cookie;
通过getValue()方法可以获取cookie对象的值.
例:通过cookie保存并读取用户登录信息
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<%@ page language="java" contentType="text/html; charset=GB18030" pageEncoding="GB18030"%> <%@ page import="java.net.URLDecoder" %> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=GB18030"> <title>通过cookie保存并读取用户登录信息</title> </head> <body> <% Cookie[] cookies = request.getCookies();//从request中获得Cookie对象的集合 String user = ""; //登录用户 String date = ""; //注册的时间 if (cookies != null) { for (int i = 0; i < cookies.length; i++) { //遍历cookie对象的集合 if (cookies[i].getName().equals("mrCookie")) {//如果cookie对象的名称为mrCookie user = URLDecoder.decode(cookies[i].getValue().split("#")[0]);//获取用户名 //sqlit()表示转换成数组 //在向cookie中保存的信息中,如果包括中文,则需要调用encode()方法将要保存到cookie中的信息进行编码;在读取cookie的内容时,还需要应用decode()方法进行解码。这样才可以想cookie中写入中文信息。 date = cookies[i].getValue().split("#")[1];//获取注册时间 } } } if ("".equals(user) && "".equals(date)) {//如果没有注册 %> 游客您好,欢迎您初次光临! <form action="deal.jsp" method="post"> 请输入姓名:<input name="user" type="text" value=""> <input type="submit" value="确定"> </form> <% } else {//已经注册 %> 欢迎[<b><%=user %></b>]再次光临<br> 您注册的时间是:<%=date %> <% } %> </body> </html>
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<%@ page language="java" contentType="text/html; charset=GB18030" pageEncoding="GB18030"%> <%@ page import="java.net.URLEncoder" %> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=GB18030"> <title>写入cookie</title> </head> <body> <% request.setCharacterEncoding("GB18030"); String user=URLEncoder.encode(request.getParameter("user"),"GB18030"); //获取用户名 Cookie cookie = new Cookie("mrCookie", user+"#"+new java.util.Date().toLocaleString()); cookie.setMaxAge(60*60*24*30); //设置cookie有效期30天 response.addCookie(cookie); //保存cookie %> <script type="text/javascript">window.location.href="index.jsp"</script> </body> </html>
7.显示国际化信息 request对象中的getLocale()和getLocales()方法。
response响应对象:
1.实现重定向页面
response.sendRedirect(“login.jsp”);
2.处理HTTP文件头
设置响应的内容类型:response.setContentType(String type); type可选值:text/html,application/msword等。
禁用缓存:<%response.setHeader("Cache-Control","no-store"); response.setDateHeader("Expires",0); %>
设置页面自动刷新:<% response.setHeader("refresh","10"); %>
定时跳转页面:<% response.setHeader("refresh","5;URL=login.jsp"); %>
3.设置输出缓冲
response.setBufferSize(32);
out输出对象:
1.向客户端输出数据
out.print();//输出数据
out.newLine();//输出一个换行符
2.管理相应缓冲区 out.flush();//输出缓冲区里的数据 out.close();//关闭输出流 out.clearBuffer();//清除缓冲区里的数据,并把数据输出到客户端 out.clear();//清除缓冲区里的数据,但不会把数据输出到客户端 out.getBufferSize();//获得缓冲区大小 out.getRemaining();//获得缓冲区中没有被占用的空间大小 out.isAutoFlush();//返回布尔值。如果AutoFlush为真 则返回真。
session会话对象:
session在网络中被称为会话,常用于记录用户状态.
由于HTTP协议是一种无状态协议,也就是当一个客户向服务器发出请求,服务器接收请求并返回响应后,该连接就结束了,服务器不保存相关信息.
通过session可以使用户在应用程序的Web页面间进行跳转,保存用户状态,使整个用户会话一直存在下去,直到浏览器关闭.
1.创建及获取客户的会话
session.setAttribute("username","无语") 设置指定名字的属性值并将其存储在session中。
session.getAttribute("username").toString() 获取与指定名字相联系的属性,返回的是Object类型,要转换成String类型.
2.从会话中移除指定对象
<% session.removeAttribute("username"); %>
3.设置session的有效时间
session.setMaxInactiveInterval(3600) ;
4.销毁session
session.invalidate();
例:应用session对象实现用户登录(session对象常用于记录用户的状态)
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<%@ page language="java" contentType="text/html; charset=GB18030" pageEncoding="GB18030"%> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=GB18030"> <title>应用session对象实现用户登录</title> </head> <body> <form name="form1" method="post" action="deal.jsp"> 用户名: <input name="username" type="text" id="name" style="width: 120px"><br> 密 码: <input name="pwd" type="password" id="pwd" style="width: 120px"> <br> <br> <input type="submit" name="Submit" value="登录"> </form> </body> </html>
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<%@ page language="java" contentType="text/html; charset=GB18030" pageEncoding="GB18030"%> <%@ page import="java.util.*" %> <% String[][] userList={{"mr","mrsoft"},{"wgh","111"},{"sk","111"}}; //定义一个保存用户列表的二维组 boolean flag=false; //登录状态 request.setCharacterEncoding("GB18030"); //设置编码 String username=request.getParameter("username"); //获取用户名 String pwd=request.getParameter("pwd"); //获取密码 for(int i=0;i<userList.length;i++){ //遍历二维数组 if(userList[i][0].equals(username)){ //判断用户名 if(userList[i][1].equals(pwd)){ //判断密码 flag=true; //表示登录成功 break;//跳出for循环 } } } if(flag){ //如果值为true,表示登录成功 session.setAttribute("username",username);//保存用户名到session范围的变量中 response.sendRedirect("main.jsp"); //跳转到主页 }else{ response.sendRedirect("index.jsp"); //跳转到用户登录页面 } %>
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<%@ page language="java" contentType="text/html; charset=GB18030" pageEncoding="GB18030"%> <% String username=(String)session.getAttribute("username"); //获取保存在session范围内的用户名 %> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=GB18030"> <title>系统主页</title> </head> <body> 您好![<%=username %>]欢迎您访问!<br> <a href="exit.jsp">[退出]</a> </body> </html>
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<%@ page language="java" contentType="text/html; charset=GB18030" pageEncoding="GB18030"%> <% session.invalidate();//销毁session response.sendRedirect("index.jsp");//重定向页面到index.jsp %>
application应用对象:
application对象常用于保存所有应用程序中的共有数据.它在服务器启动时自动创建,在服务器停止时销毁,生命周期比session长.
1.访问应用程序初始化参数(应用程序初始化参数在web.xml文件中设置)
application.getInitParameter("url") 返回由指定名字的application对象的某个属性的初始值
application.getInitParameterNames();返回所有已定义的应用程序初始化参数名的枚举Enumeration
2.应用程序环境属性管理
<% application.setAttribute("number",0); %>
<% application.getAttribute("number"); %>
<% application.removeAttribute("number"); %>
例:应用application对象实现网页计数器
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<%@ page language="java" contentType="text/html; charset=GB18030" pageEncoding="GB18030"%> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=GB18030"> <title>应用application对象实现网页计数器</title> </head> <body> <% int number=0; //定义一个保存访问次数的变量 if(application.getAttribute("number")==null){//当用户第一次访问时 number=1; }else{ number=Integer.parseInt(application.getAttribute("number").toString());//获取application范围内的变量,并转换为int型 number=number+1;//让访问次数加1 } out.print("您是第"+number+"位访问者!");//输出当前访问次数 application.setAttribute("number",number); //将新的访问次数保存到application范围内的属性中 %> </body> </html>
page应答与请求对象:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<%@ page language="java" contentType="text/html; charset=GB18030" pageEncoding="GB18030"%> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=GB18030"> <title>page对象各方法的应用</title> </head> <body> <%! Object object; //声明一个Object型的变量 %> <ul> <li>getClass()方法的返回值:<%=page.getClass()%></li> <li>hashCode()方法的返回值:<%=page.hashCode()%></li> <li>toString()方法的返回值:<%=page.toString()%></li> <li>与Object对象比较的返回值:<%=page.equals(object)%></li> <li>与this对象比较的返回值:<%=page.equals(this)%></li> </ul> </body> </html>
pageContext获取页面上下文对象:
pageContext对象常用方法:
forward(String UriPath) 重定向 getAttribute(String name,[int scope] ) scope可选。用来检索一个特定的已经 命名的对象的范围,并且还可以通过调用 getAttributeNamesInScope()方法 ,检索对鞭个特定范围的每个属性String字符串名称的枚举。 getException()返回当前的exception对象 getRequest()返回当前的request对象 getResponse()返回当前的response对象 getServletConfig()返回当前页面的ServletConfig对象 getServletContext()返回ServletContext对象。这个对象对所有页面都是共享的 getSession() 返回当前的session对象 findAttribute() 可以用来按照页面,请求,会话以及应用程序范围顺序实现对某个已经命名的属性的搜索。 setAttribute() 可以用来设置默认页面范围或特定范围之中的已命名对象。removeAttribute()可以用来删除默认范围或特定范围内的已命名对象
web.xml中的config获取配置信息对象:
getServletContext() 返回执行者的Servlet上下文 getServletName()返回Servlet的名字 getInitParameter(String name) 返回名字为name的初始参数的值 getInitParameterNames() 返回这个JSP的所有的初始参数的名字
exception获取异常信息对象:
getMessage()
getLocalizedmessage()
toString()
fillInStackTrace()
==============================================
参考推荐: http://www.cnblogs.com/eflylab/archive/2007/01/16/621275.html
http://www.cnblogs.com/kelin1314/archive/2011/03/03/1969578.html