서블릿 : server + applet
자바 클래스 형태의 웹 애플리케이션
- 서블릿
- 클라이언트의 요청처리, 그 결과를 반환하는 servlet 클래스의 구현 규칙을 지킨 기술
- 자바를 사용하여 웹을 만들기 위해 필요한 기술
- 클라이언트 요청을 하면 그에 대한 결과를 전송해야하는데(동적으로 작동), 이 역활을 하는 것이 자바 프로그램
- ex) id, pw → 로그인 버튼 → 서버는 클라이언트 id, pw를 확인하고 다음 페이지 띄워줘야하는데 → 서블릿이 이 역활을 한다
더보기
브라우저를 통해 자바 클래스가 실행되도록 하기 위해서는 javax.servlet.http 패키지에서 제공하는 HttpServlet클래스를 상속받아 구현해야 한다.
JDK에서는 웹 애플리케이션을 제작할 수 있는 클래스가 제공되지 않고 톰캣을 설치하면 웹 애플리케이션을 제작할 수 있는 클래스가 제공되는데, 그 클래스가 HttpServlet이다.
웹 프로그래밍에서 가장 중요한 것은 “클라이언트가 어떻게 서버에 요청하는지”를 알아야 한다.
클라이언트는 서버에 get, post 두가지 방식 중 하나로 요청을 한다.
Get : 주소 창을 타고 넘어가기 때문에 서버로 보내는 데이터를 사용자가 그대로 볼수 있어 보안에 취약하다. 255자 이하의 적은 양의 데이터를 전송한다.
Post: html header를 타고 넘어가기 때문에 보안에 강하다. 대용량 데이터를 전송한다.
서버가 요청에 대한 처리를 마치고 클라이언트에게 결과를 되돌려주기 위해
HttpServletResponse로부터 PrintWriter형의 출력 스트림 객체를 얻어와야한다.
- HttpServlet 상속받는이유
- 요청에 대한 응답, 작업이 모두 기술되어 있기 때문에 상속받아야 한다.
- 서블릿을 사용하는 이유
- 복잡한 로직은 서블릿에 기술해 놓고 결과만을 jsp를 통해 클라이언트에게 제공된다
- 서블릿 라이플 사이클
- 서블릿 객체 생성 → init() → doGet(), doPost() → destroy()
- 클라이언트 요청이 있을때마다 doGet 또는 doPost 메소드 실행
- 서블릿이 더 이상 서비스를 하지 않을 때 destroy()메소드 호출
- 객체가 생성되면서 Init()메소드는 단 한번 호출됨 – 초기화 작업
- 한글인코딩 깨짐 방지
response.setContentType("text/html; charset=UTF-8");
request.setCharacterEncoding("UTF-8");
더보기
package part01;
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("/Member")
public class Member extends HttpServlet {
private static final long serialVersionUID = 1L;
public Member() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html; charsetUTF-8");
String id = request.getParameter("id");
String pw = request.getParameter("pass1");
// 출력
PrintWriter out = response.getWriter();
out.print("<body>");
out.print(id + "<br>");
out.print(pw + "<br>");
out.print("</body>");
out.close();
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
- javascript를 이용하여 id와 pw 공백을 체크하시오
더보기
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<head>
<title>ser02</title>
<script type="text/javascript" src="ser02.js"></script>
</head>
<body>
<form action="Hello" method="get" name="fr">
아이디:<input type="text" name="id"><br>
나이:<input type="text" name="age"><br>
<input type="submit" value="전송" onclick="return check()" >
</form>
</body>
function check(){
if((fr.id.value == "") || (fr.age.value == "")) {
alert("아이디와 비밀번호를 모두 입력하세요");
return false;
}
return true;
}
@WebServlet("/Hello")
public class Hello extends HttpServlet {
private static final long serialVersionUID = 1L;
public Hello() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html; charsetUTF-8");
String id = request.getParameter("id");
int age = Integer.parseInt(request.getParameter("age"));
PrintWriter out = response.getWriter();
out.print(id + "<br>");
out.print(age + "<br>");
out.close();
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
- 선택한 값을 가지고 서블릿을 통해 페이지 이동
더보기
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<title>serMain</title>
<body>
<form action="ser01" method="get">
성별:
<input type="radio" name="gender" value="m">남자
<input type="radio" name="gender" value="f">여자
<input type="submit">
</form>
</body>
@WebServlet("/ser01")
public class ser01 extends HttpServlet {
private static final long serialVersionUID = 1L;
public ser01() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
RequestDispatcher dis = request.getRequestDispatcher("serRead.jsp");
dis.forward(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
<title>serRead</title>
<body>
<%
request.setCharacterEncoding("UTF-8");
String gen = request.getParameter("gender");
if(gen.equals("m")){
out.print("man");
} else {
out.print("women");
}
%>
</body>
- 회원가입 폼, js를 이용하여 비밀번호 체크 , 서블릿에서 처리
더보기
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>join</title>
<style>
body {background-color: aliceblue;}
table {width: 700px; }
table tr th{ border-bottom: 1px solid #666; height: 30px;}
table tr td{ border-bottom: 1px solid #666; height: 30px;}
.btnSet {
text-align: right;
border: none;
}
</style>
<script>
function setEmail() {
//선택한 값 저장할 곳
var email2 = document.getElementById("email2");
//메일 주소 선택할 곳
var email3 = document.getElementById("email3");
email2.value = email3.value;
}
function chk(){
//주민번호 체크
var pNum1 = addMem.persNum1.value;
var pNum2 = addMem.persNum2.value;
if(isNaN(pNum1) || isNaN(pNum2) ){
alert("주민번호는 숫자만 입력 가능합니다.");
return false;
}
//비밀번호 체크
var pw1 = addMem.pass1.value;
var pw2 = addMem.pass2.value;
if(pw1 != pw2){
alert("비밀번호가 틀렸습니다. ");
return false;
}
//전화번호
var tel = addMem.tel.value;
if(tel.indexOf("-") == -1){
alert("'-'을 포함해서 입력하세요");
addMem.tel.focus();
return false;
}
}
</script>
</head>
<body>
<h3>회원가입</h3>
<form action="JoinServlet" method="post" name="addMem" onsubmit="return chk()">
<table>
<tr>
<th>이름</th>
<td><input type="text" name="uName"></td>
</tr>
<tr>
<th>주민번호</th>
<td><input type="text" name="persNum1"> - <input type="text" name="persNum2"></td>
</tr>
<tr>
<th>아이디</th>
<td><input type="text" name="uid" required></td>
</tr>
<tr>
<th>비밀번호</th>
<td><input type="password" name="pass1" required></td>
</tr>
<tr>
<th>비밀번호 확인</th>
<td><input type="password" name="pass2" required></td>
</tr>
<tr>
<th>이메일</th>
<td>
<input type="text" name="email1"> @
<input id="email2" type="text" name="email2" value="">
<select id="email3" name="email3" onchange="setEmail()">
<option value="" selected disabled>메일주소선택</option>
<option value="naver.com">naver.com</option>
<option value="nate.com">nate.com</option>
<option value="google.com">gmail.com</option>
</select>
</td>
</tr>
<tr>
<th>우편번호</th>
<td><input type="text" name="postNum"></td>
</tr>
<tr>
<th>주소</th>
<td><input type="text" name="addr1"> <input type="text" name="addr2"></td>
</tr>
<tr>
<th>전화번호</th>
<td><input type="tel" name="tel"></td>
</tr>
<tr>
<th>직업</th>
<td>
<select name="job" multiple>
<option value="학생">학생</option>
<option value="컴퓨터/인터넷">컴퓨터/인터넷</option>
<option value="언론">언론</option>
</select>
</td>
</tr>
<tr>
<th>메일/SMS 정보 수신</th>
<td>
<input type="radio" name="chkSms" value="y">수신
<input type="radio" name="chkSms" value="n">수신 거부
</td>
</tr>
<tr>
<td colspan="2" class="btnSet">
<input type="submit" value="회원가입">
<input type="reset" value="취소">
</td>
</tr>
</table>
</form>
</body>
</html>
@WebServlet("/JoinServlet")
public class JoinServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public JoinServlet() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// response.getWriter().append("Served at: ").append(request.getContextPath());
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html; charset=UTF-8");
request.setCharacterEncoding("UTF-8");
//값 받아오기
String name = request.getParameter("uName");
String persNum1 = request.getParameter("persNum1");
String persNum2 = request.getParameter("persNum2");
String uid = request.getParameter("uid");
String pass2 = request.getParameter("pass2");
String email1 = request.getParameter("email1");
String email2 = request.getParameter("email2");
String postNum = request.getParameter("postNum");
String addr1 = request.getParameter("addr1");
String addr2 = request.getParameter("addr2");
String tel = request.getParameter("tel");
String job = request.getParameter("job");
String chkSms = request.getParameter("chkSms");
String sms;
if(chkSms.equals("y")) {
sms="받겠습니다.";
} else {
sms="받지 않겠습니다.";
}
//저장 정보 출력하기
PrintWriter out = response.getWriter();
out.print("<body>");
out.print(name +"님 반갑습니다." + "<br>");
out.print("주민번호: "+persNum1+"-"+persNum2 + "<br>");
out.print("아이디는 "+uid +"이고 비밀번호는 "+pass2 + "입니다. <br>");
out.print("메일주소: "+email1+"@"+email2 + "<br>");
out.print("우편번호: "+postNum + "<br>");
out.print("주소: "+addr1+" "+addr2 + "<br>");
out.print("전화번호: "+tel + "<br>");
out.print("직업은 "+job +"이고 sms는 "+sms+ "<br>");
out.print("</body>");
out.close();
}
}
728x90
728x90
'JSP' 카테고리의 다른 글
DB 전까지의 문제 (0) | 2022.07.14 |
---|---|
DB 연동 (0) | 2022.07.14 |
JAVABEANS (0) | 2022.07.12 |
jsp review (0) | 2022.07.12 |
액션 태그 (0) | 2022.07.11 |