주요내용 : URL패턴, Filter, Listener
@@@@ 0807 실습
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<script type="text/javascript">
function fn_validate(){
var frmLogin = document.frmLogin;
frmLogin.method = "get";
frmLogin.action = "prod";
frmLogin.submit();
}
</script>
<title>제품 조회</title>
</head>
<body>
<form name = "frmLogin" method = "get" action="prod" encType="UTF-8">
제품번호:<input type = "text" name = "prod_id">
공급업체번호:<input type = "text" name = "vend_id">
<input type = "button" onClick="fn_validate()" value = "조회">
<input type = "button" value="제품추가" onClick="location.href='customer3.html'">
<input type = "hidden" name="command" value="frmLogin">
</form>
</body>
</html>
==========================================
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>제품 추가 창</title>
<script type="text/javascript">
function fn_addProduct(){
var addProduct = document.addProduct;
var prod_id = addProduct.prod_id.value;
var prod_name = addProduct.prod_name.value;
var prod_price = addProduct.prod_price.value;
var prod_desc = addProduct.prod_desc.value;
var vend_id = addProduct.vend_id.value;
if(prod_id.length == 0 || prod_id == ""){
alert("제품번호는 필수입니다.");
} else if (prod_name.length == 0 || prod_name == ""){
alert("제품이름은 필수입니다.");
} else if (prod_price.length == 0 || prod_price == ""){
alert("제품가격은 필수입니다.");
} else if (prod_desc.length == 0 || prod_desc == ""){
alert("제품설명은 필수입니다.");
} else if (vend_id.length == 0 || vend_id == ""){
alert("공급업체번호는 필수입니다.");
} else {
addProduct.method = "post";
addProduct.action = "prod";
addProduct.submit();
}
}
</script>
</head>
<body>
<form name="addProduct">
<table>
<th>제품 추가 창</th>
<tr>
<td>제품번호</td>
<td><input type="text" name="prod_id"></td>
</tr>
<tr>
<td>제품명</td>
<td><input type="text" name="prod_name"></td>
</tr>
<tr>
<td>제품가격</td>
<td><input type="text" name="prod_price"></td>
</tr>
<tr>
<td>제품설명</td>
<td><input type="text" name="prod_desc"></td>
</tr>
<tr>
<td>공급업체번호</td>
<td><input type="text" name="vend_id"></td>
</tr>
</table>
<input type="button" value="제품추가" onClick="fn_addProduct()">
<input type="hidden" name="command" value="addProduct"/>
</form>
</body>
</html>
===============================
package Week05.day0807;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class CusServlet
*/
@WebServlet("/prod")
public class ProdServlet 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 {
doHandle(request, response);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doHandle(request, response);
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doHandle(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
ProductDAO dao = new ProductDAO();
String command = request.getParameter("command");
List list = null;
if (command !=null && command.equals("delProduct")) // 제품삭제
{
String prod_id = request.getParameter("prod_id"); // id만 받아서 삭제
dao.delProduct(prod_id);
} else if(command != null && command.equals("addProduct"))
{
String prod_id = request.getParameter("prod_id");
String prod_name = request.getParameter("prod_name");
int prod_price = Integer.parseInt(request.getParameter("prod_price"));
String prod_desc = request.getParameter("prod_desc");
String vend_id = request.getParameter("vend_id");
dao.addProduct(prod_id, prod_name, prod_price, prod_desc, vend_id);
}
String input_id = request.getParameter("prod_id");
String i_vend_id = request.getParameter("vend_id"); // 공급업체번호
list = dao.listMembers(input_id, i_vend_id); // listMembers메소드로 회원정보를 조회
out.print("<html><body>");
out.print("<table border=1><tr align='center' bgcolor='lightgreen'>");
// 제품번호 조회 쿼리(조회시 like로 검색)
// 제품번호, 제품명, 제품가격, 제품설명, 공급업체명, 삭제
// select P.prod_id, P.prod_name, P.prod_price, P.prod_desc, V.vend_name
out.print("<td>제품번호</td><td>제품명</td><td>제품가격</td><td>제품설명</td><td>공급업체명</td><td>삭제</td></tr>");
for(int i = 0; i<list.size(); i++)
{
ProductVO productVO = (ProductVO) list.get(i);
String prod_id = productVO.getProd_id();
String prod_name = productVO.getProd_name();
String prod_price = productVO.getProd_price();
String prod_desc = productVO.getProd_desc();
String vend_name = productVO.getVend_name();
out.print("<tr><td>" + prod_id + "</td><td>" + prod_name +"</td><td>" + prod_price + "</td><td>" + prod_desc + "</td><td>" + vend_name + "</td><td>" + "<a href='/pro09/prod?command=delProduct&prod_id=" + prod_id + "'> 삭제 </a></td></tr>");
}
out.print("</table></body></html>");
out.print("<a href='/pro09/customer2.html'>새로운 상품 조회하기</a>");
}
}
=======================
package Week05.day0807;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.DataSource;
public class ProductDAO {
private Connection con;
private PreparedStatement pstmt; // 실무에선 PreparedStatement를 더 많이씀.
private DataSource dataFactory;
public ProductDAO()
{
try
{
Context ctx = new InitialContext();
Context envContext = (Context)ctx.lookup("java:/comp/env");
dataFactory = (DataSource)envContext.lookup("jdbc/oracle");
} catch (Exception e)
{
e.printStackTrace();
}
}
public List listMembers(String input_id, String i_vend_id) // 제품조회 메소드
{
List list = new ArrayList();
try
{
con = dataFactory.getConnection();
String query = "select P.prod_id, P.prod_name, P.prod_price, P.prod_desc, V.vend_name "
+ "from products P, vendors V "
+ "where P.vend_id = V.vend_id ";
if(input_id != null && i_vend_id != null) { //제품번호, 공급업체번호 둘 다 입력 되었을 때
query += " and P.prod_id like '%" + input_id + "%'";
query += " and V.vend_id like '%" + i_vend_id + "%'";
} else if(input_id != null && i_vend_id == null){ //제품번호만 입력했을 때
query += " and P.prod_id like '%" + input_id + "%'";
} else if(input_id == null && i_vend_id != null){ //공급업체만 입력했을 때
query += " and V.vend_id like '%" + i_vend_id + "%'";
}
System.out.println("preparedStatement : " + query);
pstmt = con.prepareStatement(query); // 파생된 SQL 재사용. preparedStatement 메소드에 sql문을 전달해 prepareStatement객체를 생성.
ResultSet rs = pstmt.executeQuery(); // sql문으로 회원 정보를 조회
while(rs.next())
{
// 조회한 레코드의 각 컬럼 값을 받아옴.
String prod_id = rs.getString("prod_id"); // " " 안에는 컬럼명이 와야함.!!!!!!!!!!!!!!
String prod_name =rs.getString("prod_name");
String prod_price = rs.getString("prod_price");
String prod_desc = rs.getString("prod_desc");
String vend_name = rs.getString("vend_name");
// 각 컬럼 값을 다시 MemberVO 객체의 속성에 설정.
ProductVO vo = new ProductVO();
vo.setProd_id(prod_id);
vo.setProd_name(prod_name);
vo.setProd_price(prod_price);
vo.setProd_desc(prod_desc);
vo.setVend_name(vend_name);
list.add(vo); // 설정된 MemberVO 객체를 다시 ArrayList에 저장.
}
rs.close();
pstmt.close();
con.close();
} catch (Exception e)
{
e.printStackTrace();
}
return list; // 조회한 레코드의 개수만큼 MemberVO객체를 저장한 ArrayList를 반환.
}
public void delProduct(String input_id) // 제품삭제 메소드
{
try
{
ProductVO vo = new ProductVO();
vo.setDelId(input_id);
con = dataFactory.getConnection();
String query = "delete from products";
query += " where prod_id = '" + input_id + "'";
System.out.println("presparedStatement: " + query);
pstmt = con.prepareStatement(query);
pstmt.executeUpdate();
pstmt.close();
} catch (Exception e)
{
e.printStackTrace();
}
}
public void addProduct(String prod_id, String prod_name, int prod_price, String prod_desc, String vend_id) // 제품추가 메소드
{
try
{
// DataSource 이용해 데이터베이스와 연결
Connection con = dataFactory.getConnection();
// insert문을 문자열로 만듬.
String query = "insert into products";
query += " (prod_id,prod_name,prod_price,prod_desc,vend_id)";
query += " values(?,?,?,?,?)"; // 순서대로 값을 assign 해야함.
System.out.println("prepareStatement: " + query);
pstmt = con.prepareStatement(query);
// insert문의 각 ? 순서대로 회원정보를 세팅
pstmt.setString(1, prod_id);
pstmt.setString(2, prod_name);
pstmt.setInt(3, prod_price);
pstmt.setString(4, prod_desc);
pstmt.setString(5, vend_id);
// 회원정보를 테이블에 추가.
pstmt.executeUpdate();
pstmt.close();
} catch (Exception e)
{
e.printStackTrace();
}
}
}
=============================
package Week05.day0807;
public class ProductVO {
// P.prod_id, P.prod_name, P.prod_price, P.prod_desc, V.vend_name
private String prod_id;
private String prod_name;
private String prod_price;
private String prod_desc;
private String vend_name;
private String vend_id;
private String delId;
public ProductVO() {System.out.println("ProductVO 생성자 호출");}
public String getProd_id() {
return prod_id;
}
public void setProd_id(String prod_id) {
this.prod_id = prod_id;
}
public String getProd_name() {
return prod_name;
}
public void setProd_name(String prod_name) {
this.prod_name = prod_name;
}
public String getProd_price() {
return prod_price;
}
public void setProd_price(String prod_price) {
this.prod_price = prod_price;
}
public String getProd_desc() {
return prod_desc;
}
public void setProd_desc(String prod_desc) {
this.prod_desc = prod_desc;
}
public String getVend_name() {
return vend_name;
}
public void setVend_name(String vend_name) {
this.vend_name = vend_name;
}
public String getVend_id() {
return vend_id;
}
public void setVend_id(String vend_id) {
this.vend_id = vend_id;
}
public String getDelId() {
return delId;
}
public void setDelId(String delId) {
this.delId = delId;
}
}
===============================
package sec03.ex04;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
/**
* Servlet implementation class SessionTest4
*/
@WebServlet("/login2")
public class SessionTest4 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 {
doHandle(request, response);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doHandle(request, response);
}
protected void doHandle(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
HttpSession session = request.getSession();
String user_id = request.getParameter("user_id");
String user_pw = request.getParameter("user_pw");
if(session.isNew()) {
//로그인창에서 서브릿으로 요청했다면 id가 null이 아니므로 세션에 id를 바인딩합니다.
if(user_id !=null) {
session.setAttribute("user_id", user_id);
String url=response.encodeURL("login"); // 변수 url에 encodeURL()을 이용해 응답 시 미리 jsessionId를 저장합니다.
out.println("<a href='login'>로그인 상태 확인</a>"); // 로그인 상태 확인 클릭시 jsessionID를 서블릿으로 다시 전송.
} else {
out.println("<a href='login2.html'>다시 로그인 하세요!!</a>");
session.invalidate();
}
} else {
//재요청시 세션에서 id를 가져와 이전에 로그인했는지 여부를 확인.
user_id = (String)session.getAttribute("user_id");
if(user_id !=null && user_id.length() !=0) {
out.println("안녕하세요 " + user_id + "님!!!");
} else {
out.println("<a href='login2.html'>다시 로그인 하세요!!</a>");
session.invalidate();
}
}
}
}
--------------------------
package sec05.ex01;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
/**
* Servlet implementation class SessionTest4
*/
@WebServlet("/login")
public class LoginServlet 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 {
doHandle(request, response);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doHandle(request, response);
}
protected void doHandle(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
String user_id = request.getParameter("user_id");
String user_pwd = request.getParameter("user_pwd");
MemberVO memberVO = new MemberVO();
memberVO.setId(user_id);
memberVO.setPwd(user_pwd);
MemberDAO dao = new MemberDAO();
//사용자 존재여부 check - 기본패턴임.
boolean result = dao.isExisted(memberVO);
if(result) {
// 사용자 존재하므로 세션에 사용자 정보 설정
HttpSession session = request.getSession();
// 로그인 성공여부 설정
session.setAttribute("isLogon", true); //조회 결과가 true이면 isLogOn 속성을 true로 세션에 저장.
session.setAttribute("login.id", user_id); // 조회한 결과가 true이면 ID와 pwd를 세션에 저장.
session.setAttribute("login.pwd", user_pwd);
out.print("<html><body>");
out.print("안녕하세요 " + user_id + "님!!!");
out.print("<a href='show'>회원정보 보기</a>");
out.print("</html></body>");
} else {
out.println("<html><body><center>회원 아이디가 틀립니다.");
out.println("<a href='login3.html'>다시 로그인 하기</a>");
out.println("</html></body>");
}
}
}
-----------------------------
package sec05.ex01;
import java.sql.Connection;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.DataSource;
public class MemberDAO {
private Connection con;
private PreparedStatement pstmt; // 실무에선 PreparedStatement를 더 많이씀.
private DataSource dataFactory;
public MemberDAO()
{
try
{
Context ctx = new InitialContext();
Context envContext = (Context)ctx.lookup("java:/comp/env");
dataFactory = (DataSource)envContext.lookup("jdbc/oracle");
} catch (Exception e)
{
e.printStackTrace();
}
}
public boolean isExisted(MemberVO memberVO) {
boolean result = false;
String id = memberVO.getId();
String pwd = memberVO.getPwd();
try {
con = dataFactory.getConnection();
// 오라클의 decode 함수를 이용해 조회하여 ID와 비밀번호가 테이블에 존재하면 true를, 존재하지 않으면 false를 조회함.
String query = "select decode(count(*),1,'true','false') as result from t_member";
query += " where id=? and pwd=?";
pstmt = con.prepareStatement(query);
pstmt.setString(1, id);
pstmt.setString(2, pwd);
ResultSet rs = pstmt.executeQuery();
rs.next(); // 커서를 첫번째 레코드로 위치시킴.
result = Boolean.parseBoolean(rs.getString("result"));
System.out.println("result=" + result);
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
public List listMembers()
{
List list = new ArrayList();
try
{
// connDB(); // 네가지 정보로 데이터베이스를 연결
con = dataFactory.getConnection();
String query = "select * from t_member ";
System.out.println("preparedStatement : " + query);
pstmt = con.prepareStatement(query); // preparedStatement 메소드에 sql문을 전달해 prepareStatement객체를 생성.
ResultSet rs = pstmt.executeQuery(); // sql문으로 회원 정보를 조회
while(rs.next())
{
// 조회한 레코드의 각 컬럼 값을 받아옴.
String id = rs.getString("id");
String pwd = rs.getString("pwd");
String name = rs.getString("name");
String email = rs.getString("email");
Date joinDate = rs.getDate("joinDate");
// 각 컬럼 값을 다시 MemberVO 객체의 속성에 설정.
MemberVO vo = new MemberVO();
vo.setId(id);
vo.setPwd(pwd);
vo.setName(name);
vo.setEmail(email);
vo.setJoinDate(joinDate);
list.add(vo); // 설정된 MemberVO 객체를 다시 ArrayList에 저장.
}
rs.close();
pstmt.close();
con.close();
} catch (Exception e)
{
e.printStackTrace();
}
return list; // 조회한 레코드의 개수만큼 MemberVO객체를 저장한 ArrayList를 반환.
}
public void addMember(MemberVO memberVO)
{
try
{
Connection con = dataFactory.getConnection();
String id = memberVO.getId();
String pwd = memberVO.getPwd();
String name = memberVO.getName();
String email = memberVO.getEmail();
String query = "insert into t_member";
query += " (id,pwd,name,email)";
query += " values(?,?,?,?)"; // 순서대로 값을 assign 해야함.
System.out.println("prepareStatement: " + query);
pstmt = con.prepareStatement(query);
pstmt.setString(1, id);
pstmt.setString(2, pwd);
pstmt.setString(3, name);
pstmt.setString(4, email);
pstmt.executeUpdate();
pstmt.close();
} catch (Exception e)
{
e.printStackTrace();
}
}
public void delMember(String id)
{
try
{
Connection con = dataFactory.getConnection();
String query = "delete from t_member" + " where id=? ";
System.out.println("prespareStatement: " + query);
pstmt = con.prepareStatement(query);
pstmt.setString(1, id);
pstmt.executeUpdate();
pstmt.close();
} catch (Exception e)
{
e.printStackTrace();
}
}
}
--------------------------------
package sec05.ex01;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
/**
* Servlet implementation class MemberServlet
*/
@WebServlet("/show")
public class ShowMember 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 {
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
String id="", pwd="";
Boolean isLogon=false;
HttpSession session = request.getSession(false); // 세션이 존재하는 경우에만 세션리턴, 없으면 null반환
//세션 존재여부 check
if(session!= null) {
// 로그인 성공여부 check
isLogon=(Boolean)session.getAttribute("isLogon");
if(isLogon==true) {
id=(String)session.getAttribute("login.id");
pwd=(String)session.getAttribute("login.pwd");
out.print("<html><body>");
out.print("아이디 : " + id + "<br>");
out.print("비밀번호 : " + pwd + "<br>");
out.print("</html></body>");
} else {
response.sendRedirect("login3.html"); // 로그인 상태가 아니면 로그인창으로 이동.
}
} else {
response.sendRedirect("login3.html"); // 세션이 생성되지 않았으면 로그인창으로 이동.
}
}
}
-----------------------------
package sec02.ex01;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class TestServlet1
*/
@WebServlet("/first/test")
public class TestServlet1 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 {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
String context = request.getContextPath();
String url = request.getRequestURL().toString();
String mapping = request.getServletPath();
String uri = request.getRequestURI();
out.println("<html>");
out.println("<head>");
out.println("<title>Test Servlet1</title>");
out.println("</head>");
out.println("<body bgcolor='green'>");
out.println("<b>TestServlet1입니다.</b><br>");
out.println("<b>컨텍스트 이름 : " + context + "</b><br>");
out.println("<b>전체 경로 : " + url + "</b><br>");
out.println("<b>매핑 이름 : " + mapping + "</b><br>");
out.println("<b>URI : " + uri + "</b><br>");
out.println("</body>");
out.println("</html>");
out.close();
}
}
--------------------
package sec03.ex01;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
/**
* Servlet Filter implementation class EncoderFilter
*/
@WebFilter("/*") // webFilter 애너테이션을 이용해 모든 요청이 필터를 거치게 함.
public class EncoderFilter implements Filter { // 사용자 정의 필터는 반드시 Filter 인터페이스를 구현해야함.
ServletContext context;
/**
* Default constructor.
*/
public EncoderFilter() {
// TODO Auto-generated constructor stub
}
/**
* @see Filter#destroy()
*/
public void destroy() {
// TODO Auto-generated method stub
}
/**
* @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)
*/
// doFilter()안에서 실제 필터 기능을 구현.
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
System.out.println("doFilter 호출");
request.setCharacterEncoding("utf-8"); // 한글 인코딩 설정작업을 함.
String context = ((HttpServletRequest)request).getContextPath(); // 웹 어플리케이션의 컨텍스트 이름을 가져옴.
String pathinfo = ((HttpServletRequest)request).getRequestURI(); // 웹 브라우저에서 요청한 요청 URI를 가져옴.
String realPath = request.getRealPath(pathinfo); // 요청 URI의 실제 경로를 가져옴.
String mesg = " Context 정보 : " + context + "\n URI 정보 : " + pathinfo + "\n 물리적 경로 : " + realPath;
System.out.println(mesg);
chain.doFilter(request, response); // 다음 필터로 넘기는 작업을 수행함.
}
/**
* @see Filter#init(FilterConfig)
*/
public void init(FilterConfig fConfig) throws ServletException {
System.out.println("utf-8 인코딩.............");
context = fConfig.getServletContext();
}
}
---------------------------
package sec03.ex01;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class LoginTest
*/
@WebServlet("/login2")
public class LoginTest extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// request.setCharacterEncoding("utf-8"); // post방식으로 한글 전송 시 인코딩 작업을 생략함.
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
String user_name = request.getParameter("user_name");
String user_pw = request.getParameter("user_pw");
out.print("<html><body>");
out.print("이름은 " + user_name + "<br>");
out.print("비밀번호는 " + user_pw + "<br>");
out.println("</html></body>");
}
}
------------------------------
package sec04.ex02;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
/**
* Servlet implementation class LoginTest
*/
@WebServlet("/login3")
public class LoginTest2 extends HttpServlet {
private static final long serialVersionUID = 1L;
ServletContext context = null;
List user_list = new ArrayList();
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
context = getServletContext();
PrintWriter out = response.getWriter();
HttpSession session = request.getSession();
String user_id = request.getParameter("user_id");
String user_pw = request.getParameter("user_pw");
LoginImpl loginUser = new LoginImpl(user_id, user_pw);
if(session.isNew()) {
session.setAttribute("loginUser", loginUser);
user_list.add(user_id);
context.setAttribute("user_list", user_list);
}
out.println("<html><body>");
out.println("아이디는 " + loginUser.user_id + "<br>");
out.println("총 접속자수는 " + LoginImpl.total_user + "<br><br>");
out.println("접속 아이디 : <br>");
List list = (ArrayList)context.getAttribute("user_list");
for(int i=0; i<list.size(); i++) {
out.println(list.get(i)+"<br>");
}
out.println("<a href='logout?user_id="+user_id+"'>로그아웃 </a>");
out.println("</body></html>");
}
}
--------------------------------
package sec04.ex02;
import javax.servlet.annotation.WebListener;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
@WebListener
public class LoginImpl implements HttpSessionListener{
String user_id;
String user_pw;
static int total_user=0;
public LoginImpl() {
}
public LoginImpl(String user_id, String user_pw) {
this.user_id = user_id;
this.user_pw = user_pw;
}
public void sessionCreated(HttpSessionEvent arg0) {
System.out.println("세션 생성");
++total_user;
}
public void sessionDestroyed(HttpSessionEvent arg0) {
System.out.println("세션 소멸");
--total_user;
}
}
-------------------------
package sec04.ex02;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
/**
* Servlet implementation class LogoutTest
*/
@WebServlet("/logout")
public class LogoutTest extends HttpServlet {
private static final long serialVersionUID = 1L;
ServletContext context;
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doHandle(request, response);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doHandle(request, response);
}
protected void doHandle(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
HttpSession session = request.getSession();
String user_id = request.getParameter("user_id");
session.invalidate(); // 로그아웃시 세션을 소멸시킴.
List user_list = (ArrayList)context.getAttribute("user_list");
user_list.remove(user_id);
context.removeAttribute("user_list");
context.setAttribute("user_list", user_list);
out.println("<br>로그아웃했습니다.");
}
}