Servlet 로그인 만들기 post로 만들어야 한다.
get방식은 값이 노출이 된다.
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>로그인 화면</title>
<style type="text/css">
/* 인라인 스타일의 css */
#LoginFormArea {
text-align: center;
width: 250px;
margin: auto;
border: 1px solid red;
}
h1 {
text-align: center;
color: blue;
}
</style>
</head>
<body>
<h1>로그인</h1>
<section id="LoginFormArea">
<form action="Login" method="get">
<label>아이디 : </label> <!-- label은 브라우저에 글자를 표시하는 테그 -->
<!-- required속성 : 반드시 입력하라는 속성 -->
<input type="text" name="id" id="id" required="required">
<br/><br/>
<label>비밀번호 : </label>
<input type="password" name="passwd" id="passwd" required="required">
<br/><br/>
<input type="submit" value="로그인">
</form>
</section>
</body>
</html>
Servlet
package kr.gov.servlet4;
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;
@WebServlet("/Login") //form테그 action Login을 찾는다.
public class LoginServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public LoginServlet() {
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("doGet() 호출됨");
//클라이언트가 요청한 파라메타 값들을 인코딩 해주는 코드
request.setCharacterEncoding("utf-8");
//클라이언트에게서 넘어오는 id, 비밀번호 값을 받고 인코딩 설정후 출력스트림 얻어 화면에 출력
String id = request.getParameter("id"); //id값
String passwd = request.getParameter("passwd"); //id="passwd"
response.setContentType("text/html; charset=utf-8");
PrintWriter writer = response.getWriter();
writer.println("아이디 : " + id + "<br/>");
writer.println("비밀번호 : " + passwd + "<br/>");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("doPost() 호출됨");
//클라이언트가 요청한 파라메타 값들을 인코딩 해주는 코드
request.setCharacterEncoding("utf-8");
//클라이언트에게서 넘어오는 id, 비밀번호 값을 받고 인코딩 설정후 출력스트림 얻어 화면에 출력
String id = request.getParameter("id"); //id값
String passwd = request.getParameter("passwd"); //id="passwd"
response.setContentType("text/html; charset=utf-8");
PrintWriter writer = response.getWriter();
writer.println("아이디 : " + id + "<br/>");
writer.println("비밀번호 : " + passwd + "<br/>");
}
}
doPost() 호출됨
post 방식 강아지 선택 예제
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>강아지</title>
</head>
<body>
<h1>당신이 좋아하는 강아지를 선택하세요!</h1>
<form action="choiceDog" method="post">
<input type="checkbox" name="dog" value="pu.ing" />푸들
<input type="checkbox" name="dog" value="jin.ing" />진돗개
<input type="checkbox" name="dog" value="pung.ing" />풍산개
<input type="checkbox" name="dog" value="sap.ing" />삽살개
<input type="submit" value="선택" />
</form>
</body>
</html>
getParameterValues 배열로 리턴
package kr.gov.servlet5;
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;
@WebServlet("/choiceDog")
public class DogChoiceServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public DogChoiceServlet() {
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html; charset=utf-8");
PrintWriter writer = response.getWriter();
String[] dog = request.getParameterValues("dog");
writer.println("<html>");
writer.println("<head>");
writer.println("</head>");
writer.println("<body bgcolor = 'green'>");
writer.println("<table align='center' bgcolor='yellow'>");
writer.println("<tr>");
for (int i = 0; i < dog.length; i++) {
writer.println("<td>");
writer.println("<img src='"+dog[i]+"'>");
writer.println("</td>");
}
writer.println("</tr>");
writer.println("</table>");
writer.println("</body>");
writer.println("</html>");
writer.close();
}
}
Servlet 작동방식
servlet 스레드 생성 servlet객체생성
요청에 대해서 스레드로 처리
was = 자바
tomcat = 자바
메모리에 있다면 또 만들지 않고 그대로 실행됨
Servlet 라이프 사이클
라이프 사이클 확인 예제 init
package kr.gov.lifecycle;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/LC")
public class LifecycleServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
@Override
public void init() throws ServletException {
System.out.println("init() 호출");
}
public LifecycleServlet() {
System.out.println("생성자 호출");
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("doGet() 호출");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("doPost() 호출");
}
@Override
public void destroy() {
System.out.println("destroy() 호출");
}
}
순서
servlet 생성자 호출
init 호출
doGet 호출
서버 종료시
destroy 호출
servlet 어노테이션 함수
@PostConstruct
@PreDestroy
세분화시킨 어노테이션
package kr.gov.lifecycle;
import java.io.IOException;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/LC")
public class LifecycleServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/*
* init() : ctrl+space 눌러 직접 입력
* 최초 한번만 실행 됨.
*/
@Override
public void init() throws ServletException {
System.out.println("init() 호출");
}
public LifecycleServlet() {
System.out.println("생성자 호출");
}
/*
* 실행되었을 때, 서블릿객체가 메모리에 로딩되고, 계속 재사용함.
* 주소표시줄에 새고로고침을 계속하면 doGet()호출되는것 볼수 있음.
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("doGet() 호출");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("doPost() 호출");
}
//서버를 중지시켜보면 destroy()가 호출되는 것을 볼수 있음.
@Override
public void destroy() {
System.out.println("destroy() 호출");
}
/*
* 오버라이딩 개념아님. 직접 메서드 만들어주는 것임.
* 선처리 부분에 해당함.
* init()메서드가 호출되기 전에 먼저 실행함.
* @PostConstruct어노테이션 컴파일러에게 따로 지시함.
*/
@PostConstruct
private void initPostConstructor() {
System.out.println("initPostConstructor() 선처리");
}
/*
* 오버라이딩 개념아님. 직접 메서드 만들어주는 것임.
* 후처리 부분에 해당함.
* destroy()메서드가 호출된 후에 먼저 실행함.
* @PreDestroy어노테이션 컴파일러에게 따로 지시함.
*/
@PreDestroy
private void destroyPredestroy() {
System.out.println("destroyPredestroy() 후처리");
}
}
순서
생성자 호출
initPostConstructor() 선처리
init() 호출
doGet() 호출
서버 중지할 경우
destroy() 호출
destroyPredestroy() 후처리
service 메서드
package kr.gov.lifecycle;
import java.io.IOException;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/LC")
public class LifecycleServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/*
* init() : ctrl+space 눌러 직접 입력
* 최초 한번만 실행 됨.
*/
@Override
public void init() throws ServletException {
System.out.println("init() 호출");
}
public LifecycleServlet() {
System.out.println("생성자 호출");
}
/*
* 실행되었을 때, 서블릿객체가 메모리에 로딩되고, 계속 재사용함.
* 주소표시줄에 새고로고침을 계속하면 doGet()호출되는것 볼수 있음.
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("doGet() 호출");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("doPost() 호출");
}
/*
* doGet(), doPost()가 없다면 service()가 호출되고,
* 세가지 메서드가 다 존재하여도 service()가 호출됨.
* service()가 호출시에는 get,post방식 중 어떤 메서드 방식으로 호출이 되었는지
* 확인안됨. 그래서 doGet(), doPost()메서드를 사용함.
*/
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("service() 호출");
}
//서버를 중지시켜보면 destroy()가 호출되는 것을 볼수 있음.
@Override
public void destroy() {
System.out.println("destroy() 호출");
}
/*
* 오버라이딩 개념아님. 직접 메서드 만들어주는 것임.
* 선처리 부분에 해당함.
* init()메서드가 호출되기 전에 먼저 실행함.
* @PostConstruct어노테이션 컴파일러에게 따로 지시함.
*/
@PostConstruct
private void initPostConstructor() {
System.out.println("initPostConstructor() 선처리");
}
/*
* 오버라이딩 개념아님. 직접 메서드 만들어주는 것임.
* 후처리 부분에 해당함.
* destroy()메서드가 호출된 후에 먼저 실행함.
* @PreDestroy어노테이션 컴파일러에게 따로 지시함.
*/
@PreDestroy
private void destroyPredestroy() {
System.out.println("destroyPredestroy() 후처리");
}
}
생성자 호출
initPostConstructor() 선처리
init() 호출
service() 호출
HTML form 태그와 각종테그 사용 예제
request객체로부터 값을 얻고, 응답할시에는 response객체를 이용함.
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>회원가입</title>
</head>
<body>
<form action="join" method="post">
이름 : <input type="text" name="name" size="10"/> <br/>
아이디 : <input type="text" name="id" size="10"/> <br/>
비밀번호 : <input type="password" name="pw" size="10"/> <br/>
<!-- check박스는 다중선택이 가능함. name이라는 속성은 반드시 동일한 값으로 설정해야함. -->
취미 : <input type="checkbox" name="hobby" value="read"/>독서
<input type="checkbox" name="hobby" value="cook"/>요리
<input type="checkbox" name="hobby" value="run"/>조깅
<input type="checkbox" name="hobby" value="swim"/>수영
<input type="checkbox" name="hobby" value="bycle"/>라이딩
<br/>
<!-- radio는 단 하나만 선택 가능함. name이라는 속성은 반드시 동일한 값으로 설정해야함.-->
<!-- checked속성 : 화면이 나타날때, 이미 선택되어서 나타내어주는 속성 -->
전공 : <input type="radio" name="major" value="kor" checked="checked"/>국문과
<input type="radio" name="major" value="eng"/>영문과
<input type="radio" name="major" value="math"/>수학과
<input type="radio" name="major" value="des"/>디자인과
<br/>
<select name="protocal">
<option value="http" selected="selected">HTTP</option>
<option value="ftp" >FTP</option>
<option value="smtp" >SMTP</option>
<option value="telnet" >TELNET</option>
</select>
<br/>
<input type="submit" value="전송">
<input type="reset" value="초기화">
</form>
</body>
</html>
package kr.gov.httpservlet;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Arrays;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/join")
public class JoinServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public JoinServlet() {
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("doPost() 호출");
/*
* html의 form테그에서 클라이언트가 입력하고 전송한 값을 직접 request객체의
* 메서드로 얻어서 출력해줌.
* request, response객체는 톰켓 서버가 자동으로 생성 시켜준것임.
* 즉 request객체로부터 값을 얻고, 응답할시에는 response객체를 이용함.
*/
//한글 깨짐 방지하기 위해서 설정함.
request.setCharacterEncoding("UTF-8");
String name = request.getParameter("name");
String id = request.getParameter("id");
String pw = request.getParameter("pw");
//체크박스 : 다중값으로 String[]타입으로 리턴함.
String[] hobby = request.getParameterValues("hobby");
String major = request.getParameter("major"); //전공
String protocal = request.getParameter("protocal"); //프로토콜
response.setContentType("text/html; charset=UTF-8");
PrintWriter writer = response.getWriter();
writer.println("<html><head></head><body>");
writer.println("이름 : " +name+ "<br/>");
writer.println("아이디 : " +id+ "<br/>");
writer.println("비밀번호 : " +pw+ "<br/>");
writer.println("취미 : " +Arrays.toString(hobby)+ "<br/>");
writer.println("전공 : " +major+ "<br/>");
writer.println("전송방식 : " +protocal+ "<br/>");
writer.println("</body></html>");
writer.close(); //스트림 닫기
}
}