标签:
1. JSP内置对象分类
(1)application:javax.servlet.ServletContext的实例,该实例代表JSP所属的WEB应用本身,可用于JSP页面,或者Servlet之间交换信息。常用的方法有getAttribute(String attName), setAttribute(String attName,String attValue)和getInitParameter(String Param)等。
(2)config:javax.servlet.ServletConfig的实例,该实例代表JSP的配置信息,常用的方法有getInitparameter(String paramName)及getInitParametername()等方法。事实上,JSP页面通常无需配置,也就不存在配置信息。因此该对象更多地在Servlet中有效。
(3)exception:java.lang.Throwable的实例,该实例代表其他页面中的错误和异常。只有当页面时错误处理页面,即编译指令的isErrorPage属性是true,该对象才可以使用。常用的方法有getMessage()和printStackTrace()等。
(4)out:javax.servlet.jsp.JspWriter的实例,该实例代表Jsp页面输出流,用于输出内容,形成HTML页面。
(5)page:代表页面本身,通常没有太大的用处,也就有是Servlet中的this,其类型就是生成Servlet。
(6)pageContext:javax.servlet.jsp.PageContext的实例,该实例代表JSP页面的上下文,使用该实例可以访问页面中的共享数据。常用的方法getServletContext()和getSevletConfig()等。
(7)request:javax.servlet.http.HttpServletRequest的实例,该对象封装了一次请求,客户端的请求都被封装在该对象里。这是一个常用的对象,获取客户端请求参数必须使用该对象。常用的方法有:getParameter(String paramName),getParamValues(String paramName),setAttribute(String attributeName,String attributeValue),getAttribute(String attributeName)和setCharacterEncoding(String env)等。
(8)response:javax.servlet.http.HttpServletResponse的实例,代表服务器对于客户端的响应。通常,很少使用该对象直接响应,输出响应对象使用out对象,而response对象常用于重定向。常用的对象有sendRedirect(java.lang.String location)等。
(9)session:javax.servlet.http.HttpServlet的实例,该对象代表一次会话。从客户端浏览器和站点建立连接起,开始会话,直到关闭浏览器结束会话。常用的方法有getAttribute(String attName),setAttribute(String attName,String attValue)等
可以将上面这9个对象分成如下4类
1. 与Servlet有关的内置对象:page、config
2. 与Input/Output有关的内置对象:out、request、response
3. 与Context有关的对象:session、application、pagecontext
4. 与Error有关的内置对象:exception
2. 属性保存范围
在jsp中可以通过setAttribute()和getAttribure()这两个方法来设置和取得属性,从而实现数据共享。
JSP中提供了4种属性保存范围,分别为page、request、session、application
2.1 page范围
指的是设置的属性只在当前页面有效。通过pageContext的setAttribute()方法设置属性,getAttribute()方法取得属性。
<%@ page language="java" import="java.util.*" pageEncoding="GB2312"%> <html> <head> <title>范围</title> </head> <body> <%--在page范围设置属性 --%> <% //设置属性name,其值为James pageContext.setAttribute("name", "James"); %> <%--取得name属性 --%> <% String strName = (String)pageContext.getAttribute("name"); out.println("page范围:name属性为"+strName); %> </body> </html>
页面效果:
page范围:name属性为James
2.2 request范围
所谓request范围,就是指属性在一次请求范围内有效。如果页面从一个页面跳转到另一个页面,那么属性失效。这里的跳转指客户端调转,因此使用<jsp:forward>则该属性仍然有效。
可以通过request的setAttribute()方法设置属性,通过request的getAttribute()方法取得属性。
index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="GB2312"%> <html> <head> <title>request范围</title> </head> <body> <%--在request范围设置属性 --%> <% //设置属性name,其值为James request.setAttribute("name", "James"); %> <%--取得name属性 --%> <% String strName = (String) request.getAttribute("name"); out.println("request范围:name属性为" + strName); %> </br> <a href="RequestScopeDemo2.jsp">跳转到RequestScopeDemo2.jsp</a> </body> </html>
RequestScopeDemo2.jsp
<%@ page language="java" import="java.util.*" pageEncoding="GB2312"%> <html> <head> <title>范围</title> </head> <body> <%--取得request范围属性 --%> <% String strName = (String) request.getAttribute("name"); out.println("request范围:name属性为" + strName); %> </body> </html>
页面结果:
index.jsp
request范围:name属性为James
跳转到RequestScopeDemo2.jsp
RequestScopeDemo2.jsp
request范围:name属性为null
可见,使用客户端跳转不能的到request范围的属性。
如果使用forward进行跳转,修改index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="GB2312"%> <html> <head> <title>request范围</title> </head> <body> <%--在request范围设置属性 --%> <% //设置属性name,其值为James request.setAttribute("name", "James"); %> <!-- 使用forward动作指令执行跳转 --> <jsp:forward page="RequestScopeDemo2.jsp"></jsp:forward> </body> </html>
页面结果:
request范围:name属性为James
2.3 session范围
客户端浏览器与服务器一次会话范围内,如果和服务器断开连接,那么这个属性失效。(例如把浏览器关闭)
index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="GB2312"%> <html> <head> <title>范围</title> </head> <body> <%--在session范围设置属性 --%> <% //设置属性name,其值为James session.setAttribute("name", "James"); %> <%--取得name属性 --%> <% String strName = (String) session.getAttribute("name"); out.println("session范围:name属性为" + strName);%> </br> <!-- 使用链接执行跳转(客户端跳转) --> <a href="SessionScopeDemo2.jsp">跳转到SessionScopeDemo2.jsp</a> </body> </html>
SessionScopeDemo2.jsp
<%@ page language="java" import="java.util.*" pageEncoding="GB2312"%> <html> <head> <title>范围</title> </head> <body> <%--取得request范围属性 --%> <% String strName = (String) session.getAttribute("name"); out.println("request范围:name属性为" + strName); %> </body> </html>
运行结果:
index.jsp
session范围:name属性为James
跳转到SessionScopeDemo2.jsp
SessionScopeDemo2.jsp
request范围:name属性为James
如果先关闭浏览器,然后直接输入http://localhost:8088/JSPTest/SessionScopeDemo2.jsp
那么
request范围:name属性为null
2.4 application范围
指整个服务器范围,直到服务器停止后才会消失。
方法和上面的都类似
3. request对象
除了可以设置和取得request范围变量,还可以用来获得客户端请求参数、请求的来源、表头、cookie
3.1 获得客户端请求参数
方法 | 返回值 | 方法说明 |
getParameter(String paramName) | String | 获得参数名为name的参数值 |
getParameterNames() | Enumeration | 获得所有参数的名称 |
getParamValues(String paramName) | String[] | 获得名为name的所有参数 |
getParameterMap() | Map | 获得所有参数封装的Map实例 |
例3.1:获取表单中的参数
index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="GB2312"%> <html> <head> <title>表单</title> </head> <body> <form action = "RequestDemo.jsp" method = "post"> 用户名:<input type="text" name="username"/> <input type="submit" value="提交"/> </form> </body> </html>
RequestDemo.jsp
<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%> <html> <head> <title>使用request对象接收参数</title> </head> <body> <%-- 通过request对象的getParameter接收参数 --%> <% request.setCharacterEncoding("gb2312"); String username = request.getParameter("username"); out.println("用户名:"+username); %> </body> </html>
效果:
index.jsp
标签:
原文地址:http://www.cnblogs.com/gnivor/p/4616367.html