JSP_servlet사용한 사칙연산
jsp파일과 servlet을 이용하여 사칙연산 계산을 만들어봅시다!
저는 실행시 웹브라우저에 뜨는 첫페이지 Calcu.jsp 파일,
결과 수행시 보여질 페이지인 ca.java (servlet)파일, java파일,
연산시 사용될 Sww.java파일,
url 매핑을 해줄 web.xml파일로 총 4파일을 사용하여 실습을 진행하였습니다!
첫번째로 jsp파일에 사칙연산을 실행하였을 때 나오는 첫 페이지를 그려줍니다.
폼 태그를 사용해서 '계산' 이라는 submit버튼을 을 눌렀을때 지정된 경로로 이동할 수 있도록 액션을 걸어줍니다.
post방식으로 보낼거라서 method="post"를 해주었습니다.
<form align="center" name="form1" action="./calc" method="post">
<input type="text" name="n1" size="5">
<select name="op">
<option value="+">+</option>
<option value="-">-</option>
<option value="*">*</option>
<option value="/">/</option>
</select>
<input type="text" name="n2" size="5">
<input type="submit" value="계산">
<input type="reset" value="다시입력">
</form>
<코드화면>
Calcu.jsp
두번째는 서블릿(java)입니다.
서블릿을 생성했을 때 상단에 @WebServlet("/서블릿 이름")이 오버라이딩 되있는걸 확인 할 수 있습니다.
이건 어노테이션(annotaion)이라는 건데, url을 매핑해주는 용도입니다.
서블릿에서 url을 매핑해주는 기법은 두가지가 있는데 하나는 위에서 언급한 어노테이션이 있고,
다른 하나는 web.xml에서 입력해주는 방식이 있습니다.
web.xml방식은 맨 아래에서 설명하도록 하겠습니다
post방식으로 보내게되면 protected void doPost()함수에서 작성을 하면 되는데,
저는 protected void doGet()함수에서 doPost()함수를 호출하여 사용하는 방식으로 진행하였습니다.
jsp파일의 form태그에서 method="post"로 입력을 하였을 때 ,
폼태그 안의 변수들은 protected void doPost()함수 안에 있는 HttpServletRequest에 담겨오게됩니다.
넘어온 변수를 사용하여 다시 웹브라우저에 응답을 해줍니다.
protected void doGet()함수와 protected void doPost()함수 안에 작성된 코드
↓
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request,response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html");
response.setCharacterEncoding("utf-8");
// response 객체는 JSP의 실행 결과를 웹브라우저로 전송하고자 할때 사용
//setContentType 메소드는 html의 표준 MIME 타입인 "text/html" 의 변경이나 캐릭터의 인코딩을 재 지정하고자 할때 사용
PrintWriter out=response.getWriter();
/*servlet으로 들어온 요청은 텍스트(html)로 응답을 보내는게 대부분이기 때문에, PrintWriter out=response.getWriter();로 응답을 내보낼 출력스트림을 얻어내고나서 out.println();에 텍스트 또는 변수를 입력해서 사용합니다.
이 경우 상단에 java.io.PrintWriter를 import해주어야합니다.*/
int n1=Integer.parseInt(request.getParameter("n1"));
int n2=Integer.parseInt(request.getParameter("n2"));
char op=request.getParameter("op").charAt(0);
Sww swi=new Sww();
//조건에 따라 연산을 실행해줄 case문은 3번째 페이지 java파일에 따로 빼놓은 java파일 객체생성을
String html="<!DOCTYPE html><br>"
+"<head><br>"
+"<meta charset=\"EUC-KR\"><br>"
+"<title>죽음의 계산기</title><br>"
+"</head><br>"
+"<body><br>"
+"<h1 align=\"center\">계산기</h1><br>"
+"<p align=\"center\">"
+ n1 + " " + op + " " + n2 + " = " + swi.sw(n1,n2,op)//객체생성한 클래스의 sw함수 호출, 매개변수 전달
+"</p>"
+"<div align=\"center\">"
+"<a href=\"javascript:history.back();\">"//history.back(); 이전 페이지로 돌아가게 해주는 함수.
+"메인으로 돌아가기"
+"</a>"
+"</div>"
+"</body><br>"
+"</html><br>";
out.print(html);
}
<코드화면>
ca.java
세번째는페이지는 두번째 서블릿에서 호출한 Sww클래스를 담아놓은 java파일 입니다.
호출시 전달받은 매개변수를 이용해 case문으로 연산.
<코드화면>
Sww.java
마지막으로 setvlet페이지 설명에서 언급한 web.xml을 이용한 매핍을 해줍니다.
<web-app></web-app>안에 아래와 같은 형식으로 입력을 해줍니다.
<servlet>
<servlet-name>cal</servlet-name>→닉네임
<servlet-class>ca</servlet-class>→내가 생성한 서블릿클래스의 실제 이름으로 설정해야함
</servlet>
<servlet-mapping>
<servlet-name>cal</servlet-name>→위에서 입력한 닉네임값과 같아야 함
<url-pattern>/calc</url-pattern>->url에서 프로젝트 이름 뒤에 오는 부분으로 ' /' 슬래시로 시작
</servlet-mapping>
<코드화면>
web.xml
<완성화면>
Calcu.jsp
첫 페이지에서 숫자를 입력 후 다시입력을 누르면 다 지워지고, 숫자 입력 후 계산 버튼을 누르면
계산이 되면서 url이 경로가 매핑으로 설정했던 calc가 뜨는걸 확인할 수 있습니다.
이 페이지는 원래서블릿 페이지인데 매핑설정한 calc라고 뜨는 것 입니다.
메인으로 돌아가기를 누르게되면 서블릿에서 history.back함수를 썼기 때문에 이전 페이지로 돌아갈 수 있습니다.