取得HttpSession实例
在Servlet程序中要想取得一个session对象,则可以通过HttpServletRequest接口完成,在此接口中提供了以下的操作方法:
1):public HttpSession getSession()
2):public HttpSession getSession(boolean create)
Servlet本身提供的只有request和response两个对象,所以如果要想取得session对象,则只能依靠request对象,因为session属于HTTP协议范畴,而且在每次发送请求的时候,服务器都会自动为客户端设置一个Cookie,所以,很自然的,Session中要使用到Cookie的机制,但是Cookie又只能通过request取得,那么自然session也就只能通过request取得。
使用Servlet的request对象取得session内置对象:【HttpSessionDemoServlet.java】
package com.skewrain.demo2;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class HttpSessionDemoServlet extends HttpServlet {
public void doGet(HttpServletRequest req,HttpServletResponse resp)
throws ServletException,IOException{
HttpSession ses = req.getSession();
System.out.println("SESSION ID -->" + ses.getId());
ses.setAttribute("username","斜雨"); //设置session属性
System.out.println("username属性内容:" + ses.getAttribute("username"));
}
public void doPost(HttpServletRequest req,HttpServletResponse resp)
throws ServletException,IOException {
this.doGet(req,resp);
}
}
配置org/web-inf/web.xml的内容如下:
<servlet>
<servlet-name>sessiondemo</servlet-name>
<servlet-class>com.skewrain.demo2.HttpSessionDemoServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>sessiondemo</servlet-name>
<url-pattern>/HttpSessionDemoServlet</url-pattern>
</servlet-mapping>
在浏览器端执行此Servlet,服务器端的输出结果如下所示:
此时,可以取得了session的对象了。
取得application对象
之前讲解内置对象的时候,一直强调过,对于application对象可以通过this.getServletContext()方法取得。
Public ServletContext getServletContext()
现在在HttpServlet的父类之中已经专门提供了取得ServletContext接口的对象,所以下面就利用此方法完成功能。
【ServletContextDemoServlet.java的内容如下:】
package com.skewrain.demo2;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class ServletContextDemoServlet extends HttpServlet {
public void doGet(HttpServletRequest req,HttpServletResponse resp)
throws ServletException,IOException{
ServletContext app = super.getServletContext();
System.out.println("真实路径:" + app.getRealPath("/"));
}
public void doPost(HttpServletRequest req,HttpServletResponse resp)
throws ServletException,IOException{
this.doGet(req,resp);
}
}
配置web.xml的内容如下:
<servlet>
<servlet-name>applicationdemo</servlet-name>
<servlet-class>com.skewrain.demo2.ServletContextDemoServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>applicationdemo</servlet-name>
<url-pattern>/ServletContextDemoServlet</url-pattern>
</servlet-mapping>
我们在浏览器中执行此Servlet,在服务器端的输出结果如下:
可见,已经能够取得虚拟目录对应的真实路径了。
小结:
1):通过getSession()方法可以直接取得HttpSession的实例化对象;
2):通过getServletContext()方法可以取得ServletContext的实例化对象。
取得了session之后就意味着可以进行登录验证了。
通过getServletContext()方法可以取得application对象,而之前调用的this.getServletContext()方法完成的也是同样的功能。