ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • doGet(), request를 이용한 정보 넘기기 (1) - 사용자로부터 데이터 입력받기
    웹 Web/JSP & Servlet 2022. 1. 14. 10:59

    교재 - 성윤정 <백견불여일타 JSP&Servlet : Oracle&Eclipse>

     

    web-study-03이라는 이름으로 dynamic web project를 만들고 context root를 jsp-study로 수정

    만든 프로젝트의 srt -> main -> webapp에서 새 jsp파일 생성

     

    <NewFile.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>
    	<h1>서버로 전달하는 방법1</h1>
    	<form action="" method = "get">
    		
    	</form>
    </body>
    </html>

    src/main/java 폴더에 servelet 하나 만들어 init에도 체크하고 finish

     

    <Servelet.java>

    import java.io.IOException;
    import java.io.PrintWriter;
    
    import javax.servlet.ServletConfig;
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    /**
     * Servlet implementation class Servelet
     */
    @WebServlet("/Servelet")
    public class Servelet extends HttpServlet {
    	private static final long serialVersionUID = 1L;
           
        /**
         * @see HttpServlet#HttpServlet()
         */
        public Servelet() {
            super();
            // TODO Auto-generated constructor stub
        }
    
    	/**
    	 * @see Servlet#init(ServletConfig)
    	 */
    	public void init(ServletConfig config) throws ServletException {
    		// TODO Auto-generated method stub
    	}
    
    	/**
    	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
    	 */
    	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		// TODO Auto-generated method stub
    		PrintWriter out = response.getWriter();
    		response.getWriter().append("Served at: ").append(request.getContextPath());
    	}
    
    	/**
    	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
    	 */
    	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		// TODO Auto-generated method stub
    		doGet(request, response);
    	}
    
    }

    servelet을 만들었으니 webapp폴더의 NewFile에 Servelet 넣어주고 다음과 같이 수정

    <NewFile.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>
    	<h1>서버로 전달하는 방법1</h1>
    	<form action="Servelet" method = "get"> <!-- Servelet과 연결 -->
    		id:<input type = "text" name = "id"/> <br>
    		age:<input type = "text" name = "age"/> <br>
    		<input type = "submit" value = "전송"/>
    	</form>
    </body>
    </html>

     

    <Servelet.java> 도 doGet 코드 수정

    package unit03;
    
    import java.io.IOException;
    import java.io.PrintWriter;
    
    import javax.servlet.ServletConfig;
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    /**
     * Servlet implementation class Servelet
     */
    @WebServlet("/Servelet")
    public class Servelet extends HttpServlet {
    	private static final long serialVersionUID = 1L;
           
        /**
         * @see HttpServlet#HttpServlet()
         */
        public Servelet() {
            super();
            // TODO Auto-generated constructor stub
        }
    
    	/**
    	 * @see Servlet#init(ServletConfig)
    	 */
    	public void init(ServletConfig config) throws ServletException {
    		// TODO Auto-generated method stub
    	}
    
    	/**
    	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
    	 */
    	protected void doGet(HttpServletRequest request, HttpServletResponse response) 
    			throws ServletException, IOException {
    		
    		PrintWriter out = response.getWriter();
    		String id = request.getParameter("id"); //문자열로 받아옴
    		Integer age = Integer.parseInt(request.getParameter("age"));
    		out.print("<html><body><h1>");
    		if(age >= 20) {
    			out.println("Adult");
    		} else {
    			out.println("Teenager");
    		}
    		out.print("<br>This is information<br>");
    		out.print("id: " + id);
    		out.print("<br>age: " + age);
    		out.print("</h1></body></html>");
    		out.close();
    		//response.getWriter().append("Served at: ").append(request.getContextPath());
    	}
    
    	/**
    	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
    	 */
    	protected void doPost(HttpServletRequest request, HttpServletResponse response) 
    			throws ServletException, IOException {
    		// TODO Auto-generated method stub
    		doGet(request, response);
    	}
    
    }

     

     

    servers의 server.xml을 열어서 한국어 쓸 수 있게 수정하자

     

    <server.xml>

    63번줄을 다음과 같이 수정

    <Connector URIEncoding = "UTF-8" connectionTimeout="20000" port="8098" protocol="HTTP/1.1" redirectPort="8443"/>

     

    <Servelet.java>

    doGet()에 인코딩 코드 추가하고, 한글을 쓸 수 있게 되었으니 출력문도 수정해주었다

    protected void doGet(HttpServletRequest request, HttpServletResponse response) 
    			throws ServletException, IOException {
    		// 한국어 인식할 수 있게
    		request.setCharacterEncoding("UTF-8"); 
    		response.setContentType("text/html;charset=UTF-8");
    		
    		PrintWriter out = response.getWriter();
    		String id = request.getParameter("id"); //문자열로 받아옴
    		String ageResult;
    		Integer age = Integer.parseInt(request.getParameter("age"));
    		out.print("<html><body><h1>");
    		if(age >= 20) {
    			ageResult = "가능";
    		} else {
    			ageResult = "불가능";
    		}
    		out.print("<br>This is information<br>");
    		out.print("id: " + id + "<br>");
    		out.print("사이트 이용여부: " + ageResult + "입니다. <br>");
    		out.print("<br>age: " + age);
    		out.print("</h1></body></html>");
    		out.close();
    		//response.getWriter().append("Served at: ").append(request.getContextPath());
    	}

    This is information
    id: qjarb
    사이트 이용여부: 가능입니다.
    age: 22

     

     

    사용자 아이디와 비밀번호 받아서 브라우저에 띄우기 - Get방식

    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>ServletWeb</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>basic</servlet-name>
      	<servlet-class>bitedu.lesson.basic.ControllerServlet</servlet-class>
      	<load-on-startup>1</load-on-startup> <!-- 이 서블릿을 제일 먼저 로딩 -->
      </servlet>
      
      <servlet-mapping>
      	<servlet-name>basic</servlet-name>
      	<url-pattern>/controller</url-pattern>
      </servlet-mapping>
    </web-app>

    login.html

    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Login</title>
    </head>
    <body>
    <form action="../controller" method="get">
    	ID:	<input type="text" name="userId">
    	PWD:<input type="password" name="userPwd">
    	<input type="submit" value="제출">	
    </form>
    </body>
    </html>

    ControllerServlet.java

    public class ControllerServlet extends HttpServlet{
    	
    	@Override
    	public void init() throws ServletException {
    		System.out.println("init");
    	}
    	
    	@Override
    	public void destroy() {
    		System.out.println("destory");
    	}
    
    	@Override
    	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    		System.out.println("hello get");
    		
    		resp.setContentType("text/html; charset=UTF-8");
    		PrintWriter out = resp.getWriter();
    		out.println("<h1> Hello Get </h1>"); 
    		
    		String userId = req.getParameter("userId");
    		String userPwd = req.getParameter("userPwd");
    		System.out.println("userId: " + userId);
    		System.out.println("userPwd: " + userPwd);
    		
    		resp.sendRedirect("./req/result.jsp?userId=" + userId);
    	}
    }

    result.jsp

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>동적 컨텐츠 생성</title>
    </head>
    <body>
    <%
    	// request는 내장객체
    	String userId = request.getParameter("userId");
    %>
    <%= userId %>님 반갑습니다.
    </body>
    </html>

     

    유효성 체크하기 p.101

    먼저 아이디만

    <NewFile.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>
    <script>
    	function check() {
    		if(document.form.id.value == "") {
    			alert("빈칸이 존재합니다.");
    			document.form.id.focus();
    			return false;
    		})
    	}
    </script>
    </head>
    <body>
    	<h1>서버로 전달하는 방법1</h1>
    	<form action="Servelet" method = "get" name = "form"> <!-- form이라는 이름 추가 -->
    		id:<input type = "text" name = "id"/> <br>
    		age:<input type = "text" name = "age"/> <br>
    		좋아하는 과일 입력:<input type = "text" name = "fruit"/> <br>
    		<input type = "submit" value = "전송" onclick = "return check()"/> <!-- onclick 추가 -->
    	</form>
    </body>
    </html>

     

    check()코드가 길어질듯 하니 web project에 자바 스크립트 파일을 하나 추가해서 만들자

    <jstest.js>

    function check() {
    		if(document.form.id.value == "") {
    			alert("아이디를 입력해주세요");
    			document.form.id.focus();
    			return false;
    		} else if(document.form.age.value == "") {
    			alert("나이를 입력해주세요");
    			document.form.age.focus();
    			return false;
    		} else if(isNaN(document.form.age.value)) {
    			alert("나이에 숫자를 입력해주세요");
    			document.form.age.focus();
    			return false;
    		} else if(document.form.fruit.value == ""){
    			alert("좋아하는 과일을 입력해주세요");
    			document.form.fruit.focus();
    			return false;
    		} else {
    			return true;
    		}
    }

     

    <NewFile.jsp>의 script 부분 수정하여 jstest파일 추가

    <%@ 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>
    <script src = "jstest.js"></script>
    </head>
    <body>
    	<h1>서버로 전달하는 방법1</h1>
    	<form action="Servelet" method = "get" name = "form"> <!-- form이라는 이름 추가 -->
    		id:<input type = "text" name = "id"/> <br>
    		age:<input type = "text" name = "age"/> <br>
    		좋아하는 과일 입력:<input type = "text" name = "fruit"/> <br>
    		<input type = "submit" value = "전송" onclick = "return check()"/> <!-- onclick 추가 -->
    	</form>
    </body>
    </html>

     

    항목을 더 추가해보았다(textarea, checkbox, select...)

    <NewFile.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>
    <script src = "jstest.js"></script>
    </head>
    <body>
    	<h1>서버로 전달하는 방법1</h1>
    	<form action="Servelet" method = "get" name = "form"> <!-- form이라는 이름 추가 -->
    		id:<input type = "text" name = "id"/> <br>
    		age:<input type = "text" name = "age"/> <br>
    		좋아하는 과일 입력:<input type = "text" name = "fruit"/> <br>
    		pw:<input type = "password" name = "pw"/> <br>
    		성별: <br>
    		<input type = "radio" id = "male" value = "male" name = "gender"/> 남성
    		<input type = "radio" id = "female" value = "female" name = "gender"/> 여성
    		<br>남기고 싶은 말 <br>
    		<textarea rows ="5" cols = "10" name = "textarea"></textarea>
    		<br>당신의 최애는?
    		<input type = "checkbox" name = "check" value = "수빈"/> 수빈
    		<input type = "checkbox" name = "check" value = "연준"/> 연준
    		<input type = "checkbox" name = "check" value = "범규"/> 범규
    		<input type = "checkbox" name = "check" value = "태현"/> 태현
    		<input type = "checkbox" name = "check" value = "휴닝카이"/> 휴닝카이
    		<br>그 이유는?
    		<select id = "select" name = "reason"> 
    			<option value = "visual"> 비주얼</option> <!-- 자동으로 인덱스 매겨짐 -->
    			<option value = "sing"> 노래</option>
    			<option value = "dance"> 춤</option>
    			<option value = "passion"> 열정</option>
    		</select>
    		
    		<input type = "submit" value = "전송" onclick = "return check()"/> <!-- onclick 추가 -->
    	</form>
    </body>
    </html>

     

    <Servelet.java>의 doGet()

    protected void doGet(HttpServletRequest request, HttpServletResponse response) 
    			throws ServletException, IOException {
    		// 한국어 인식할 수 있게
    		request.setCharacterEncoding("UTF-8"); 
    		response.setContentType("text/html;charset=UTF-8");
    		
    		PrintWriter out = response.getWriter();
    		String id = request.getParameter("id");
    		String ageResult;
    		Integer age = Integer.parseInt(request.getParameter("age"));
    		String fruit = request.getParameter("fruit");
    		String pw = request.getParameter("pw");
    		String gender = request.getParameter("gender");
    		String textarea = request.getParameter("textarea");
    		String check[] = request.getParameterValues("check"); // 체크박스는 배열 
    		String reason = request.getParameter("reason");
    		out.print("<html><body><h1>");
    		if(age >= 20) {
    			ageResult = "가능";
    		} else {
    			ageResult = "불가능";
    		}
    		out.print("<br>This is information");
    		out.print("<br>id: " + id);
    		out.print("<br>사이트 이용여부: " + ageResult + "입니다.");
    		out.print("<br>age: " + age);
    		out.print("<br>좋아하는 과일: " + fruit);
    		out.print("<br>pw: " + pw);
    		out.print("<br>성별: " + gender);
    		out.print("<br>남기고 싶은 말: " + textarea);
    		out.print("<br>당신의 최애: ");
    		for(int i = 0; i < check.length; i++) {
    			out.print(check[i] + " ");
    		}
    		out.print("<br>그 이유: " + reason);
    		out.print("</h1></body></html>");
    		out.close();
    		//response.getWriter().append("Served at: ").append(request.getContextPath());
    	}

     

    <jstest.js>

    function check() {
    		if(document.form.id.value == "") {
    			alert("아이디를 입력해주세요");
    			document.form.id.focus();
    			return false;
    		} else if(document.form.age.value == "") {
    			alert("나이를 입력해주세요");
    			document.form.age.focus();
    			return false;
    		} else if(isNaN(document.form.age.value)) {
    			alert("나이에 숫자를 입력해주세요");
    			document.form.age.focus();
    			return false;
    		} else if(document.form.fruit.value == ""){
    			alert("좋아하는 과일을 입력해주세요");
    			document.form.fruit.focus();
    			return false;
    		} else {
    			return true;
    		}
    }

    This is information
    id: id123
    사이트 이용여부: 가능입니다.
    age: 21
    좋아하는 과일: 사과
    pw: 1234
    성별: female
    남기고 싶은 말: 안녕하세요
    당신의 최애: 범규 태현
    그 이유: visual

Designed by Tistory.