JSP内置对象(下)

1.什么是session

  • session表示客户端与服务器的一次会话
  • Web中的session指的是用户在浏览某个网站时,从进入网站到浏览器关闭所经过的这段时间,也就是用户浏览这个网站所花费的时间
  • 从上述定义中可以看到,session实际上是一个特定的时间概念
  • 在服务器的内存当中保存着不同用户的session,每个用户对应一个session
    这里写图片描述

2.session对象

  • session对象是一个JSP的内置对象
  • session对象在第一个JSP页面被装载时自动创建,完成客户端与服务器的会话期管理
  • 从一个客户打开浏览器并连接到服务器开始,到客户关闭浏览器离开这个服务期结束,被称为一个会话
  • 当一个客户访问一个服务器时,可能会在服务器的几个页面之间切换,服务器应当通过某种办法知道这是一个客户,就需要session对象
  • session对象是HttpSession类的实例
方法作用
long getCreationTime()返回session创建时间,单位是long类,是一个毫秒数字
public String getId()返回session创建时jsp引擎为它设的唯一ID号
public Object setAttribute(String name,Object value)按照键值对的方式保存一个属性,这个属性是一个对象类型,使用指定名称将对象绑定到session
public Object getAttribute(String name)返回与此session中指定名称绑定在一起的对象,如果没有,则返回null
String[] getValueNames()返回一个包含此session中所有可用属性的数组
int getMaxInactiveInterval()返回两次请求间隔多场时间此session被取消(单位秒)
void setMaxInactiveInterval(int)设置两次请求间隔时间,在浏览器上什么都不做也会被算入时间,超出时间后,session会过期
<%@ page language="java" import="java.util.*,java.text.*" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<h1>session对象</h1>
<% 
    session.setMaxInactiveInterval(10);
    SimpleDateFormat sdf=new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss"); //格式化时间
    Date d=new Date(session.getCreationTime());
    session.setAttribute("username","admin");
    session.setAttribute("password","123456");
    session.setAttribute("aihao","read");

%>
session创建时间:<%=sdf.format(d)%><br>
session唯一的ID编号:<%=session.getId() %><br>
获取session中的用户名属性:<%=session.getAttribute("username") %>
<a href="session2.jsp" target="_blank">超链接连接到另一个地址,来测试session是否变更,属性是否保存还能得到</a>
</body>
</html>
<body>
<h1>session对象</h1>

session唯一的ID编号:<%=session.getId() %><br>
获取session中的用户名属性:<%=session.getAttribute("username") %>
session保存的属性有:<%
String[] shuxing=session.getValueNames();
for(int i=0;i<shuxing.length;i++){
    out.println(shuxing[i]+"&nbsp;&nbsp;");
}

%>
</body>

3.session的生命周期

大体是以下这个过程
创建:
当客户端第一次访问某个jsp或者Servlet时候,服务器会为当前会话创建一个SessionId,每次客户端向服务端发送请求时,都会将此SessionId携带过去,服务端会对此SessionId进行校验。
活动:
通过超链接打开的新页面属于同一次会话。
只要当前会话页面没有全部关闭,重新打开新的浏览器窗口访问同一个项目资源时属于同一次会话。
除非本次会话的所以页面都关闭后在重新访问某个Jsp或者Servlet将会创建新的会话。
注意事项:注意原有会话还存在,只是这个旧的SessionId仍然存在于服务端,只不过再也没有客户端会携带它交予服务端校验。除非它超时才会结束。
销毁
Session的销毁只有三种方式
1、调用了session.invalidate()方法
2、Session过期(超时)
Tomcat默认Session超时时间为30分钟;
超时设置有两种方式:
①session.setMaxInactiveInterval(时间)//单位是秒
②在web.xml下配置(所在项目web-INF中的web.xml配置)

10 //单位是分钟

3、服务器重新启动

这里要说明下这期间遇到的一些小问题:

  • 用Eclipse打开项目之后,连接local:8080后面的内部jsp,是可以打开的,但是直接用网页访问local:8080却失效了,无法访问,关闭后用tomcat自己启动是可以访问的。这里百度了一下,是eclipse造成的,我们可以修改配置来实现通过eclipse启动tomcat可以访问http://localhost:8080
    打开Server试图,双击其中的”Tomcat v6.0 Server at localhost”
    这里写图片描述

  • 此时又遇到一个问题,当打开设置时发现是灰色的,还需要另外的操作
    选择window —-show view---services可以看到服务的面板
    双击tomcat进入配置界面Service Locations(Specify the server path (i.e. catalina.base) and deploy path. Server must be published with no modules present to make changes.)选项变灰色无法更改配置。
    若要更改,则先把tomcat下的所有項目移除。并右击,clean…之后方可设置。。。启动后将又变为黑色。
    默认选项为:
    Use workspace metadata(dose not modify Tomcat installation)
    修改选项为:
    Use Tomcat installation(takes control of Tomcat installation)
    这样在Eclipse启动了tomcat服务器,我們也能夠访问到tomcat本地管理首页。
    否则只能在DOS下使用Tomcat的启动命令才能访问Tomcat本地管理首页。

  • 关于配置tomcat管理员的用户密码,在conf包下tomcatuser.xml文件中添加<role rolename="manager-gui"/>
    <user username="manager" password="manager" roles="manager-gui"/>
    ,这里需要注意的是权限问题,需要设置一下文件包的读写与修改。在这里最后我直接打开tomcat是可以登陆的,但是用Eclipse打开它又会恢复成之前的文件,没有我填入的账户信息,暂时不知道怎么解决。

4.application对象

  • application对象实现了用户间的数据共享,可存放全局变量。
  • application开始于服务器的启动,终止于服务器的关闭。
  • 在用户的前后连接或不同用户之间的连接中,可以对application对象的同一属性进行操作。
  • 在任何地方对application对象属性的操作,都将影响到其他用户对此的访问。
  • 服务器的启动和关闭决定了application对象的生命
  • application对象是ServletContext类的实例。

application对象的方法

方法作用
public void setAttribute(String name,Object value)使用指定名称将对象绑定到此会话,保存某个属性
public Object getAttribute(String name)返回与此会话中的指定名称绑定在一起的对象,如果没有绑定在该名称下,则返回null。获取指定名称的属性。
Enumeration getAttributeNames()返回所有可用属性名的枚举
String getServerInfo()返回JSP(Servlet)引擎及版本号
<h1>application对象</h1>
<%
    application.setAttribute("city", "北京");
    application.setAttribute("postcode","10000");
    application.setAttribute("email","xuejiangbo@qq.com");
%>
所在的城市是:<%=application.getAttribute("city")%><br>
application中的属性有:<%
    Enumeration attributes=application.getAttributeNames();//枚举
    while(attributes.hasMoreElements()){//有下一个属性则输出
        out.println(attributes.nextElement()+"&nbsp;&nbsp;");
    }
%><br>
JSP引擎名与版本号:<%=application.getServerInfo()%>


</body>

5.page对象

page对象就是指向当前JSP页面本身,有点像类中的this指针,是java.lang.Object类的实例。方法也与object一样

方法作用
class getClass()返回此Object的类
int hashCode()返回此Obejct的hash码
boolean equals(Object object)判断此object是否与指定的object相等
void copy(object obj)把此object拷贝到指定的object对象中
Object clone()克隆此object对象
String toString()把此Object对象转换成String类的对象
void notify()唤醒一个等待的线程
void notifyAll()唤醒所有等待的线程
void wait(int timeout)使一个线程处于等待直到timeout结束或被唤醒
void wait()使一个线程处于等待

当前page页面的字符串描述:<%=page.toString() %>
当前page页面的字符串描述:org.apache.jsp.application_jsp@b9e976b,基本上是路径加上哈希码

6.pagecontext对象和config对象

pageContext对象

  • pageContext对象提供了对JSP页面内所有的对象及名字空间的访问
  • pageContext对象可以访问到本页所在的session,也可以取本页面所在的application的某一属性值
  • pageContext对象相当于页面中所有功能的集大成者
  • pageContext对象的本类名也叫pageContext

常用方法如下:

方法作用
JspWriter getOut()返回当前客户端响应被使用的JspWriter流(out)
HttpSession getSession()返回当前页中的HttpSession对象(session)
Object getPage()返回当前页的Object对象(page)
ServletRequest getRequest()返回当前页的ServletRequest对象(request)
ServletResponse getResponse()返回当前页的ServletResponse对象(response)
void setAttribute(String name,Object attribute)设置属性及属性值
Object getAttribute(String name,int scope)在指定范围内取属性的值
int getAttributeScope(String name)返回某属性的作用范围
void forward(String relativeUrlPath)使当前页面重导到另一页面
void include(String relativeUrlPath)在当前位置包含另一文件
用户名是:<%=pageContext.getSession().getAttribute("username") %><br>

包含另一个文件:<% 
//跳转到另一个网址:<% pageContext.forward("session2.jsp");
pageContext.include("session1.jsp"); %>

Config对象
config对象是在一个Servlet初始化时,JSP引擎向它传递信息用的,此信息包括Servlet初始化时所要用到的参数(通过属性名和属性值构成)以及服务器的有关信息(通过传递一个ServletContext对象),config对象常用方法如下:

方法作用
ServletContext getServletContext()返回含有服务器相关信息的ServletContext对象
String getInitParameter(String name)返回初始化参数的值
Enumeration getInitParameterNames()返回Servlet初始化所需所有参数的枚举

7.Exception对象

exception对象是一个异常对象,当一个页面在运行过程中发生了异常,就产生这个对象。如果一个JSP页面要应用此对象,就必须把isErrorPage设为true,否则无法编译。他实际上是java.lang.Throwable的对象,常用方法如下:

方法作用
String getMessage()返回描述异常的信息
String toString()返回关于异常的简短描述信息
void printStackTrace()显示异常及其栈轨迹
Throwable FillInStackTrace()重写异常的执行栈轨迹
<%@ page language="java" import="java.util.*,java.text.*" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8" errorPage="exception1.jsp"%>
<h1>exception对象</h1>
<hr>
<% out.println(100/0);//运行时异常,算数异常,要在上面的page栏里加入
//errorPage="exception1.jsp"这句话代表了把异常交给这个页面来处理%>



<%@ page language="java" import="java.util.*,java.text.*" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8" errorPage="exception1.jsp" isErrorPage="true"%>
<h1>exception1处理异常</h1>
<hr>
打印异常消息:<%=exception.getMessage() //注意在page处添加一个属性 isErrorPage="true"
%><br>
异常消息的字符串描述<%=exception.toString() %>

8.阶段案例——实现用户登录

登陆都JSP页面,若登陆成功则提示登陆成功的用户名,失败则重定向另一个jsp页面

做一个简单的登录页面的后台:
<1> 定义变量:
String username="";
String password="";
<2>防止中文乱码:
request.setCharacterEncoding("utf-8");
<3> 得到变量:
username=request.getParameter("username");
password=request.getParameter("password");
<4>如果用户和密码都等于admin,侧登录成功
if("adimn".equals(username) && "admin".equals(password)){
request.getRequestDispatcher("登录成功跳转的登录页面").forward(request,response)
}

Web是请求/响应架构的使用,而requestresponse就是在服务器端生成的相应的两个对象,request能够获取客户端传递的参数及相关的一些信息,而response就是给客户端响应相关的页面及信息。request.getRequestDispatcher().forward(request,response)这个语句意思是将客户端的请求转向(forward)到getRequestDispatcher()方法中参数定义的页面或者链接。说通俗点就是,当一个客户端的请求到这个页面后,不做处理或者不处理完,将请求转给另一个页面处理,然后再响应给客户端。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值