• Home
  • About
    • on Weekend photo

      on Weekend

      𝙎𝙩𝙪𝙙𝙮𝙞𝙣𝙜

    • Learn More
    • Instagram
    • Github
  • Archive
    • All Posts
    • All Tags
    • All Categories
  • Categories
    • Problem Solving
    • TIL
    • Study
    • Etc
    • 필사
  • Projects

인프런 - 실전 JSP 3

03 Jan 2021

수강 코스

  • 강의 소리가 너무 작아서 크롬 확장 프로그램 Volumn Control을 사용함.

Day 3

8. form 데이터 처리

  • 사용자의 form 데이터를 서블릿에서 처리하는 방법에 대해서 학습

8.1. form 태그

  • form 태그에 유저의 데이터가 들어가서 submit 버튼을 클릭, request를 통해 웹 컨테이너(tomcat)로 전달된다. 내부에선 request 객체를 통해 유저 데이터를 받을 수 있다.
  • doGet으로 받을 수도, doPost로 받을 수도 있다.

8.2. doGet

  • method="get"으로 설정하고 form태그를 날려주면 서버에서 doGet() 메서드가 받는다.
  • method를 따로 설정안해주면 디폴트가 get이다.
  • 사용자 정보가 URL에 노출되어 웹 서버로 전송된다. URL에 프로토콜, 도메인주소 나오고 맨 끝에 ?가 붙고 그 뒤에 {name}={value}값으로 붙는다.
  • => 보안에 취약하다. 눈에 보이기 때문에 누가 저 데이터를 그대로 가져와서, parsing을 해서 가로챌 수가 있다.
  • URL 길이의 한계가 있으므로, 너무 너무 많은 데이터를 보내기엔 적합하지 않다.

8.3. doPost

  • method="post"로 설정하고 form 태그를 날려주면 서버에서 doPost() 메서드가 받는다.
  • 데이터가 HTTP Request에 포함되어 웹서버로 전송되며, 도메인주소 뒤에는 맵핑 정보만 노출된다 (ex. http://localost:8090/lec08prj001/mSignUp의 mSignUp)
  • 데이터가 헤더파일에 암호화되어서 전송된다.
  • 로그인, 회원가입, 설문조사는 다 post방식으로 전송한다.

  • 하나의 데이터 : getParameter()
  • 여러개의 데이터 : getParameterValues()

  • formEx.html
<form action="mSignUp" method="post">
  name : <input type="text" name="m_name"></br>
  ...
  • MemSignUp.java
@WebServlet("/mSignUp")
public class MemSignUp extends HttpServlet {

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

		System.out.println(" -- doGet() -- ");

		String m_name = request.getParameter("m_name");
		String m_pass = request.getParameter("m_pass");
		String m_gender = request.getParameter("m_gender");
		String[] m_hobbys = request.getParameterValues("m_hobby");
		String m_residence = request.getParameter("m_residence");

		System.out.println("m_name : " + m_name);
		System.out.println("m_pass : " + m_pass);
		System.out.println("m_gender : " + m_gender);
		System.out.println("m_hobbys : " + Arrays.toString(m_hobbys));
		System.out.println("m_residence : " + m_residence);

		Enumeration<String> names = request.getParameterNames();
		while (names.hasMoreElements()) {
			String name = (String) names.nextElement();
			System.out.println("name : " + name);
		}

	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

		System.out.println(" -- doPost() -- ");

		doGet(request, response);
	}

}

  • mSignUp이라고 서블릿 매핑이 되어있다.
  • doGet과 doPost를 모두 작성하되, doPost로 넘어오면 doGet을 호출해주는 것은, post로 넘기든 get으로 넘기든간에 하나의 함수로 처리해주기 위해서. (실무에서 많이 쓰는 방법)
  • getParameterValues를 이용해서 받은 객체는 String 배열로 받는 것을 확인할 수 있다.
  • Enumeration<String> names = request.getParameterNames();은 속성값을 받아 input tag의 이름을 확인해보기 위함이다. 가령 html코드는 현재 없고, BE만 구성하고 있다면 그렇게 받아온 names를 순회하면서 서버쪽으로 날아오는 데이터의 속성값을 확인해볼 수 있다.

9. JSP스크립트

9.1. Servlet vs JSP

  • Servlet : JAVA코드로 HttpServlet을 상속받아 사용 (xxx.java -> xxx.class로 변환됨)
  • JSP : 자바 코드와 html을 합쳐서 jsp파일을 만들고, jvm이 해석할 수 있는 자바코드로 컴파일러가 바꿔준다 (xxx.jsp -> xxx_jsp.java -> xxx_jsp.class)
  • 결과적으로 jsp도 서블릿 파일이라고 볼 수 있다.

9.2. JSP 파일 HTML5 포맷 설정

  • html5를 표준으로 사용하기 위해 포맷을 설정해준다.
    1. window - Preferences
    2. Web - JSP Files - Editor - Templates 에서 New Template
    3. Name: html5 format, Context: New JSP, description: html5 format으로 넣고 Pattern은 하단의 코드 첨부
<%@ page language="java" contentType="text/html; charset=${encoding}"
pageEncoding="${encoding}"%>
<!DOCTYPE html>
<html>
	<head>
		<meta charset="${encoding}">
		<title>Insert title here</title>
	</head>
	<body>

	</body>
</html>
  • jsp파일을 만들 땐 이렇게 만든 html5 포맷을 활용하면 된다.

9.3. JSP 주요 스크립트

  1. 선언태그 : JSP 페이지에서 body 안에 Java의 멤버변수 또는 메서드를 선언
    • <%! …변수 선언 및 초기화, 객체 생성 및 인스턴스 초기화, 메서드 선언 및 정의… %> 로 사용한다.
  2. 주석태그 : jsp 주석은 jsp 파일이 서블릿 파일로 변환될 때 제외된다.
    • <%-- 주석 --%>
  3. 스크립트릿 태그 : jsp 페이지에서 자바 코드를 넣기 위한 태그.
    • <% 자바 코드 내용 %>
    • 가령 <% if(..) { >% <p> num > 0 </p> <% } %> 이런 식으로 들어가기도 함. 다만 html과 섞이기 때문에 규모있는 로직을 짜는 데에 사용하진 않는다.
  4. 표현식 태그 : 자바의 변수 및 메서드의 반환값을 출력하는 태그
    • num is <%= num %>

  5. 지시어 : 서버에서 jsp 페이지를 처리하는 방법에 대한 정의
  6. page : 페이지 기본 설정 - <%@ page language="java" contentType="text/html; charset=EUC-KR" pageEncoding="EUC-KR"%>
  7. include : include 파일 설정 - <%@ include file= "header.jsp" %>
  8. taglib : 태그라이브러리. 외부라이브러리 태그 설정, prefix={네임스페이스명} - <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>

10. JSP request, response

  • 사용자의 요청과 웹서버의 응답을 담당하는 객체에 대해서 학습

10.1. request 객체

  • form을 이용해서 데이터를 받고, action에 어떠한 jsp파일로 데이터를 넘길 것인지를 설정해준다.

  • formEx.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

	<form action="mSignUp.jsp" method="get">
		name : <input type="text" name="m_name"><br>
		password : <input type="password" name="m_pass"><br>
		hobby : sport<input type="checkbox" name="m_hobby" value="sport">,
				cooking<input type="checkbox" name="m_hobby" value="cooking">,
				travel<input type="checkbox" name="m_hobby" value="travel">,
				<input type="submit" value="sign up">
	</form>

</body>
</html>
  • mSignUp.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<%!
		String m_name;
		String m_pass;
		String[] m_hobby;
	%>

	<%
		m_name=request.getParameter("m_name");
		m_pass=request.getParameter("m_pass");
		m_hobby=request.getParameterValues("m_hobby");
	%>

	m_name = <%= m_name %> <br>
	m_pass = <%= m_pass %> <br>
	m_hobby :
	<%
	for(int i=0; i<m_hobby.length; i++) {
	%>
		<%= m_hobby[i] %>
	<%
		}
	%><br>
</body>
</html>

10.2. response 객체

  • reponse.sendRedirect() 등을 통해 다른 jsp 페이지로 넘겨줄 수 있다.

  • firstPage.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<p> First Page!! </p>

	<%
		response.sendRedirect("secondPage.jsp");
	%>
</body>
</html>
  • secondPage.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<p> Second Page!! </p>
</body>
</html>


jspbackend Share Tweet +1