Servlet - 기초

2025. 2. 17. 16:39·Web

0. 프로젝트 만드는 순서

  1. HTML
  2. CSS
  3. Javascript
  4. .java 파일 (servlet => post, get)
  5. web.xml 등록
  6. Controller에서 Front 값을 이관
  7. View가 필요할 경우 .jsp파일도 생성 

1. 로그인 만들기

login.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Servlet + 로그인 만들기</title>
</head>
<body>
<form id="frm" method="get" action="./loginok.do" onsubmit="return ck()">
아이디 : <input type="text" name="mid"><br>
패스워드 : <input type="password" name="mpass"><br>
<input type="submit" value="로그인">
</form>
</body>

<script>
function ck(){
	if(frm.mid.value==""){
		alert("아이디를 입력하세요!");
		frm.mid.focus();
		return false;		
	} else if(frm.mpass.value==""){
		alert("패스워드를 입력하세요!");
		frm.mpass.focus();
		return false;
	} else{
		return true;
	}
}
</script>
</html>
  • name속성은 Backend에게 전달되는 속성
  • submit에 onclick : 더블이벤트 발생
    => form으로 묶은 후 form에 onsubmit 사용    //submit을 사용하면 무조건 form 사용하기 
  • form 사용 및 name 속성 이름을 이미 사용하였으므로 getElementById 없이 사용
  • return 사용한 이유는 input에 submit을 사용했기 때문 

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns="http://xmlns.jcp.org/xml/ns/javaee"
	xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
	version="3.1">
	<display-name>web</display-name>

	<servlet>
		<servlet-name>loginok</servlet-name>	<!-- 변수명느낌 -->
		<servlet-class>web.login</servlet-class>
	</servlet>
	<servlet-mapping>
		<servlet-name>loginok</servlet-name>
		<url-pattern>/loginok.do</url-pattern>
	</servlet-mapping>
    
</web-app>
  • servlet-name : 가상의 이름이며, 동일한 이름은 사용하지 못함
  • servlet-class : package + java 클래스명 
  • url-pattern : 해당 java파일을 WEB에서 가상의 경로로 사용할 수 있도록 설정  
  • 8줄씩 한 세트 : 한페이지 만들때마다 한세트씩 만들기 
  • java파일이나 xml파일 수정시 꼭 서버를 재시작 해야 반영

login.java (servlet)

package web;

import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

//HttpServlet : java를 웹에서 사용할 수 있도록 처리하는 클래스 
public class login extends HttpServlet {
	//serialVersionUID : Backend 가상의 페이지 일련번호
	private static final long serialVersionUID = 1L;

	//doGet, doPost : Front-end가 Form태그에 method를 설정한 사항과 동일한 정보를 처리하는 메소드
	//request : Front-end에게 전달받는 값
	//response : Back-end가 처리한 결과값을 출력하는 역할 
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		//받는언어세팅 : Front의 한글일 경우 한글깨짐 방지 (언어셋)
		request.setCharacterEncoding("utf-8");	
		//결과 내용을 한글 깨짐 없이 사용하는 언어셋 세팅  
		response.setCharacterEncoding("utf-8");
		response.setContentType("text/html");
        
		String mid = request.getParameter("mid");		//getParameter : Front-end에서 전달 받는 name 이름을 말함 
		String mpass = request.getParameter("mpass");
		//PrintWriter : javascript를 핸들링 
		PrintWriter pw = response.getWriter();	//response.getWriter() : 현재 패이지에 문자로 출력
		
		if(mid.equals("hong") && mpass.equals("a123456")) {	//무조건 문자로 날아옴.  그리고 입력받은 값이니까 equals 사용 
			pw.write("<script>"
					+"alert('정상적으로 로그인 하셨습니다.');"
					+"</script>"
					);
		}else {
			pw.write("<script>"
					+"alert('아이디 및 패스워드를 다시 확인하세요');"
					+"location.href='login.html';"
					+"</script>");	
		}
	}
}
  • HttpServlet : java를 웹에서 사용할 수 있도록 처리하는 클래스
  • doGet, doPost : Front-end가 Form태그에 method를 설정한 사항과 동일한 정보를 처리하는 메소드
  • request : Front-end에게 전달받는 값
  • response : Back-end가 처리한 결과값을 출력하는 역할 
  • 받는언어세팅    Front의 한글일 경우 한글깨짐 방지 (언어셋)
    • request.setCharacterEncoding("utf-8"); 
  • 결과 내용을 한글 깨짐 없이 사용하는 언어셋 세팅 
    • response.setCharacterEncoding("utf-8");
    • response.setContentType("text/html");
  • getParameter : Front-end에서 전달 받는 name 이름을 말함 
  • response.getWriter() : 현재 패이지에 문자로 출력

2. 할인율 계산

pay.html

<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>상품 할인 및 적립금 사용 적용</title>
</head>
<body>
	<form id="frm" method="post" action="./payok.do">
		<fieldset style="height: 90px;">
			<legend>상품 할인 및 적립금 사용 적용</legend>
			결제금액 : <input type="text" value="50000" name="money" class="m1" readonly>
			원 | 할인율 : <input type="text" class="m2" name="sales" value="0" maxlength="2"> % 할인 |
			적립금 사용 : <input type="text" class="m1" name="point" value="0" maxlength="4"> <input
				type="button" value="적용하기" class="btn"> <span class="view">
				<font class="font1"> 최종 결제 금액 : </font> 
				<div class="total">50000</div>
			</span>
		</fieldset>
	</form>
	<input type="button" value="결제하기" class="btn" onclick="step_pay()">
</body>
<script>
function step_pay(){
	if(frm.sales.value==""){
		alert("할인율을 입력해주세요");
		frm.sales.value = 0;
	}
	else if(frm.point.value==""){
		alert("적립금을 입력해주세요");
		frm.point.value = 0;
	}else{
		frm.submit();
	}
}
</script>
</html>
  • div, span => name 사용 불가능
  • 버튼은 form밖에 나와있어도 된다 //submit은 불가능
  • return은 submit에만 사용 

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns="http://xmlns.jcp.org/xml/ns/javaee"
	xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
	version="3.1">
	<display-name>web</display-name>
	
	<servlet>
	<servlet-name>payok</servlet-name>
	<servlet-class>web.payok</servlet-class>
	</servlet>
	<servlet-mapping>
	<servlet-name>payok</servlet-name>
	<url-pattern>/payok.do</url-pattern>
	</servlet-mapping>

</web-app>

 

payok.java (servlet)

package web;

import java.io.IOException;
import java.io.PrintWriter;
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;

public class payok extends HttpServlet {
	private static final long serialVersionUID = 1L;

	//Controller (Front-end 전송된 값 처리 및 사칙연산 처이 후 View 전달)
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");
		response.setContentType("text/html");
		response.setCharacterEncoding("utf-8");
		PrintWriter pw = response.getWriter();	//javascript
		
		try {
			//Front-end 값을 받는 역할 
			String m = request.getParameter("money");
			String s = request.getParameter("sales");
			String p = request.getParameter("point");
			
			//해당 데이터를 숫자로 변환 후 사칙연산 
			int product_m = Integer.parseInt(m);
			int product_s = Integer.parseInt(s);
			int product_p = Integer.parseInt(p);
			int total = (product_m - (product_m *product_s) / 100) - product_p;
			
			//Controller => View(.jsp에서 사용할 수 있도록 함) 
			request.setAttribute("product_m", product_m);
			request.setAttribute("product_s", product_s);
			request.setAttribute("product_p", product_p);
			request.setAttribute("total", total);
			
			//RequestDispatcher : View를 선언하여 웹페이지에 출력되도록 설정 
			RequestDispatcher rd = request.getRequestDispatcher("/payok.jsp");	//여기에 결과값 뿌릴거야 
			rd.forward(request, response);	//forward : Controller에서 사용된 정보를 jsp로 이관 
		}
		catch (Exception e) {	//Front-end값이 숫자로 변환시 비정상적일 경우 해당 스크립트 실행
			pw.write("<script>"
					+ "alert('올바른 값이 전달되지 않았습니다.');"
					+ "history.go(-1);"	//이전페이지로 이동 
					+ "</script>");
		}
	}
}
  • 1.Front-end
    2. Back-end => Controller => View(JSP)

    payok.java(do) : controller
    payok.jsp : view
    Database : module

  • RequestDispatcher : View를 선언하여 웹페이지에 출력되도록 설정 
  • forward : Controller에서 사용된 정보를 jsp로 이관 

payok.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <%
    //getAttribute : Controller에서 setAttribute로 생성된 값을 이관받음
    int product_m = (int)request.getAttribute("product_m");
    int product_s = (int)request.getAttribute("product_s");
    int product_p = (int)request.getAttribute("product_p");
    int total = (int)request.getAttribute("total");	//getAttribute는 문자형이기 때문에 int로 받을거면 변환해줘야함 
    %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>결제 진행 사항</title>
</head>
<body>
<%-- : jsp 주석 
out.print : <%=%> 
--%>
상품금액 : <% out.print(product_m); %><br>
할인율 : <%=product_s%>%<br>
적립금 : <%=product_p%><br>
최종 결제 금액 : <%=total%><br>
<input type="button" value="결제하기"> 
</body>
</html>
  • getAttribute : Controller에서 setAttribute로 생성된 값을 이관받음
  • jsp 주석 : <%-- --%>
  • <% %> : html 사이에 jsp코드 삽입
    • <%= %> : 값 출력    //<% out.print() %>의 줄임

3. 아이디 찾기

idsearch.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form id="frm" method="post" action="./idsearch.do">
고객명 : <input type="text" name="mname"><br>
연락처 : <input type="text" name="mcall">"-"미포함 숫자만 입력하세요<br>
이메일 : <input type="text" name="memail"><br>
<input type="button" value="아이디찾기" class="btn" onclick="step_id()">
</form>
</body>
<script>
function step_id(){
	if(frm.mname.value==""){
		alert("고객명을 입력해주세요");
	}else if(frm.mcall.value==""){
		alert("연락처를 입력해주세요");
	}else if(frm.memail.value==""){
		alert("이메일을 입력해주세요");
	}else{
		frm.submit();
	}
}
</script>
</html>

 

idsearch.java (servlet)

package web;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class idsearch extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");
		response.setCharacterEncoding("utf-8");
		response.setContentType("text/html");
		PrintWriter pw = response.getWriter();
		
		try {
			String mname = request.getParameter("mname");
			String mcall = request.getParameter("mcall");
			String memail = request.getParameter("memail");
			String mid = "";
			
			if(mname.equals("홍길동")&&mcall.equals("01010041919")&&memail.equals("hong@naver.com")) {
				mid = "hong2025";
			}else {
				mid = "가입정보가 확인 되지 않습니다.";
			}
			request.setAttribute("mid", mid);
			
			RequestDispatcher rd = request.getRequestDispatcher("/idsearch.jsp");	//여기에 결과값 뿌릴거야 
			rd.forward(request, response);
			
		}catch (Exception e) {
			pw.write("<script>"
					+ "alert('올바른 값이 전달되지 않았습니다.');"
					+ "history.go(-1);"	 
					+ "</script>");
		}
	}
}

 

idsearch.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <%
    String mid = (String)request.getAttribute("mid");
    %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
아이디 : <%=mid%>
</body>
</html>

 

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns="http://xmlns.jcp.org/xml/ns/javaee"
	xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
	version="3.1">
	<display-name>web</display-name>
    
	<servlet>
	<servlet-name>idsearch</servlet-name>
	<servlet-class>web.idsearch</servlet-class>
	</servlet>
	<servlet-mapping>
	<servlet-name>idsearch</servlet-name>
	<url-pattern>/idsearch.do</url-pattern>
	</servlet-mapping>

</web-app>

idsearch.html 선생님코드 

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>아이디 찾기</title>
</head>
<body>
<form id="frm" method="post" action="./idsearch_t.do">
고객명 : <input type="text" name="mname" required><br>
연락처 : <input type="tel" pattern="[010|011]\d{3,4}\d{3,4}" name="mtel" maxlength="11" required>"-"미포함 숫자만 입력하세요<br>
이메일 : <input type="text" pattern="[a-zA-Z0-9._-]+@" name="memail" required><br>	<!-- 이메일 패턴 도메인부분은 한글일수도있으니 설정 ㄴㄴ -->
<input type="submit" value="아이디찾기">
</form>
</body>
</html>
  • required(submit전용) : 무조건 필수로 값을 받는 속성
    • HTML5 전용
    • 웹, 모바일에서 요즘 많이 쓰임  
  • pattern : 정규식 코드 형태로 규칙적인 데이터를 입력하도록 설정하는 속성 
    • (,) 형식
    • [|] 형식 
    • {,} 자릿수
    • \d(숫자), \b(단어)  파티션 입력값의 범위를 설정가능 
    • \D(문자) 
    • =>자바스크립트가 필요없어짐 

idsearch.java (servlet) 선생님코드

package web;

import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class idsearch_t extends HttpServlet {
	private static final long serialVersionUID = 1L;
	PrintWriter pw = null;
 
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");
		response.setContentType("text/html;charset=utf-8");	//text/html : do를 가상으로 html로 만들겠다는 뜻 
		//API쓸땐 json/application 이런식으로 다르게 써야함
		
		try {
			this.pw = response.getWriter();
			String mname = request.getParameter("mname");
			String mtel = request.getParameter("mtel");
			String memail = request.getParameter("memail");
			String result = "";	//결과를 View(jsp)에 전달할 변수값 
			
			if(mname.equals("홍길동") && mtel.equals("01010041919") && memail.equals("hong@naver.com")) {
				result = "hong2025";	
			}else {
				result = "가입정보가 확인되지 않습니다.";
			}
			request.setAttribute("result", result);	//결과값 jsp로 전달 
			RequestDispatcher rd = request.getRequestDispatcher("./idsearch.jsp");
			rd.forward(request, response);
		}catch (Exception e) {
			pw.write("<script>"
					+ "alert('올바른 값이 전달되지 않았습니다.');"
					+ "history.go(-1);"	 
					+ "</script>");
		}finally {
			this.pw.close();
		}
	}
}

 

idsearch.jsp 선생님코드 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <%
    //Controller에서 데이터 값을 이관
    String result = (String)request.getAttribute("result");
    %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>아이디 찾기 검색결과</title>
</head>
<body>
아이디 : <%=result%>
</body>
</html>
저작자표시 비영리 변경금지 (새창열림)
'Web' 카테고리의 다른 글
  • Servlet - 응용문제 [회원 가입]
  • Servlet - 기초2
  • 공지사항 게시판 ver.2
  • 응용문제 - html + jsp
9na0
9na0
응애
  • 9na0
    구나딩
    9na0
  • 전체
    오늘
    어제
    • 분류 전체보기 (211)
      • Web (118)
      • Java (28)
      • 데이터베이스 (14)
      • 세팅 (12)
      • 과제 (3)
      • 쪽지시험 (2)
      • 정보처리기사 (4)
      • 서버 (25)
  • 블로그 메뉴

    • 링크

      • 포폴
      • 구깃
    • 공지사항

    • 인기 글

    • 태그

      net1
      file25
      notice_writer
      noticewriteok
      macbook pro m4
      file24
      re_java10
      io_dto
      re2
      net4
      net5~10
      file25_t
      net3
      spring-boot
      Oracle
      exam1_1~10
      java_io1~10
      ab1
      datalist
      net2
    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.3
    9na0
    Servlet - 기초
    상단으로

    티스토리툴바