보라코딩
Day76_230414_ JSP, MyBatis (MVC패턴) 뒤에 중요한 내용! 본문
동적검색결과
index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>시간(main)</title>
<script>
function all_search(frm){
//alert(frm);
//location.href="list.jsp"; //모델1방식
//location.href="list"; //컨트롤러 요청방 처리(GET)
frm.action = "list"; //컨트롤러 요청
frm.submit();
}
function dept_search(frm){
frm.action = "dept"
frm.submit();
}
function fullname_search(frm){
frm.action = "fullname";
frm.submit();
}
function search_go(frm){
frm.action = "search"; //검색페이지로 이동
frm.submit();
}
</script>
</head>
<body>
<h1>작업선택 [index.jsp]</h1>
<form method="post" name="testForm">
<!-- <button onclick="all_search(this.form)">전체보기</button> -->
<input type="button" value="전체보기" onclick="all_search(this.form)">
<input type="button" value="부서코드검색" onclick="dept_search(this.form)">
<input type="button" value="이름검색" onclick="fullname_search(this.form)">
<input type="button" value="동적검색" onclick="search_go(this.form)">
</form>
</body>
</html>
search.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>동적검색 [search.jsp]</h1>
<form action="search" method="get"> <!-- 검색(결과)목록 보기-->
<select name="idx">
<option value="0">사번</option>
<option value="1">이름</option>
<option value="2">직종</option>
<option value="3">부서</option>
</select>
<input type="text" name="keyword">
<input type="submit" name="동적검색">
</form>
</body>
</html>
SearchController.java
package com.mystudy.controller;
import java.io.IOException;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.mystudy.model.dao.EmployeeDAO;
import com.mystudy.model.vo.EmployeeVO;
@WebServlet("/search")
public class SearchController extends HttpServlet{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("SearchController의 doGet() 실행~");
// 검색페이지로 또는 검색결과 페이지로 이동
//1. 파라미터값 확인(추출)
String idx = req.getParameter("idx");
String keyword = req.getParameter("keyword");
System.out.println("idx :" + idx + ", keyword : " + keyword);
// 단순 페이지 전환인지 검색결과 페이지로 이동인지 결정
// 단순 페이지 전환 : search.jsp 이동
// 검색 결과페이지 이동 : searchList.jsp 이동
if (keyword == null) {
req.getRequestDispatcher("search.jsp").forward(req, resp);
return;
}
// DB 데이터 조회
List<EmployeeVO> list = EmployeeDAO.getSearch(idx, keyword);
req.setAttribute("list", list);
//검색요청에 대한 처리
req.getRequestDispatcher("searchList.jsp").forward(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("SearchController의 doPost() 실행~");
req.setCharacterEncoding("UTF-8");
doGet(req, resp);
}
}
mapper
<!-- 동적검색 idx가 0:사번 1:이름 2:직종 3:부서-->
<select id="search" parameterType="map" resultType="employeeVO">
SELECT * FROM EMPLOYEES
where 1 = 1
<if test="idx == 0">
and EMPLOYEE_ID =#{keyword}
</if>
<if test="idx == 1">
and (FIRST_NAME = INITCAP(#{keyword}) OR LAST_NAME = INITCAP(#{keyword}))
</if>
<if test='idx.equals("2")'>
and JOB_ID = #{keyword}
</if>
<if test='idx.equals("3")'>
and DEPARTMENT_ID = #{keyword}
</if>
ORDER BY EMPLOYEE_ID
</select>
dao
public static List<EmployeeVO> getSearch(String idx, String keyword) {
Map<String, String> map = new HashMap<String, String>();
map.put("idx",idx);
map.put("keyword",keyword);
SqlSession ss = DBService.getFactory().openSession();
List<EmployeeVO> list = ss.selectList("hr.search",map);
ss.close();
return list;
}
FrontController
index를 FrontController 하나로 가게 다 바꿔 놓고
대신 type으로 파라미터를 하나씩 주었다.
index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>시간(main)</title>
<script>
function all_search(frm){
//alert(frm);
//location.href="list.jsp"; //모델1방식
//location.href="list"; //컨트롤러 요청방 처리(GET)
frm.action = "controller?type=list"; //컨트롤러 요청
frm.submit();
}
function dept_search(frm){
frm.action = "controller?type=dept"
frm.submit();
}
function fullname_search(frm){
frm.action = "controller?type=fullname";
frm.submit();
}
function search_go(frm){
frm.action = "controller?type=search"; //검색페이지로 이동
frm.submit();
}
</script>
</head>
<body>
<h1>작업선택 [index.jsp]</h1>
<form method="post" name="testForm">
<!-- <button onclick="all_search(this.form)">전체보기</button> -->
<input type="button" value="전체보기" onclick="all_search(this.form)">
<input type="button" value="부서코드검색" onclick="dept_search(this.form)">
<input type="button" value="이름검색" onclick="fullname_search(this.form)">
<input type="button" value="동적검색" onclick="search_go(this.form)">
</form>
</body>
</html>
FrontController.java
package com.mystudy.front_controller;
import java.io.IOException;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.mystudy.model.dao.EmployeeDAO;
import com.mystudy.model.vo.EmployeeVO;
@WebServlet("/controller")
public class FrontController extends HttpServlet {
private static final long serialVersionUID = 1L;
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println(">> FrontController doGet() 실행 ===========");
String type = req.getParameter("type");
System.out.println("type : "+ type);
if(type.equals("list")) {
System.out.println("* list 요청에 대한 처리");
// DB 데이터 조회 후 list.jsp페이지로 전달
//1. DB 연동작업
List<EmployeeVO> list = EmployeeDAO.getList();
System.out.println("list : "+ list);
//2. 응답페이지(list.jsp)에 전달(request 객체에 저장해서 전달)
//forwarding처리 scope상에 저장(page는 못써)
req.setAttribute("list", list);
//3. 페이지전환 - 응답할 페이지(list.jsp)로 포워딩
req.getRequestDispatcher("list.jsp").forward(req, resp);
}
if(type.equals("dept")) {
req.getRequestDispatcher("dept.jsp").forward(req, resp);
} else if(type.equals("deptList")) {
// 전달받은 부서코드로 DB데이터 조회 후 deptList.jsp 응답처리(위임처리)
//1. 전달받은 파라미터값(부서코드:deptno) 추출(확인)
int deptno = Integer.parseInt(req.getParameter("deptno"));
System.out.println(deptno);
//2. DB 연동작업 : 해당부서(deptno와 일치)에 있는 직원조회(DAO사용)
List<EmployeeVO> list = EmployeeDAO.getDept(deptno);
//3. 조회된 데이터를 응답페이지(deptList.jsp)에서 사용하도록 scope 상에 저장
req.setAttribute("list", list);
//4. 응답페이지(deptList.jsp)로 이동(응답 위임 처리)
req.getRequestDispatcher("deptList.jsp").forward(req, resp);
}
if(type.equals("fullname")) {
req.getRequestDispatcher("fullname.jsp").forward(req, resp);
} else if(type.equals("fullnameList")) {
String fullname = req.getParameter("fullname");
System.out.println(fullname);
List<EmployeeVO> list = EmployeeDAO.getFullnameList(fullname);
req.setAttribute("list", list);
req.getRequestDispatcher("fullnameList.jsp").forward(req, resp);
}
if(type.equals("search")) {
String idx = req.getParameter("idx");
String keyword = req.getParameter("keyword");
System.out.println("idx :" + idx + ", keyword : " + keyword);
if (keyword == null) {
req.getRequestDispatcher("search.jsp").forward(req, resp);
return;
}
List<EmployeeVO> list = EmployeeDAO.getSearch(idx, keyword);
String title = "";
switch (idx) {
case "0": title = "사번"; break;
case "1": title = "이름"; break;
case "2": title = "직종"; break;
case "3": title = "부서"; break;
}
req.setAttribute("list", list);
req.setAttribute("title", title);
req.getRequestDispatcher("searchList.jsp").forward(req, resp);
}
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println(">> FrontController doPost() 실행 ===========");
req.setCharacterEncoding("UTF-8");
doGet(req, resp);
}
}
이후
FrontController 보기 편하게 모두 class로 만들었다.
SearchCommand.java
package com.mystudy.model.command;
import java.io.IOException;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.mystudy.model.dao.EmployeeDAO;
import com.mystudy.model.vo.EmployeeVO;
public class SearchCommand implements Command{
@Override
public String exec(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String idx = req.getParameter("idx");
String keyword = req.getParameter("keyword");
System.out.println("idx :" + idx + ", keyword : " + keyword);
if (keyword == null) {
return "search.jsp";
}
List<EmployeeVO> list = EmployeeDAO.getSearch(idx, keyword);
String title = "";
switch (idx) {
case "0": title = "사번"; break;
case "1": title = "이름"; break;
case "2": title = "직종"; break;
case "3": title = "부서"; break;
}
req.setAttribute("list", list);
req.setAttribute("title", title);
//req.getRequestDispatcher("searchList.jsp").forward(req, resp);
return "searchList.jsp";
}
}
리턴타입 String으로 해서 가야할 위치를 리턴했다. (.jsp)
FrontController.java
package com.mystudy.front_controller;
import java.io.IOException;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.mystudy.model.command.DeptCommand;
import com.mystudy.model.command.DeptListCommand;
import com.mystudy.model.command.ListCommand;
import com.mystudy.model.command.SearchCommand;
import com.mystudy.model.command.FullnameCommand;
import com.mystudy.model.command.FullnameListCommand;
import com.mystudy.model.dao.EmployeeDAO;
import com.mystudy.model.vo.EmployeeVO;
@WebServlet("/controller")
public class FrontControllerCommand extends HttpServlet {
private static final long serialVersionUID = 1L;
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println(">> FrontController doGet() 실행 ===========");
String type = req.getParameter("type");
System.out.println("type : "+ type);
if(type.equals("list")) {
ListCommand command = new ListCommand();
String path = command.exec(req, resp);
req.getRequestDispatcher(path).forward(req, resp);
}
if(type.equals("dept")) {
DeptCommand command = new DeptCommand();
String path = command.exec(req, resp);
req.getRequestDispatcher(path).forward(req, resp);
}
if(type.equals("deptList")) {
DeptListCommand command = new DeptListCommand();
String path = command.exec(req, resp);
req.getRequestDispatcher(path).forward(req, resp);
}
if(type.equals("fullname")) {
FullnameCommand command = new FullnameCommand();
String path = command.exec(req, resp);
req.getRequestDispatcher(path).forward(req, resp);
}
if(type.equals("fullnameList")) {
FullnameListCommand command = new FullnameListCommand();
String path = command.exec(req, resp);
req.getRequestDispatcher(path).forward(req, resp);
}
if(type.equals("search")) {
SearchCommand command = new SearchCommand();
String path = command.exec(req, resp);
req.getRequestDispatcher(path).forward(req, resp);
}
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println(">> FrontController doPost() 실행 ===========");
req.setCharacterEncoding("UTF-8");
doGet(req, resp);
}
}
깔끔해졌다
여기서 더 간단하게!!!
Command 인터페이스로 변경하였고
반복되는 코드를 if 문 밖으로 빼냈다.
여기에 더 !!!
init과 Map을 사용했다!!!
(매번 객체생성하지 않게)
index는 webContent 밑에 넣었고
나머지는 employees 안에 넣었다
그럼 변경해주어야 할 것이
인덱스 화면에서
employees/를 추가했고
컨트롤러에서도 잘 받을 수 있게
@WebServlet("/employees/controller")
이렇게 바꾸어주었다.
13_MVC_HR_FrontController.zip
7.18MB
'코딩 > Servlet, JSP, MyBatis' 카테고리의 다른 글
Day80_230420_ 프로젝트 3일차 (0) | 2023.04.20 |
---|---|
Day77_230417_ AJAX (0) | 2023.04.17 |
Day75_230413_ JSP, MyBatis 게시판, MVC 패턴 (0) | 2023.04.13 |
Day74_230412_ JSP, MyBatis 게시판 (0) | 2023.04.12 |
Day73_230411_ JSP, MyBatis 게시판 (0) | 2023.04.11 |