-
New Dynamic Web Project 만들기: 이름은 ServletTest01
-
Generate web.xml deployment descriptor에 체크
-
FirstServlet에서 adder2.jsp, bbs.jsp, personForm2.jsp, personResult2.jsp를 복사해서 ServletTest01의 WebContent에 붙여넣기. lib폴더에 jstl-1.2.jar도 붙여넣기
-
adder2.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>
<form action="adder.go">
첫번째 수 : <input type="text" name="num1"><br>
두번째 수 : <input type="text" name="num2"><br>
<input type="submit" value="더하기">
</form>
</body>
</html>
-
bbs.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>글쓰기</h1>
<form action="bbs.go" method="post">
이름 : <input type="text" name="name"><br>
제목 : <input type="text" name="title"><br>
내용 : <br>
<textarea rows="5" cols="20" name="content"></textarea><br>
<input type="submit" value="전송">
</form>
</body>
</html>
-
personForm2.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>
<h2>개인 정보 입력</h2>
<form action="person2.go" method="post">
이름: <input type="text" name="name"><br>
아이디: <input type="text" name="id"><br>
패스워드 : <input type="password" name="password"><br>
성별:
<label for="man"> 남</label>
<input type="radio" name="gender" id="man" value="남" checked >
여 <input type="radio" name="gender" value="여"><br>
메일수신여부:
<input type="checkbox" name="notice" value="공지메일">공지메일
<input type="checkbox" name="notice" value="광고메일">광고메일
<input type="checkbox" name="notice" value="배송확인메일">배송확인메일<br><br>
직업:
<select name="job">
<option value="회사원">회사원
<option value="학생">학생
<option value="기타">기타
</select><br><br>
<input type="submit" value="확인">
<input type="reset" value="취소">
</form>
</body>
</html>
-
personResult2.jsp: jstl경로 처리
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
이름11 : ${p.name }<br>
아이디11 : ${p.id }<br>
성별11 : ${p.gender }<br>
직업11 : ${p.job }<br>
메일11 :
<c:forEach items="${p. notice}" var="mail">
${mail }
</c:forEach><br>
${msg }
</body>
</html>
-
adder2.jsp와 bbs.jsp, personForm2.jsp에서 form action의 경로를 전부 .go로 끝나도록 수정한다.
-
Java Resources에 src폴더 안에 org.controller와 org.model 패키지 만들기.
-
org.model안에 Person.java 파일 붙여넣기
-
Person.java
package org.model;
public class Person {
private String name;
private String id;
private String paswword;
private String job;
private String[] notice;
private String gender;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getPaswword() {
return paswword;
}
public void setPaswword(String paswword) {
this.paswword = paswword;
}
public String getJob() {
return job;
}
public void setJob(String job) {
this.job = job;
}
public String[] getNotice() {
return notice;
}
public void setNotice(String[] notice) {
this.notice = notice;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
}
-
web.xml에 display name, servlet name, servlet class, servlet mapping, url pattern 지정. servlet name을 doController라 선언. servlet class 경로를 CommonController로 지정. .go로 끝나는 파일들은 모두 이 web.xml을 거친다.
-
org.controller 패키지에 CommonController.java 클래스 파일 생성하기. HttpServlet을 extends해주고 doGet, doPost 오버라이딩하기. doGet에는 doPost(req,resp)을 써서 doPost로 가도록 경로를 잡아준다.
-
if else문으로 adder2, bbs, person2 jsp 파일들의 출력 경로를 잡아준다.
package org.controller;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class CommonController extends HttpServlet{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String requestURI=req.getRequestURI();
String contextPath=req.getContextPath();
String command=requestURI.substring(contextPath.length());
// System.out.println("requestURI:"+requestURI);
// System.out.println("command:"+command);
if(command.equals("/adder.go")) {
new AdderServlet().execute(req,resp);
}else if(command.equals("/bbs.go")){
new BbsServlet().execute(req,resp);
}else if(command.equals("/person2.go")) {
new PersonServlet().execute(req,resp);
}
}
}
-
org.controller에서 Action.java라는 인터페이스를 만든다. execute라는 메소드를 만든다. execute의 인자에는 req, resp가 들어가고 throws로 예외처리를 해준다. (CommonController의 인자와 예외처리 복사해서 붙여줌) CommonController를 거치는 jsp 파일들이 doGet으로 갈지 doPost로 갈지 모르기 때문에 execute 메소드를 대신 부르는 것이다.
-
Action.java
package org.controller;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public interface Action {
public void execute(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException;
}
-
Action.java 인터페이스 파일을 상속받는 AdderServlet.java파일을 생성한다. implements로 Action 상속받고 execute메소드를 오버라이딩한다.
-
AdderServlet.java
package org.controller;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class AdderServlet implements Action{
@Override
public void execute(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("utf-8");
int num1 = Integer.parseInt(req.getParameter("num1"));
int num2= Integer.parseInt(req.getParameter("num2"));
int sum = num1+num2;
resp.setContentType("text/html;charset=utf-8");
PrintWriter out = resp.getWriter();
out.println("<html>");
out.println("<head><title>결과</title></head>");
out.println("<body>");
out.println("<body>");
out.println("덧셈결과 :" + sum);
out.println("</body>");
out.println("</html>");
}
}
-
bbs.jsp를 실행했을때 결과값을 얻기 위해서 위와 마찬가지로 BbsServlet.java파일을 생성한다. implements로 Action을 상속받고 execute메소드를 오버라이딩한다.
-
BbsServlet.java
package org.controller;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class BbsServlet implements Action{
@Override
public void execute(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("utf-8");
String name = req.getParameter("name");
String title = req.getParameter("title");
String content = req.getParameter("content");
resp.setContentType("text/html;charset=utf-8");
PrintWriter out = resp.getWriter();
out.println("<html>");
out.println("<head><title>결과</title></head>");
out.println("<body>");
out.println("이름:" + name+"<br>");
out.println("제목:" + title+"<br>");
out.println("내용:" + content+"<br>");
out.println("</body>");
out.println("</html>");
}
}
-
personForm2.jsp도 마찬가지로 결과값을 얻기 위해 PersonServlet.java를 만들고 implements로 Action을 상속받고 execute메소드를 오버라이딩한다.
-
PersonServlet.java
package org.controller;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.model.Person;
public class PersonServlet implements Action{
@Override
public void execute(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("utf-8");
String name = req.getParameter("name");
String id = req.getParameter("id");
String gender = req.getParameter("gender");
String[] notice = req.getParameterValues("notice");
String job = req.getParameter("job");
Person person = new Person();
person.setGender(gender);
person.setId(id);
person.setJob(job);
person.setName(name);
person.setNotice(notice);
req.setAttribute("p", person);
RequestDispatcher rd = req.getRequestDispatcher("personResult2.jsp");
rd.forward(req, resp);
}
}
-
web.xml에서 servlet처리 부분을 주석처리 한다면? CommonController랑 연결이 안됨. 이걸 대신할 수 있는 어노테이션은? CommonController.java에서 WebServlet을 어노테이션하고 ("*.go")을 부르면 됨
'Learning > JSP' 카테고리의 다른 글
로그인, 회원가입, 게시판 만들기 2 (0) | 2020.07.30 |
---|---|
로그인, 회원가입, 게시판 만들기 1 (0) | 2020.07.29 |
서블릿으로 주소록 만들기 (0) | 2020.07.28 |
JSTL (0) | 2020.07.27 |
서블릿 (0) | 2020.07.27 |