Web Listener
35550 단어 listener
http://gaojiewyh.iteye.com/blog/1759566
감청 기의 주요 역할 은 감청 이다.목표 가 변화 할 때 일정한 방법 을 촉발 하 는데 이것 이 바로 사건 촉발 메커니즘 이다.이런 메커니즘 에는 세 가지 요소 가 있어 야 한다.즉,사건,사건 원,사건 을 처리 하 는 방법 이다.이 세 가지 요소 사 이 는 서로 제약 하 는 것 이다.일단 사건 처리 방법 이 촉발 되면 반드시 사건 이 발생 하고 촉발 되 는 사건 을 얻 을 수 있 으 며 사건 을 통 해 사건 의 근원 을 얻 을 수 있 고 누가 사건 을 촉발 시 켰 는 지 에 따라 이 세 가지 요 소 를 연결 할 수 있다.하나의 사건 소스 는 여러 개의 트리거 사건 이 있 을 수 있 고 하나의 트리거 사건 의 발생 은 여러 가지 방법 으로 호출 될 것 이다.이것 이 바로 한 쌍 의 다 중 관계 이다.한 쌍 의 다 중 관 계 를 통 해 우 리 는 여러 끝 에서 한 끝 을 얻 기 쉬 우 며 반대로 한 끝 에서 여러 끝 을 얻 을 수 없다 는 것 은 대가족 이 잘 알 고 있다.그래서 사건 처리 방법 은 사건 대상 을 얻 을 수 있 고 사건 대상 은 사건 원 을 얻 을 수 있다 는 것 을 잘 이해 할 수 있다.
1.웹 모니터 개발 절차
우선 listener 인 터 페 이 스 를 실현 하 는 클래스 를 만 듭 니 다.
자바 코드
public class ContextTestListener implements ServletContextListener {
public void contextInitialized(ServletContextEvent sce) {
//
}
public void contextDestroyed(ServletContextEvent sce) {
//
}
}
그 다음으로 웹 xml 에 모니터 를 설정 합 니 다.
Xml 코드
<listener>
<listener-class>com.jason.listener.ContextTestListener</listener-class>
</listener>
2.웹 모니터 의 분 류 는 그림 에서 보 듯 이 현재 다음 과 같은 몇 가지 모니터 ServletContext,Session,Request 로 나 뉜 다.
3.각종 모니터 의 상세 한 소개 및 용법 예시
(1)ServletContext 와 관련 된 감청 기 인 터 페 이 스 는 ServletContextListener,ServletContextAttributeListener 이다.이 감청 기 는 전체 웹 프로그램의 생명 주 기 를 대상 으로 하고 그 범위 가 가장 크다.일반적으로 응용 프로그램 이 초기 화 될 때 데이터베이스 연결 대상 을 읽 고 응용 프로그램의 설정 을 초기 화 하 는 데 사 용 됩 니 다.그 인터페이스 정 의 는 다음 과 같다.
자바 코드
public interface ServletContextListener {
public void contextInitialized(ServletContextEvent sce);
public void contextDestroyed(ServletContextEvent sce);
}
전형 적 인 응용 프로그램:웹 페이지 가 요청 한 방 문 량 을 통계 해 야 합 니 다.이 웹 프로그램 이 중단 되 었 을 때 방 문 량 수 치 를 설정 파일 에 기록 하고 프로그램 을 바 꾸 어 다시 시작 합 니 다.수 치 는 지난번 방 문 량 부터 시작 합 니 다.
<1>ServletContextListener 인 터 페 이 스 를 실현 하고 초기 화 방법 에서 설정 파일 의 방 문 량 정 보 를 읽 고 소각 방법 에 방 문 량 정 보 를 저장 합 니 다.프로그램 이 시 작 될 때 contextInitialized 방법 을 호출 하고 프로그램 이 멈 출 때 contextDestroyed 방법 을 호출 하기 때 문 입 니 다.이 예 는 properties 의 동작 을 사 용 했 습 니 다.properties 에 익숙 하지 않 으 면 google 에서 사용 하 십시오.특히 파일 읽 기와 저장 파일 의 쓰기 에 주의 하 십시오.코드 는 다음 과 같 습 니 다.
자바 코드
public class ContextTestListener implements ServletContextListener {
private static final String COUNT_NAME = "count";
private static final String PROPERTIES_NAME = "WEB-INF/count.properties";
/*
* (non-Javadoc)
*
* @see
* javax.servlet.ServletContextListener#contextInitialized(javax.servlet
* .ServletContextEvent)
*/
public void contextInitialized(ServletContextEvent sce) {
ServletContext context = sce.getServletContext();
InputStream inputstream = context.getResourceAsStream(PROPERTIES_NAME);
Properties prop = new Properties();
try {
prop.load(inputstream);
} catch (IOException e) {
throw new RuntimeException(e);
}
int count = Integer.parseInt(prop.getProperty(COUNT_NAME));
context.setAttribute(COUNT_NAME, count);
}
/*
* (non-Javadoc)
*
* @see javax.servlet.ServletContextListener#contextDestroyed(javax.servlet.
* ServletContextEvent)
*/
public void contextDestroyed(ServletContextEvent sce) {
ServletContext context = sce.getServletContext();
Object countAttr = context.getAttribute(COUNT_NAME);
if(countAttr != null){
int count = (Integer) context.getAttribute(COUNT_NAME);
InputStream inputstream = context.getResourceAsStream(PROPERTIES_NAME);
Properties prop = new Properties();
try {
prop.load(inputstream);
prop.setProperty(COUNT_NAME, String.valueOf(count));
} catch (IOException e) {
throw new RuntimeException(e);
}
String filepath = context.getRealPath("/");
FileOutputStream fos = null;
try {
fos = new FileOutputStream(filepath + PROPERTIES_NAME);
} catch (FileNotFoundException e) {
throw new RuntimeException(e);
}
try {
prop.store(fos, "add the count");
} catch (IOException e) {
throw new RuntimeException(e);
} finally {
if (fos != null) {
try {
fos.close();
} catch (IOException e) {
System.err.println("Cant close stream :" + e.getMessage());
}
}
}
}
}
}
<2>TestCountservlet 를 정의 합 니 다.웹 페이지 에 접근 을 요청 하 는 요청 URL 로 서 현대 코드 는 다음 과 같 습 니 다.방법 량 을 기록 하 는 동시에 방 문 량 페이지 로 이동 합 니 다.코드 는 다음 과 같 습 니 다.
자바 코드
package com.jason.servlet;
import java.io.IOException;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class TestAccountServlet
*/
public class TestAccountServlet 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
doPost(request,response);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
ServletContext context = request.getSession().getServletContext();
Integer count = (Integer) context.getAttribute("count");
if(count == null){
count = 1;
}else{
count ++;
}
context.setAttribute("count",count);
// do other things
response.sendRedirect(request.getContextPath() + "/count.jsp");
}
}
<3>webxml 의 설정,webxml 에 모니터,servlet 및 welcoen 페이지 가 설정 되 어 있 습 니 다.내용 은 다음 과 같 습 니 다.
자바 코드 모음 집 코드
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<display-name>WebListener</display-name>
<listener>
<listener-class>com.jason.listener.ContextTestListener</listener-class>
</listener>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<servlet>
<description></description>
<display-name>TestAccountServlet</display-name>
<servlet-name>TestAccountServlet</servlet-name>
<servlet-class>com.jason.servlet.TestAccountServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>TestAccountServlet</servlet-name>
<url-pattern>/TestAccountServlet</url-pattern>
</servlet-mapping>
</web-app>
<4>WEB-INF 디 렉 터 리 에 count.properties 를 만 듭 니 다.내용 은 다음 과 같 습 니 다.
자바 코드 모음 집 코드
count=0
<5>index 와 count 페이지 를 만 듭 니 다.index 페이지 는 다음 과 같 습 니 다.
자바 코드
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!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= UTF-8">
<title>index page</title>
</head>
<body>
<a href="${pageContext.request.contextPath}/TestAccountServlet">visit it to test </a>
</body>
</html>
index 페이지 에서${pageContext.request.contextPath}를 주의 하 십시오.jsp 페이지 에서 servlet 의 URL 을 호출 할 때 basepath 를 설정 하지 않 으 면 앞 에 contextpath 의 경 로 를 추가 해 야 합 니 다.그렇지 않 으 면 servlet 의 주 소 는 잘못 되 었 습 니 다.아니면
<%@ page language="java" 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= UTF-8">
<title>count here </title>
</head>
<body>
visit count:${applicationScope.count}
<%
System.out.println(application.getAttribute("count"));
%>
</body>
</html>
${applicationScope.count}을 이용 하여 수 치 를 가 져 옵 니 다.이 프로그램 은 실 행 됩 니 다.클릭 할 때마다 count 페이지 에 접근 합 니 다.방 문 량 은 1.
(2)Session 과 관련 된 감청 기 는 4 개의 Http Session Listener,Http Session Attribute Listener,Http Session Bind Listener 와 Http Session Activation Listener 가 있 습 니 다.
<1>HttpSession Listener 는 라 이 프 사이클 모니터 입 니 다.Session 대상 을 만 들 거나 끝 낼 때 해당 동작 을 하면 HttpSession Listener 를 실현 할 수 있 습 니 다.이 인터페이스의 정 의 는 다음 과 같 습 니 다.
자바 코드
public interface HttpSessionListener {
public void sessionCreated(HttpSessionEvent se) ;
public void sessionDestroyed(HttpSessionEvent se) ;
}
이 모니터 의 사용법,예 를 들 어 사용자 가 다시 로그 인 하 는 것 을 방지 할 때 데이터베이스 에서 필드 상 태 를 정의 하여 로그 인 여 부 를 표시 합 니 다.로그아웃 할 때 저 희 는 그 상 태 를 수정 하지만 많은 경우 에 저 희 는 브 라 우 저 를 직접 닫 아서 데이터 베 이 스 를 업데이트 할 수 없습니다.또한 사용자 로그 인 session 도 생존 기한 이 있 습 니 다.이 때 저 희 는 session 이 삭 제 될 때 데이터베이스 상 태 를 바 꾸 기 를 원 합 니 다.HttpSession Listener 모니터 의 session Destroyed(se)방법 에서 session 에서 이 사용 자 를 가 져 오고 데이터 베 이 스 를 조작 하여 이 사용자 의 로그 인 상 태 를 로그 인 하지 않 은 것 으로 설정 할 수 있 습 니 다.
자바 코드
/**
* Application Lifecycle Listener implementation class OnlinePepoleListener
*
*/
public class OnlinePepoleListener implements HttpSessionListener {
/**
* @see HttpSessionListener#sessionCreated(HttpSessionEvent)
*/
public void sessionCreated(HttpSessionEvent se) {
// TODO Auto-generated method stub
}
/**
* @see HttpSessionListener#sessionDestroyed(HttpSessionEvent)
*/
public void sessionDestroyed(HttpSessionEvent se) {
// TODO Auto-generated method stub
HttpSession session = se.getSession();
String user = (String)session.getAttribute("login");
//
}
}
전형 적 인 응용:현재 사용자 의 온라인 수 를 통계 합 니 다.
(1)index 페이지
자바 코드
<%@ page language="java" 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>
<form action="login.jsp" method="post">
userName:<input type="text" name="username" />
<br />
<input type="submit" value="login" />
</form>
</body>
</html>
2.login 페이지
Html 코드
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
<%@ page import="java.util.*"%>
<!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>
<%
request.setCharacterEncoding("UTF-8");
//
String username = request.getParameter("username");
// session
session.setAttribute("username", username);
//
List onlineUserList = (List) application.getAttribute("onlineUserList");
// ,
if (onlineUserList == null) {
onlineUserList = new ArrayList();
application.setAttribute("onlineUserList", onlineUserList);
}
onlineUserList.add(username);
//
response.sendRedirect("result.jsp");
%>
</body>
</html>
3.result 페이지
Html 코드
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
<%@ page isELIgnored="false"%>
<%@page import="java.util.List"%>
<!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>
<h3> :${username} [<a href="logout.jsp"> </a>]</h3>
:
<table>
<%
List onlineUserList = (List) application.getAttribute("onlineUserList");
for (int i = 0; i < onlineUserList.size(); i++) {
String onlineUsername = (String) onlineUserList.get(i);
%>
<tr>
<td><%=onlineUsername%></td>
</tr>
<%
}
%>
</table>
</body>
</html>
4,logout 페이지
Html 코드
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
<%@ page import="java.util.*"%>
<!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>
<%
//
String username = (String) session.getAttribute("username");
// session
session.invalidate();
//
List onlineUserList = (List) application.getAttribute("onlineUserList");
onlineUserList.remove(username);
//
response.sendRedirect("index.jsp");
%>
</body>
</html>
5.모니터 코드
자바 코드
package com.jason.listener;
import java.util.List;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
/**
* Application Lifecycle Listener implementation class OnlineUserListener
*
*/
public class OnlineUserListener implements HttpSessionListener {
public void sessionCreated(HttpSessionEvent event) {
System.out.println(" session:"+event.getSession().getId());
}
public void sessionDestroyed(HttpSessionEvent event) {
HttpSession session = event.getSession();
ServletContext application = session.getServletContext();
//
String username = (String) session.getAttribute("username");
//
List onlineUserList = (List) application.getAttribute("onlineUserList");
onlineUserList.remove(username);
System.out.println(username+" !");
}
}
6 웹 설정
Html 코드
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<display-name>OnlinePepoleListener</display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<listener>
<listener-class>com.jason.listener.OnlineUserListener</listener-class>
</listener>
</web-app>
모니터 가 session Destoryed 방법 을 호출 한 것 을 발견 하면 사용 자 를 온라인 인원수 에서 delete 합 니 다.다음 두 가지 상황 에서 session Destoryed 사건 이 발생 합 니 다.
a.session.invalidate()방법 을 실행 할 때
logout.jsp 에서 session.invalidate()방법 을 호출 하 였 습 니 다.
b.session 세 션 시간 초과
session 의 기본 시간 초과 이 벤트 는 30 분 입 니 다.30 분 후에 자동 으로 session 을 소각 합 니 다.
2、HttpSessionBindingListener
HttpSession BindingListener 는 감청 기 라 고 하지만 사용 방법 은 HttpSession Listener 와 완전히 다르다.우 리 는 실제로 그것 이 어떻게 사용 되 는 지 보 자.새 클래스 Online UserBinding Listener 는 HttpSession Binding Listener 인 터 페 이 스 를 실현 하고 구조 방법 은 username 파라미터 에 전 달 됩 니 다.HttpSession Binding Listener 에는 두 가지 방법 이 있 습 니 다.valueBound(HttpSession Binding Event event)와 valueUnbound(HttpSession Binding Event event)는 전 자 는 데이터 바 인 딩 이 고 후 자 는 바 인 딩 을 취소 하기 위해 이른바 session 에 대한 데이터 바 인 딩 을 합 니 다.session.setAttribute()를 호출 하여 HttpSession Binding Listener 를 session 에 저장 하 는 것 입 니 다.
login.jsp 에서 이 단 계 를 수행 합 니 다.
자바 코드
<%@page import="com.test.OnlineUserBindingListener"%>
<%@ page contentType="text/html;charset=utf-8"%>
<%@ page import="java.util.*"%>
<%
request.setCharacterEncoding("UTF-8");
//
String username = request.getParameter("username");
//
session.setAttribute("onlineUserBindingListener", new OnlineUserBindingListener(username));
//
response.sendRedirect("result.jsp");
%>
이것 이 바로 HttpSession Binding Listener 와 HttpSession Listener 간 의 가장 큰 차이 점 입 니 다.HttpSession Listener 는 웹.xml 에 만 설정 하면 전체 응용 프로그램의 모든 session 을 감청 할 수 있 습 니 다.HttpSession BindingListener 는 실례 화 된 후에 어떤 session 에 넣 어야 감청 할 수 있 습 니 다.감청 범위 에서 비교 하면 HttpSession Listener 는 한 번 설정 하면 모든 session 을 감청 할 수 있 습 니 다.HttpSession Binding Listener 는 보통 1 대 1 입 니 다.바로 이러한 차이 점 은 HttpSession Binding Listener 의 장점 을 이 루 었 습 니 다.우 리 는 모든 listener 가 하나의 username 에 대응 하도록 할 수 있 습 니 다.그러면 매번 session 에서 username 을 읽 지 않 아 도 되 고 모든 온라인 목록 을 조작 하 는 코드 를 listener 에 옮 겨 서 쉽게 유지 할 수 있 습 니 다.
자바 코드
package com.test;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionBindingEvent;
import javax.servlet.http.HttpSessionBindingListener;
public class OnlineUserBindingListener implements HttpSessionBindingListener {
String username;
public OnlineUserBindingListener(String username){
this.username=username;
}
public void valueBound(HttpSessionBindingEvent event) {
HttpSession session = event.getSession();
ServletContext application = session.getServletContext();
//
List onlineUserList = (List) application.getAttribute("onlineUserList");
// ,
if (onlineUserList == null) {
onlineUserList = new ArrayList();
application.setAttribute("onlineUserList", onlineUserList);
}
onlineUserList.add(this.username);
}
public void valueUnbound(HttpSessionBindingEvent event) {
HttpSession session = event.getSession();
ServletContext application = session.getServletContext();
//
List onlineUserList = (List) application.getAttribute("onlineUserList");
onlineUserList.remove(this.username);
System.out.println(this.username + " 。");
}
}
여기 서 listener 의 username 을 직접 사용 하여 온라인 목록 을 조작 할 수 있 습 니 다.session 에 username 이 존재 하 는 지 걱정 할 필요 가 없습니다.
valueUnbound 의 트리거 조건 은 다음 과 같은 세 가지 상황 입 니 다.
a.session.invalidate()를 실행 할 때.
b.session 시간 초과,자동 소각 시.
c.session.setAttribute("onlineUserListener","기타 대상")을 실행 합 니 다.또는 session.removeAttribute("onlineUserListener");listener 를 session 에서 삭제 할 때.
따라서 listener 를 session 에서 삭제 하지 않 으 면 session 의 폐 기 를 감청 할 수 있다.
전형 적 인 사례:사용 자 를 강제로 차 버 리 는 예
1.모니터 코드 는 다음 과 같다.
자바 코드
package com.jason.listener;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionBindingEvent;
import com.jason.domain.User;
/**
* Application Lifecycle Listener implementation class SessionAttributeListener
*
*/
public class SessionAttributeListener implements HttpSessionAttributeListener {
/**
* @see HttpSessionAttributeListener#attributeRemoved(HttpSessionBindingEvent)
*/
public void attributeRemoved(HttpSessionBindingEvent arg0) {
// TODO Auto-generated method stub
}
/**
* @see HttpSessionAttributeListener#attributeAdded(HttpSessionBindingEvent)
*/
public void attributeAdded(HttpSessionBindingEvent se) {
// TODO Auto-generated method stub
System.out.println("start");
Object obj = se.getValue();
if(obj instanceof User){
HttpSession session = se.getSession();
ServletContext application = session.getServletContext();
Map map = (Map) application.getAttribute("userMap");
if(map == null){
map = new HashMap();
application.setAttribute("userMap", map);
}
User user = (User) obj;
map.put(user.getUserName(), session);
}
}
/**
* @see HttpSessionAttributeListener#attributeReplaced(HttpSessionBindingEvent)
*/
public void attributeReplaced(HttpSessionBindingEvent arg0) {
// TODO Auto-generated method stub
}
}
2.loginservlet
자바 코드
package com.jason.servlet;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import com.jason.domain.User;
/**
* Servlet implementation class LoginServlet
*/
public class LoginServlet extends HttpServlet {
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doPost(request,response);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
String username = request.getParameter("username");
String password = request.getParameter("password");
User user = new User();
user.setUserName(username);
user.setPassword(password);
HttpSession session= request.getSession();
session.setAttribute("user", user);
response.sendRedirect(request.getContextPath()+"/user.jsp");
}
}
3、kickoutServelt
자바 코드
package com.jason.servlet;
import java.io.IOException;
import java.util.Map;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
/**
* Servlet implementation class KickUserServlet
*/
public class KickUserServlet 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
doPost(request,response);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
String username = request.getParameter("username");
Map map = (Map) request.getServletContext().getAttribute("userMap");
HttpSession session = (HttpSession) map.get(username);
if(session != null){
session.invalidate();
map.remove(username);
}
request.getRequestDispatcher("/listUser.jsp").forward(request, response);
}
}
6.index 페이지
Html 코드
<%@ page language="java" 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=utf-8">
<title>Insert title here</title>
</head>
<body>
<form method="post" action="${pageContext.request.contextPath }/LoginServlet">
:<input type="text" name="username" /><br/>
: <input type="password" name="password" /><br/>
<input type="submit" value=" " /><br/>
</form>
</body>
</html>
2 사용자 페이지
자바 코드
<%@ page language="java" 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>
:${user.userName}
<a href="listUser.jsp" >user list</a>
</body>
</html>
3 사용자 목록 페이지
Html 코드
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
<%@page import="java.util.*"%>
<!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=utf-8">
<title>Insert title here</title>
</head>
<body>
:${user.userName}
<br/>
:<br/>
<%
Map onlineUserMap = (Map) application.getAttribute("userMap");
System.out.println(onlineUserMap.size());
%>
<c:forEach var="me" items="${userMap}">
${me.key} <a href="${pageContext.request.contextPath}/KickUserServlet?username=${me.key}" > </a>
</c:forEach>
</body>
</html>
(3)HttpServletRequest 와 관련 된 감청 기 는 ServletRequestListener,ServletRequestAttributeListener,비동기 처리 와 관련 된 감청 기 가 있 는데 이 감청 기 는 3.0 에 새로 추 가 된 것 이다.
ServletRequestListener 에 대해 서 는 통계 방문 량 등에 더 많이 사용 된다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
icrosoft Enterprise Listener에서 인증이 필요한 SMTP 서버를 사용하도록 설정icrosoft 엔터프라이즈 라이브러리의 로깅 모듈에는 Email Trace Listener가 있습니다.사이트를 다른 곳에 배치하는 응용에 있어서 이것은 매우 효과적인 기능이다.전자메일로 로그를 보고 우리가 개발한 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.