jsp是运行在服务端的程序
JSP有九个内置对象(又叫隐含对象),不需要预先声明就可以在脚本代码和表达式中随意使用
JSP九大内置对象分为四类:
- 输入输出对象:out对象、response对象、request对象
- 通信控制对象:pageContext对象、session对象、application对象
- Servlet对象:page对象、config对象
- 错误处理对象:exception对象
jsp四大作用域:
page范围:只在一个页面保留数据(javax.servlet.jsp.PageContext(抽象类))request范围:只在一个请求中保存数据(javax.servlet.httpServletRequest)
Session范围:在一次会话中保存数据,仅供单个用户使用(javax.servlet.http.HttpSession)
Application范围:在整个服务器中保存数据,全部用户共享(javax.servlet.ServletContext)
九种对象简介:
- out对象:用于向客户端、浏览器输出数据。
- request对象:封装了来自客户端、浏览器的各种信息。
- response对象:封装了服务器的响应信息。
- exception对象:封装了jsp程序执行过程中发生的异常和错误信息。
- config对象:封装了应用程序的配置信息。
- page对象:指向了当前jsp程序本身。
- session对象:用来保存会话信息。也就是说,可以实现在同一用户的不同请求之间共享数
- application对象:代表了当前应用程序的上下文。可以在不同的用户之间共享信息。
- pageContext对象:提供了对jsp页面所有对象以及命名空间的访问。
1.page对象
page对象有点类似与java编程中的this指针,他指向了当前jsp页面本身。
page对象是java.lang.object类的一个实例
page对象拥有一个toString方法,下面是官方定义的方法介绍:
1. public String toString() {
2. return getClass().getName() + "@" + Integer.toHexString(hashCode());
3. }
4. 包名+类名+@+hashcode值
page对象的方法:
方法名
说明
toString
将当前项目的信息打印出来
getClass
返回当前的object类
hashCode
返回page对象的hashCode值
equals
用于比较对象是否与当前对象相同
2.request对象
request对象封装了从客户端到服务器发出的请求信息。
request对象方法介绍:
方法名
说明
isUserInRole
判断认证后的用户是否属于某一成员组
getAttribute
获取指定属性的值,如该属性值不存在返回Null
getAttributeNames
获取所有属性名的集合
getCookies
获取所有Cookie对象
getCharacterEncoding
获取请求的字符编码方式
getContentLength
返回请求正文的长度,如不确定返回-1
getHeader
获取指定名字报头值
getHeaders
获取指定名字报头的所有值,一个枚举
getHeaderNames
获取所有报头的名字,一个枚举
getInputStream
返回请求输入流,获取请求中的数据
getMethod
获取客户端向服务器端传送数据的方法
getParameter
获取指定名字参数值
getParameterNames
获取所有参数的名字,一个枚举
getParameterValues
获取指定名字参数的所有值
getProtocol
获取客户端向服务器端传送数据的协议名称
getQueryString
获取以get方法向服务器传送的查询字符串
getRequestURI
获取发出请求字符串的客户端地址
getRemoteAddr
获取客户端的IP地址
getRemoteHost
获取客户端的名字
getSession
获取和请求相关的会话
getServerName
获取服务器的名字
getServerPath
获取客户端请求文件的路径
getServerPort
获取服务器的端口号
removeAttribute
删除请求中的一个属性
setAttribute
设置指定名字参数值
request对象演示:
完成一个简单的用户注册信息界面,将注册信息发送到欢迎界面上。
用户注册界面表单设置:
1. <form action="do_register.jsp" method="post">
2. 用户名:
3. <input type="text" name="userName"><br>
4. 技能:
5. <input type="checkbox" name="skills" value="java">java
6. <input type="checkbox" name="skills" value="python">python
7. <input type="checkbox" name="skills" value="ruby">ruby
8. <input type="checkbox" name="skills" value="golang">golang
9. <br>
10. <input type="submit" value="提交">
11. <input type="reset" value="重置">
12. </form>
用户注册信息处理界面使用getParameter方法将用户的表单信息提取出来
1. String name=request.getParameter("userName");
2. String[] skillArr=request.getParameterValues("skills");
将skillArr数组转换成字符串:
1. String skills="";
2. if (skillArr!=null&&skillArr.length>0){
3. for (String skill:skillArr
4. ) {
5. skills=skills+skill+" ";
6. }
7. }
将数据使用setAttribute保存起来
1. request.setAttribute("userName",name);
2. request.setAttribute("skills",skills);
使用jsp的forword指令将页面跳转到welcome.jsp
<jsp:forward page="welcome.jsp"></jsp:forward>
setAttribute和getAttribute用于在web组件之间共享信息
getparameter方法用于接收服务器通过set和post方法传输的数据
注意没有setparameter方法
welcome.jsp页面配置:
1. <html>
2. <head>
3. <title>技能展示界面</title>
4. </head>
5. <body>
6. 信息展示界面:<br><br>
7. <%--<%=%>这是表达式<%%>这是jsp程序处理--%>
8. 姓名:<%=request.getAttribute("userName")%><br>
9. 技能:<%=request.getAttribute("skills")%>
10. </body>
11. </html>
3.session对象
session对象:是一个jsp内置对象,它在第一个jsp被装载时自动创建,完成会话期管理。从一个客户打开浏览器并连接到服务器开始,到客户关闭浏览器离 开这个服务器结束(或者超时),被称为一个会话。当一个客户访问一个服务器时,可能会在这个服务器的几个页面之间切换,服务器应当通过某种办法知道这是一个客户,就需要创建session对象。
http是无状态的连接协议,需要使用session来存放用户每次的登陆信息
session对象方法:
方法名
说明
getAttribute
获取指定名字的属性
getAttributeNames
获取session中全部属性名字,一个枚举
getCreationTime
返回session的创建时间
getId
获取会话标识符
getLastAccessedTime
返回最后发送请求的时间
getMaxInactiveInterval
返回session对象的生存时间单位千分之一秒
invalidate
销毁session对象
isNew
每个请求是否会产生新的session对象
removeAttribute
删除指定名字的属性
setAttribute
设定指定名字的属性值
接下来通过一个登陆的小例子来演示下session对象的应用:
登陆表单设置:
1. <form action="do_login.jsp" method="post">
2. userName:<input type="text" name="userName"><br/>
3. password:<input type="password" name="password"><br/>
4. <input type="submit" value="submit">
5. <input type="reset" value="reset">
6. </form>
登陆逻辑处理界面,使用getParameter获取到用户名和密码:
1. String userName=request.getParameter("userName");
2. String password=request.getParameter("password");
对用户名和密码进行判断:
1. if (userName!=null&&password!=null){
2. session.setAttribute("userName",userName);
3. response.setHeader("refresh","2;URL=welcome.jsp");
4. }
在欢迎界面使用getAttribute获取当前的用户名:
1. <%if(session.getAttribute("userName")!=null){%>
2. <%--getAttribute方法是使用指定的key获取session中的value值。获取到的是一个object对象
3. 在使用的时候需要根据具体的类型进行类型转换。
4. 这里取出的是一个字符串,直接调用会使用他的toString方法,因此不用进行转换--%>
5. 欢迎 <%=session.getAttribute("userName")%>
6. <a href="logout.jsp">注销</a>
7. <%}else{%>
8. 请先登陆
9. <a href="login.jsp">登陆</a>
10. <%}%>
判断session对象是否是新创建
1. <%if (session.isNew()){%>
3. <br/>
4. <br/>
5. 欢迎新用户
6. <%}else{%>
7. <br/>
8. <br/>
9. 欢迎老用户
10. <%}%>
在登出界面里清除session对象信息,并跳转到欢迎界面中去:
1. session.invalidate();//清除掉session对象
2. response.setHeader("refresh","2;URL=welcome.jsp");
4.application对象
application对象代表当前的应用程序。存在于服务器的内存空间中。
应用一旦启动便会自动生成一个application对象。如果应用没有被关闭,
此application对象便一直会存在。直到应用被关闭
application的生命周期比session更长。
应用:
为多个用户共享全局信息。比如当前的在线人数等。
application对象方法:
方法名
说明
getAttribute
获取应用对象中指定名字的属性值
getAttributeNames
获取应用对象中所有属性的名字,一个枚举
getInitParameter
返回应用对象中指定名字的初始参数值
getServletInfo
返回Servlet编译器中当前版本信息
setAttribute
设置应用对象中指定名字的属性值
可以使用application对象来实现页面访问次数记录的功能:
1. <%
2. Object obj=application.getAttribute("counter");
3. if (obj==null){
4. application.setAttribute("counter",new Integer(1));
5. out.println("该页面被访问了1次<br/>");
6. }else {
7. int countValue=new Integer(obj.toString());
8. countValue++;
9. out.println("该页面被访问了"+countValue+"次<br/>");
10. application.setAttribute("counter",countValue);//java会自动装箱
12. }
13. %>
5.out对象
out对象是一个输出流,用来向浏览器输出信息,除了输出各种信息外还负责对缓冲区进行管理。
out对象方法介绍:
方法名
说明
print或println
输出数据
newLine
输出换行字符
flush
输出缓冲区数据
close
关闭输出流
clear
清除缓冲区中数据,但不输出到客户端
clearBuffer
清除缓冲区中数据,输出到客户端
getBufferSize
获得缓冲区大小
getRemaining
获得缓冲区中没有被占用的空间
isAutoFlush
是否为自动输出
6.response对象
response对象主要用于对客户端的请求进行回应。
以及处理http的连接信息,例如设置http文件头,设置cookie对象等。
response对象方法:
方法名
说明
addCookie
添加一个Cookie对象
addHeader
添加Http文件指定名字头信息
containsHeader
判断指定名字Http文件头信息是否存在
encodeURL
使用sessionid封装URL
flushBuffer
强制把当前缓冲区内容发送到客户端
getBufferSize
返回缓冲区大小
getOutputStream
返回到客户端的输出流对象
sendError
向客户端发送错误信息
sendRedirect
把响应发送到另一个位置进行处理
setContentType
设置响应的MIME类型
setHeader
设置指定名字的Http文件头信息
7.pageContext对象
pageContetx对象是jsp页面中所有对象功能的最大集成着。
使用他可以访问所有的jsp内置对象。
pageContext对象方法:
方法名
说明
forward
重定向到另一页面或Servlet组件
getAttribute
获取某范围中指定名字的属性值
findAttribute
按范围搜索指定名字的属性
removeAttribute
删除某范围中指定名字的属性
setAttribute
设定某范围中指定名字的属性值
getException
返回当前异常对象
getRequest
返回当前请求对象
getResponse
返回当前响应对象
getServletConfig
返回当前页面的ServletConfig对象
getServletContext
返回所有页面共享的ServletContext对象
getSession
返回当前页面的会话对象
8.exception对象
exception对象表示jsp引擎在执行代码时抛出的异常
如果想要使用exception对象,那么需要配置编译指令的isErrorPage属性为true
即在页面指令中设置:<%@page isErrorPage=“true”%>
9.config对象
config对象表示当前jsp程序的配置信息,获取服务器的配置信息
一般项目中,jsp被用作模版技术,也就是位于表示层
而位于表示层的jsp文件一般是不需要配置信息的
所以此对象在jsp程序中其实很少使用
config对象是servletConfig类的一个实例。
config对象方法:
方法名
说明
getServletContext
返回所执行的Servlet的环境对象
getServletName
返回所执行的Servlet的名字
getInitParameter
返回指定名字的初始参数值
getInitParameterNames
返回该JSP中所有的初始参数名,一个枚举
jsp内置对象总结:
Jsp内置对象
功能
主要方法
out
向客户端输出数据
print() println() flush() clear() isAutoFlush() getBufferSize() close() …………
request
向客户端请求数据
getAttributeNames() getCookies() getParameter() getParameterValues() setAttribute() getServletPath() …………..
response
封装了jsp产生的响应,然后被发送到客户端以响应客户的请求
addCookie() sendRedirect() setContentType()
flushBuffer() getBufferSize() getOutputStream()
sendError() containsHeader()……………
application
config
表示Servlet的配置,当一个Servlet初始化时,容器把某些信息通过此对象传递给这个Servlet
getServletContext() getServletName() getInitParameter() getInitParameterNames()……………
page
Jsp实现类的实例,它是jsp本身,通过这个可以对它进行访问
flush()………
pagecontext
为JSP页面包装页面的上下文。管理对属于JSP中特殊可见部分中己经命名对象的该问
forward() getAttribute() getException() getRequest() getResponse() getServletConfig()
getSession() getServletContext() setAttribute()
removeAttribute() findAttribute() ……………
session
用来保存每个用户的信息,以便跟踪每个用户的操作状态
getAttribute() getId() getAttributeNames() getCreateTime() getMaxInactiveInterval()
invalidate() isNew()
exception
反映运行的异常
getMessage()…………
练习:编写一个jsp程序,实现用户登录,当用户输入密码错误时,将页面重定向到错误提示 页,并在该页
面显示30秒后,自动返回用户登录页面
1.登录界面index.jsp
1. <form name="form1" method="post" action="deal.jsp">
2. 用 户 名: <input name="userName" type="text" value="userName"> <br>
3. 密 码: <input name="pwd" type="password" value="pwd"><br>
4. <input type="submit" name="Submit" value="登录">
5. <input name="Reset" type="reset" id="Reset" value="重置">
6. </form>
2.判断密码,用户名界面deal.jsp
<%
request.setCharacterEncoding("GB18030");
String userName=request.getParameter("userName");
String pwd=request.getParameter("pwd");
if("mr".equals(userName)&&"mrsoft".equals(pwd)){//设定数据库密码用户名
out.println("<script language='javascript'>alert('登录成功');window.location.href='index.jsp';</script>");
}else{
response.sendRedirect("error.jsp");//重定向
}
%>
3.错误页面error.jsp
1. <%
2. response.setHeader("refresh", "5;URL=index.jsp");//重定向页面
3. %>
4. 您输入的用户名或密码错误,请重新登录!
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。