on
1014_JSP/Servlet : Servlet을 이용해서 간단한 인사관리 페이지 만들기
1014_JSP/Servlet : Servlet을 이용해서 간단한 인사관리 페이지 만들기
${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(); %> Insert title here 이름 : 생년월일 : 전화번호 : 기본급 : 수당 : 등록하기 <%-- required가 먹으려면 button=submit 사용 --%> 다시입력 result.jsp <%@ page contentType="text/html; charset=UTF-8"%> <%@ page trimDirectiveWhitespaces="true"%> Insert title here 인사관리 이름 : ${name} 이름 : <%=request.getAttribute("name") %> 생년월일 : ${birth} 전화번호 : ${phone} 기본급 : ${salary} 수당 : ${bonus} 세금 : ${tax} 실수령액 : ${pay} 나이 : ${age} 띠 : ${tti}
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"); } }
from http://development-writing.tistory.com/330 by ccl(S) rewrite - 2021-10-20 06:02:03