${pageContext.request.contextPath} 를 이용해서 cp의 이름을 가져온 후, 

원하는 주소창의 주소로 

여기서는 form 태그 안에 <%=cp>/insa/write.do 넣어준다. 그러면 서블릿을 통해 이 주소와 같으면 알아서 서버에서 클라이언트로 forward해준다.

 

서블릿에서 @WebServlet 이라는 annotation을 통해서 주소와 서블릿을 매핑시켜 /insa/* 라고 주면 주소창에 insa 밑에 뭐라고 주든(뭐든지) 이 서블릿 안으로 들어온다. GET방식이든 POST방식이든 process라는 메소드를 실행하고, 그 안에서 주소창에 준 주소에 따라서 jsp를 실행한다. 

 

더보기

insa.jsp

<%@ page contentType="text/html; charset=UTF-8"%>
<%@ page trimDirectiveWhitespaces="true"%>
<%
	String cp = request.getContextPath();
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<link rel="icon" href="data:;base64,iVBORw0KGgo=">
</head>
<body>

<form action="<%=cp%>/insa/write_ok.do" method="post">
	<p> 이름 : <input type="text" name="name" required="required"> </p>
	<p> 생년월일 : <input type="date" name="birth" required="required"> </p>
	<p> 전화번호 : <input type="text" name="phone" required="required"> </p>
	<p> 기본급 : <input type="text" name="salary" required="required" pattern="\d+"> </p>
	<p> 수당 : <input type="text" name="bonus" required="required" pattern="\d+"> </p>
	<p>
		<button type="submit">등록하기</button> <%-- required가 먹으려면 button=submit 사용 --%>
		<button type="reset">다시입력</button>
	</p>
</form>

</body>
</html>

 

result.jsp

<%@ page contentType="text/html; charset=UTF-8"%>
<%@ page trimDirectiveWhitespaces="true"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<link rel="icon" href="data:;base64,iVBORw0KGgo=">
</head>
<body>

<h3>인사관리</h3>

<p> 이름 : ${name}</p>
<p> 이름 : <%=request.getAttribute("name") %></p>
<p> 생년월일 : ${birth}</p>
<p> 전화번호 : ${phone}</p>
<p> 기본급 : ${salary}</p>
<p> 수당 : ${bonus}</p>
<p> 세금 : ${tax}</p>
<p> 실수령액 : ${pay}</p>
<p> 나이 : ${age}</p>
<p> 띠 : ${tti}</p>
</body>
</html>

EL을 이용해서 표현식보다 더 쉽게 attribute를 받아서 쓸 수 있다.

 

 

insaServlet

package ch02.insa;

import java.io.IOException;
import java.text.NumberFormat;

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 com.util.DateUtil;

// insa 밑에 뭐가 오든 InsaServlet으로 와라. 서블릿이 우선순위가 높음
// 들어올 때는 GET 방식으로 들어옴
@WebServlet("/insa/*") // 주소와 서블릿 매핑
public class InsaServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		process(req, resp);
	}

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		process(req, resp);
	}
	
	protected void process(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		req.setCharacterEncoding("utf-8");
		
		String uri = req.getRequestURI();
		
		if(uri.indexOf("write.do") != -1) {
			// 입력 폼 출력
			writeForm(req, resp);
		} else if(uri.indexOf("write_ok.do") != -1) {
			// 전송 받은 파라미터를 이용하여 연산
			writeSubmit(req, resp);
		}
	}
	
	protected void forward(HttpServletRequest req, HttpServletResponse resp, String path) throws ServletException, IOException {
		RequestDispatcher rd = req.getRequestDispatcher(path);
		rd.forward(req, resp);
	}

	protected void writeForm(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		// 입력 폼 출력
		forward(req, resp, "/WEB-INF/views/insa/insa.jsp");
	}
	
	protected void writeSubmit(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		// 클라이언트가 보낸 파라미터 정보
		
		String name = req.getParameter("name");
		String birth = req.getParameter("birth");
		String phone = req.getParameter("phone");
		int salary = Integer.parseInt(req.getParameter("salary")); 
		int bonus = Integer.parseInt(req.getParameter("bonus")); 
		
		DateUtil util = new DateUtil();
		int age = util.toAge(birth);
		String t = util.toTti(Integer.parseInt(birth.substring(0,4)));
		
		int total = salary+bonus;
		int tax = 0;
		if(total>=3000000)
			tax = (int)(total*0.03);
		else if(total>=2000000)
			tax = (int)(total*0.02);
		int pay = total-tax;
		
		NumberFormat nf = NumberFormat.getCurrencyInstance();
		
		// JSP에 보낼 속성
		
		req.setAttribute("name", name);
		req.setAttribute("birth", birth);
		req.setAttribute("phone", phone);
		req.setAttribute("age", age);
		req.setAttribute("tti", t);
		
		req.setAttribute("salary", nf.format(salary) );
		req.setAttribute("bonus", nf.format(bonus) );
		req.setAttribute("tax", nf.format(tax) );
		req.setAttribute("pay", nf.format(pay) );
		
		forward(req, resp, "/WEB-INF/views/insa/result.jsp");
	}


	
}

 

+ Recent posts