目标:利用session实现登陆和注销的功能
1、业务实现流程图
2、使用ServletContextListener ,HttpSessionListener对容器状态和session进行监听
public class MyListencer implements ServletContextListener ,HttpSessionListener,ServletRequestListener{
@Override
public void contextDestroyed(ServletContextEvent sce) {
}
@Override
public void contextInitialized(ServletContextEvent sce) {
sce.getServletContext().setAttribute("count", 0);
sce.getServletContext().setAttribute("httpSessions", new Vector<HttpSession>());
}
@Override
public void requestDestroyed(ServletRequestEvent sre) {
}
@Override
public void requestInitialized(ServletRequestEvent sre) {
}
@Override
public void sessionCreated(HttpSessionEvent hse) {
ServletContext sc=hse.getSession().getServletContext();
int count=(int) sc.getAttribute("count");
count++;
sc.setAttribute("count", count);
}
@Override
public void sessionDestroyed(HttpSessionEvent hse) {
HttpSession hs=hse.getSession();
Vector httpSessions=(Vector)hse.getSession().getServletContext().getAttribute("httpSessions");
httpSessions.remove(hs);
}
}
3、登陆页面
public class RegiserServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
String msg="请输入注册信息";
request.setAttribute("msg", msg);
request.getRequestDispatcher("/WEB-INF/login/registerUI.jsp").forward(request, response);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
registerUI.jsp
${msg }<br>
<hr>
<form action="${pageContext.servletContext.contextPath }/chat/loginIN" method="post">
<input type="text" name="userName" /><br>
<br>
<input type="password" name="pwd"/><br>
<br>
<input type="password" name="pwd"/><br>
<br>
<input type="submit" >
</form>
4、loginIN
public class LoginINServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
String userName=request.getParameter("userName");
String[] userPwd=request.getParameterValues("pwd");
String msg="密码不可为空";
if((userPwd[0].trim()).equals("") || (userPwd[1].trim()).equals("")){
request.setAttribute("msg", msg);
request.getRequestDispatcher("/WEB-INF/login/registerUI.jsp").forward(request, response);
return;
}
if(!userPwd[0].equals(userPwd[1])){
msg="密码输入请保持一致";
request.setAttribute("msg", msg);
request.getRequestDispatcher("/WEB-INF/login/registerUI.jsp").forward(request, response);
return;
}
if((userName.trim()).equals("")){
msg="用户名不可为空";
request.setAttribute("msg", msg);
request.getRequestDispatcher("/WEB-INF/login/registerUI.jsp").forward(request, response);
return;
}
if(UserDao.getInstance().findByName(userName)!=null){
msg="用户名已存在";
request.setAttribute("msg", msg);
request.getRequestDispatcher("/WEB-INF/login/registerUI.jsp").forward(request, response);
return;
}
User user=new User(userName,userPwd[0]);
UserDao.getInstance().addUser(user);
HttpSession session=request.getSession();
session.setAttribute("user", user);
Vector<HttpSession> httpSessions=(Vector<HttpSession>) getServletContext().getAttribute("httpSessions");
httpSessions.add(session);
response.sendRedirect(request.getContextPath()+"/chat/info");
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
5、展示注册的用户以及当前在线用户
<a href="${pageContext.servletContext.contextPath }/chat/loginoff">注销</a>
${msg}<br>
注册用户:${showInfo}<br>
<hr>
在线用户:
<c:forEach items="${applicationScope.httpSessions}" var="userSession">
<% HttpSession httpSession=(HttpSession)pageContext.findAttribute("userSession"); %>
<%=((User)httpSession.getAttribute("user")).getName() %><br>
</c:forEach>