${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");
}
}
'쌍용강북교육센터 > 10월' 카테고리의 다른 글
1018~1019_JSP/Servlet : 자유게시판 만들기 :: ★중요★흐름, 파라미터생각해보기 (0) | 2021.10.20 |
---|---|
1018_JSP/Servlet : 게시판 페이징 처리 클래스만들기 // 복습 (0) | 2021.10.20 |
1012~1013_Servlet/JSP : 서블릿 (ch04,ch05 예제포함), 파라미터, forward (0) | 2021.10.14 |
1008_Servlet/JSP : 검색 (0) | 2021.10.10 |
1008_Servlet/JSP : 파라미터 전송 GET 방식 / POST 방식 / 서버에 데이터 보내기 전 유효성 검사 (0) | 2021.10.10 |