SSL(Secure Socket Layer,安全套接字层)是一种运行在TCP/IP之上和像HTTP这种应用层协议之下的加密技
术. SSL是在HTTPS协议中使用的加密技术.SSL可以让采用SSL的服务器认证采用SSL的客户端和服务器之间保持
一种加密的连接.在建立了加密连接的过程中,客户和服务器都可以产生名叫"会话密钥"的东东,它是一种用于加
密和解密消息的对称的密钥,基于HTTPS协议的服务器可以使用这个客户的对称密钥来建立会话.
我将采用一个登陆程序来演示Session的生命周期,刚开始,这个程序采用基于Cookie的会话跟踪,当客户端禁用
Cookie后,采用URL重写的机制来进行会话跟踪,实例的开发有以下几个步骤:
--------------------------
1. OutputSessionInfo.java
2. LoginServlet.java
3. LoginChkServlet.java
4. GreetServlet.java
5. LogouServlet.java
将写好的程序放入 C:\....ch01\src目录下
--------------------------
1.OutputSessionInfo.java
package org.ch01; //名字空间自定.
import java.io.*;
import java.servlet.http.*;
import java.util.Date;
public class OutputSessionInfo
{
public static void printSessionInfo(PrintWriter out,HttpSession session)
{
out.println("<table>");
out.println("<tr>");
out.println("<td>会话状态</td>");
if(session.isNew()) //..isNew()判断是否新会话,并输出相应的会话状态;
{
out.println("<td>新的会话</td>");
}else
{
out.println("<td>旧的会话</td>");
}
out.println("</tr>");
out.println("<tr><td>会话</td><td>"+session.getId()+"</tr>");
out.println("<tr><td>创建时间:</td><td>"+new Date(session.getCreationTime())
+"</td></tr>");
out.println("<tr><td>上次访问时间:</td><td>"+new Date
(session.getLastAccessedTime())+"</td></tr>");
out.println("<tr><td>最大不活动时间间隔:</td><td>"+ new Date
(session.getMaxInactiveInterval())+"</td></tr>);
out.println("</table>");
}
}
以下是servlet代码:
loginservlet.java
package VO;
import java.io.*;
import java.net.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.PrintWriter;
import BO.OutputSessionInfo;
/**
*
* @author Administrator
* @version
*/
public class loginservlet extends HttpServlet {
private String user;
private String pwd;
protected void processRequest(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
resp.setContentType("text/html;charset=GBK");
HttpSession session = req.getSession();
user = (String)session.getAttribute("textname");
/*
pwd = (String)session.getAttribute("textpwd");
String username = req.getParameter("textname");
PrintWriter out = resp.getWriter();
out.println("<html>");
out.println("<meta http-equiv=\"Pragma\" content=\"no-cache\">");
out.println("<head><title><%="+username+" %>你已成功</title></head>");
out.println("<body>");
out.println(username+"你已登陆!");
OutputSessionInfo.printSessionInfo(out,session);
out.println("<a href="+resp.encodeURL("logout")+">注销</a>");
out.println("</body>");
out.println("</html>");
out.close();*/
session.setAttribute("user_name",user);
resp.sendRedirect("index.jsp");
}
// <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
/** Handles the HTTP <code>GET</code> method.
* @param request servlet request
* @param response servlet response
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
/** Handles the HTTP <code>POST</code> method.
* @param request servlet request
* @param response servlet response
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
/** Returns a short description of the servlet.
*/
public String getServletInfo() {
return "Short description";
}
// </editor-fold>
}
以下是loginuser代码:
package VO;
import java.io.*;
import java.net.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.PrintWriter;
/**
*
* @author Administrator
* @version
*/
public class logoutservlet extends HttpServlet {
/** Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
* @param request servlet request
* @param response servlet response
*/
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
HttpSession session = request.getSession();
session.invalidate();
///* TODO output your page here
out.println("<html>");
out.println("<head>");
out.println("<title>Servlet logoutservlet</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1>已注销</h1>");
out.println("<a href = index1.jsp>重新登陆</a>");
out.println("</body>");
out.println("</html>");
//*/
out.close();
}
// <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
/** Handles the HTTP <code>GET</code> method.
* @param request servlet request
* @param response servlet response
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
/** Handles the HTTP <code>POST</code> method.
* @param request servlet request
* @param response servlet response
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
/** Returns a short description of the servlet.
*/
public String getServletInfo() {
return "Short description";
}
// </editor-fold>
}
WEB.XML代码:
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
version="2.4">
<servlet>
<servlet-name>loginservlet</servlet-name>
<servlet-class>VO.loginservlet</servlet-class>
</servlet>
<servlet>
<servlet-name>logoutservlet</servlet-name>
<servlet-class>VO.logoutservlet</servlet-class>
</servlet>
<servlet>
<servlet-name>sessionserver</servlet-name>
<servlet-class>VO.sessionid</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>loginservlet</servlet-name>
<url-pattern>/login</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>logoutservlet</servlet-name>
<url-pattern>/logout</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>sessionserver</servlet-name>
<url-pattern>/JSessionId</url-pattern>
</servlet-mapping>
<session-config>
<session-timeout>
30
</session-timeout>
</session-config>
<!-- ================ Security Constraints for Testing =============== -->
<!--
<security-constraint>
<web-resource-collection>
<web-resource-name>The Entire Web Application</web-resource-name>
<url-pattern>/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>tomcat</role-name>
</auth-constraint>
</security-constraint>
<login-config>
<auth-method>BASIC</auth-method>
<realm-name>Tomcat Supported Realm</realm-name>
</login-config>
<security-role>
<description>
An example role defined in "conf/tomcat-users.xml"
</description>
<role-name>tomcat</role-name>
</security-role>
-->
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</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>