-
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'웹 Web > JSP & Servlet' 카테고리의 다른 글
JSP 내장객체 (0) - JSP로 설문조사폼 (0) 2022.01.17 JSP 기본 다루기 - 기본태그, 지시자 (0) 2022.01.16 doPost()와 URL Mapping과 쿼리 스트링 (0) 2022.01.16 서블릿과 JSP (0) 2022.01.13 테이블 활용하여 게시판 만들기, 이클립스 연결(톰캣) (0) 2022.01.13