[jsp] 파라미터 전달받아 계산기 만들기, 문자열, split() 문자열 자르기

seulki·2022년 10월 12일
0

jsp

목록 보기
13/51
post-custom-banner

🗝️ 계산기 만들기

    1. calc.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>계산기 -JSP 페이지</title>
</head>
<body>
	<h1>JSP로 만든 페이지</h1>
	<form action="Oper" method="post">
		<p>수식을 입력하세요.</p>
		<input type="text" name="operation">
		<input type="submit" value="계산">
	</form>
</body>
</html>





    1. Calc.java(class)
public class Calc {

	int a = 0;
	int b = 0;
	
	Calc(){};
	
	public Calc(int a, int b) {
		super();
		this.a = a;
		this.b = b;
	}
	
		
	public int plus() {
		return a + b;
	}
	
	public int minus() {
		return a-b;
	}
	
	public int multi() {
		return a * b;
	}
	
	public int devide() {
		return a / b;
	}


    1. Oper.java(servlet)
import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/Oper")
public class Oper extends HttpServlet{

	@Override
	protected void service(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException, IOException {
		String paramNum = arg0.getParameter("operation");
		String opers="+-*/";
		Calc c = null;
		int temp = 0, count = 0;
		int result = 0;
		String[] arrTemp = null;
		PrintWriter out = arg1.getWriter();
		
		paramNum = paramNum.replace(" ", "");  // 공백제거
		
		for(int i = 0; i < opers.length(); i++) {
			for(int j = 0; j < paramNum.length(); j++) {
				if(opers.charAt(i) == paramNum.charAt(j)) {
					temp = i; // 연산자와 파라미터가 같을 때의 인덱스
					count++; // 연산자가 1개일 때만 계산하기 위해 카운트
         //연산자와 파라미터로 넘어온 문자열을 비교하여 연산자 찾기
				}
			}
		}
		// index 0 : 첫번째 정수
		// index 1 : 두번째 정수
		out.print("<p>");
		if(count == 1) {
				arrTemp = paramNum.split("\\"+opers.charAt(temp));
				//split()은 특정 문자를 기준으로 나누어 배열에 저장
				try {
					c = new Calc(Integer.parseInt(arrTemp[0]), Integer.parseInt(arrTemp[1]) );
                     //Calc 생성자에 int 2개 전달					
					switch(temp) {
					case  0 :
						result = c.plus();
						break;
						
					case  1 :
						result = c.minus();
						break;
						
					case  2 :
						result = c.multi();
						break;
						
					case  3 :
						
						result = c.devide();		
                           
						break;
					}
					out.println(result);
				} catch (NumberFormatException e) {
					out.println("정수만 입력하세요");
				} catch(ArithmeticException e) {
					out.println("0으로 나눌 수 없습니다.");
				}
	
		}else if(count ==0) { // 연산자를 입력하지 않았을 때
			out.print("연산자를 찾을 수 없습니다.");
		}else { // 연산자를 2개 이상 입력했을 때
			out.print("두 개의 정수만 연산 가능합니다.");
		}
		out.println("</p>");
		out.print("<a href='calc.jsp'> JSP 페이지로 이동</a>");
		//만약 url부분에 .jsp를 빼고 <a href='calc'>라고 한다면 
        //페이지를 찾을 수 없어서 에러가 발생한다.
		//web.xml에서 처리 해 줄 수 있다.
		out.close();
	}
	}


🎈web.xml 수정

  • calc.jsp 페이지로 돌아가고 싶을 때, href에 calc.jsp를 하면 되지만,
    .jsp를 제외한 calc라고 표시하고 싶을 때, 즉 파일이름과 url이 다를 때 파일을 찾아갈 수 있게 web.xml 파일을 변경해 주어야 한다.
out.print("<a href='calc.jsp'> JSP 페이지로 이동</a>");
  • 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_4_0.xsd" id="WebApp_ID" version="4.0">
  <display-name>day05</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.jsp</welcome-file>
    <welcome-file>default.htm</welcome-file>
  </welcome-file-list>

 이 부분 추가하기! 
  <servlet>
  	<servlet-name>calc</servlet-name>
  	<jsp-file>/calc.jsp</jsp-file> <!-- jsp 파일의 경로 -->
  </servlet>
  <servlet-mapping>
  	<servlet-name>calc</servlet-name> 
    <!--  아래의 url요청이 들어오면 servlet-name이 calc인 곳의 경로로 가라 -->
  	<url-pattern>/calc</url-pattern>
    <!-- /calc라는 요청이 들어오면 이름이 calc인 servlet의 경로로 가라 -->
  </servlet-mapping>
</web-app>
  • 이렇게 web.html 파일 수정 후, Oper.java(servlet)파일에서
    calc.jsp 를 calc 로 수정 한 후, 실행해보면 calc.jsp 파일 경로로 찾아왔지만 url 에는 calc라고 표시되어있다.

  • 여기서 계산 버튼을 누르면 Oper로 이동하고

  • JSP 페이지로 이동을 누르면 calc로 보이게 된다.



🎈 split

  • split 함수는 입력받은 정규표현식 또는 특정 문자를 기준으로 문자열을 나누어 배열에 저장하여 반환한다.
  • 정규표현식 뒤에 + 를 입력하면 명령어가 되기때문에
    "\\"+를 해야 문자열로 인식한다.

ex) "안녕 하세요" 라는 문자열을 " " 공백을 기준으로 나누고 싶을 때
String str = "안녕 하세요";
String[] arrStr = str.split(" ");

"안녕,하세요" 라는 문자열을 , 을 기준으로 나누고 싶을 때
String str = "안녕,하세요";
String[] arrStr = str.split(" ,");

🗝️특수문자, 연산자 주의!

"안녕+하세요" 라는 문자열을 + 을 기준으로 나누고 싶을 때
String str = "안녕+하세요";
String[] arrStr = str.split("+");
-> 이렇게 하면 컴파일러가 "+" 부분을 인식하지 못함!!!!
-> String[] arrStr = str.split("\\+"); 역슬래쉬 두개를 붙여야한다!

profile
웹 개발자 공부 중
post-custom-banner

0개의 댓글