6일차

|

주요내용 : 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>로그아웃했습니다.");		
	}

}





'Bitcamp > BITCAMP - Servlet & JSP' 카테고리의 다른 글

8일차  (0) 2019.08.09
7일차  (0) 2019.08.08
5일차  (0) 2019.08.06
4일차  (0) 2019.08.05
3일차  (0) 2019.08.02
And