저번 포스팅에서는 Servlet의 기본 객체를 알아보았다
코드 안에 주석으로 URL mapping에 대해 간단하게 쓰여진 부분이 있었는데
이번엔 실습을 통해 URL mapping이 뭔지 더 명확히 알아보자!
URL mapping
- Web browser에서 Servlet을 동작시키기 위해 실제 Java 클래스의 이름 대신, Servle을 요청하기 위한 문자열을 Servlet 클래스의 이름 대신, Servlet을 요청하기 위한 문자열을 Servlet 클래스와 mapping 시키는 것!
- 원래주소라면? http://localhost:8081/Servlet/com.javalec.ex.HelloWeb
-> url 경로가 길고 불편하고 url 경로가 노출되기 때문에 보안상의 문제가 생긴다.
- Mapping된 주소? http://localhost:8081/Servlet/HelloWeb
-> 좀더 간단한 url경로, 실제 서블릿 클래스를 공개하지 않는다
-설정 방법?
form 태그 사용하기!~
!!form태그에서 꼭 필요한것!!
1. action : 값을 어디로 보낼지
url mapping이랑 통일해주어야함!
2. name : 어떤 값을 보내는지
3. submit : 값을 보내는 시점
실습!!
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="ex03_get">
DATA = <input type="text" name="data">
<input type="submit" value="SEND">
</form>
</body>
</html>
data라는 이름을 가진 text로 입력받은 데이터를
ex03_get이라는 url mapping이름을 가진 서블릿으로
send 버튼을 누르면 데이터를 보내겠다라는 뜻!
ex03_get의 코드는?
package Servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
// form태그 action에 작성한 url mapping과 일치해야함!!
@WebServlet("/ex03_get")
public class ex03_get extends HttpServlet {
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String data = request.getParameter("data");
System.out.println("사용자가 입력한 데이터 : " + data);
}
}
ex03_send.html에서 전송한 데이터들을 받아오는 서블릿이다
request 객체를 통해 사용자가 입력한 데이터 가지고 온다
request에서 의 getParameter("form태그에서 보낸 name값")는 보낸 데이터를 받아오는 메소드이다. 항상 string 형태로 반환한다
get방식을 사용할때 한글로 인코딩 하려면 Servers폴더 - server.xml -> 63번째줄 Connector 태그에 속성을 추가해줘야한다.
이렇게! -> URIEncoding="인코딩방식"
한글로 인코딩하는 방식은 두 가지가 있다.
- EUC-KR : 한국어 팩 설치되어있어야 사용 가능하고, 글자 하나를 통으로 인식하기 때문에 한글에 없는 단어라면 사용할 수 없다.(ex.떄)
- UTF-8 : 유니코드 형식이기 때문에 글자를 자음, 모음을 분리해서 인식한다. 요즘은 이 방식을 더 많이 쓰는 추세라고 한다.
이름과 나이 보내서 Web으로 출력하기
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="getData">
당신의 이름은? <input type="text" name="name"><br>
당신의 나이는? <input type="text" name="age"><br>
<input type="submit" value="전송">
</form>
</body>
</html>
package 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("/getData")
public class ex04_getData extends HttpServlet {
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// console 창에 출력
String name = request.getParameter("name");
String age = request.getParameter("age");
System.out.println("사용자가 입력한 이름 : " + name);
// web에 출력
// 응답할 페이지에 대한 설정 ( 스트림 열기 전에 설정 필수!! )
response.setContentType("text/html; charset=utf-8");
// 출력 스트림 열기
PrintWriter out = response.getWriter();
out.print("<h1>당신의 이름은? " + name +" 입니다! </h1><br>");
out.print("<h1>당신의 나이는? " + age +" 살입니다! </h1>");
}
}
신경쓸 부분
- ulr mapping 주소 일치하는지 확인
- 어떤 정보가 들어왔는지 확인하기위해 콘솔 창에 먼저 출력해준 것
- 응답할 페이지 설정은 출력 전에 해주기
결과화면
두 수 입력 받아서 계산하기!
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<!-- form : action, name, submit -->
<form action="plus">
<h1>두 수를 입력 받아서 계산하기</h1>
<input type="text" name="num1">+
<input type="text" name="num2">
<input type="submit" value="연산">
</form>
</body>
</html>
package 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("/plus")
public class ex05_plus extends HttpServlet {
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
int num1 = Integer.parseInt(request.getParameter("num1"));
int num2 = Integer.parseInt(request.getParameter("num2"));
response.setContentType("text/html; charset=utf-8");
PrintWriter out = response.getWriter();
out.print(num1 +"과 "+num2+"의 합은 " +(num1+num2)+"입니다");
}
}
정수형으로 타입 형변환하기
request.getParameter() 메소드는 String타입으로 반환하기 때문에 Integer.parseInt() 함수를 사용해서 정수로 타입을 바꿔줘야한다!
결과 화면
배경색 선택해서 바꾸기
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<style>
*{
text-align: center;
}
</style>
</head>
<body>
<form action="changeBg">
<h1> 내가 원하는 배경색으로!</h1>
<input type="color" name ="color">
<input type="submit" value="변경"><br>
</form>
</body>
</html>
package 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("/changeBg")
public class ex06_changeBg extends HttpServlet {
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String color = request.getParameter("color");
System.out.println(color);
PrintWriter out = response.getWriter();
// 내부 방식
out.print("<style> *{background-color:"+color+"}</body>");
}
}
위 코드에서는 스타일 태그 안에 배경색을 지정해주는 내부 방식을 사용했다.
인라인 방식으로 배경색을 지정하려면
out.print("<body bgcolor="+color+"></body>"); 이라는 코드로 바꾸면 된다.
실행 화면
'웹 개발 언어 > JSP&Servlet' 카테고리의 다른 글
JSP 지시자 <%@ %>, 주석 사용하기 (0) | 2022.03.26 |
---|---|
Servlet 실습 (0) | 2022.03.18 |
Maven (0) | 2022.03.17 |
Servlet 참고사항,, (0) | 2022.03.15 |
Servlet (0) | 2022.03.11 |
댓글