목차
Spring | Home
Cloud Your code, any cloud—we’ve got you covered. Connect and scale your services, whatever your platform.
spring.io
커멘드 디자인 패턴 만들기
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13</version>
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/javax.servlet.jsp/javax.servlet.jsp-api -->
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>javax.servlet.jsp-api</artifactId>
<version>2.3.3</version>
<scope>provided</scope>
</dependency>
</dependencies>
.jsp 파일 접근하지 못하게 하기
@Webservlet("/index.do")
public class IndexController extends HttpServlet{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
RequestDispatcher rd=req.getRequestDispatcher("/WEB-INF/views/index.jsp");
rd.forward(req, resp);
}
}
<div>
<a href="${pageContext.request.contextPath }/index.do">home</a>
<a href="${pageContext.request.contextPath }/intro.do">intro</a>
<a href="${pageContext.request.contextPath }/emp.do">emp</a>
<a href="${pageContext.request.contextPath }/login.do">login</a>
</div>
프론트 컨트롤러 디자인 패턴
모든 요청을 받는 컨트롤러 만들기
MyController (Interface)
package com.gimhae.framework.mvc;
public interface MyController {
String execute(HttpServletRequest req, HttpServletResponse resp);
}
*controller.java
package com.gimhae.framework.controller;
public class IndexController implements MyController{
public String execute(HttpServletRequest req, HttpServletResponse resp){
return "index";
}
}
DispatcherServlet
package com.gimhae.framework.mvc;
public class DispatcherServlet extends HttpServlet{
Map<String,String> handler=new HashMap<>();
@Override
public void init() throws ServletException {
//handlerMapping
Enumeration<String> enu=this.getInitParameterNames();
while(enu.hasMoreElements()) {
String key=enu.nextElement();
String val=this.getInitParameter(key);
handler.put(key,val);
}
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doDo(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doDo(req, resp);
}
protected void doDo(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//System.out.println("front end Controller");
String path=req.getRequestURI();
// System.out.println(req.getContextPath());
MyController controller=null;
try {
Class clz=null;
String info=null;
info=handler.get(path.substring(req.getContextPath().length()));
if(info==null) {
resp.sendError(HttpServletResponse.SC_NOT_FOUND);
return;
}
clz=Class.forName(info);
controller=(MyController) clz.getDeclaredConstructor().newInstance();
//viewResolver
String prefix="/WEB-INF/views/";
String suffix=".jsp";
String viewName=controller.execute(req, resp);
if(viewName.startsWith("redirect:")) {
resp.sendRedirect(viewName.substring("redirect:".length()));
}else {
RequestDispatcher rd=req.getRequestDispatcher(prefix+viewName+suffix);
rd.forward(req, resp);
}
}catch(Exception e) {
e.printStackTrace();
}
}
}
Web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.1" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd">
<display-name>Archetype Created Web Application</display-name>
<servlet>
<servlet-name>framework</servlet-name>
<servlet-class>com.gimhae.framework.mvc.DispatcherServlet</servlet-class>
<init-param>
<param-name>/index.do</param-name>
<param-value>com.gimhae.framework.controller.IndexController</param-value>
</init-param>
<init-param>
<param-name>/intro.do</param-name>
<param-value>com.gimhae.framework.controller.IntroController</param-value>
</init-param>
<init-param>
<param-name>/emp.do</param-name>
<param-value>com.gimhae.framework.controller.ListController</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>framework</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
Framework 배포하기
- [Run As]>[Maven Build]
> 기존의 jar 파일을 지우고 다시 만들떄:
Framework 사용하기
Dynamic Web Project 만들기
jar 파일들을 lib 폴더로 복사한다.
web.xml에 서브렛 정보를 입력한다.
<servlet>
<servlet-name>framework</servlet-name>
<servlet-class>com.gimhae.framework.mvc.DispatcherServlet</servlet-class>
<init-param>
<param-name>/index.do</param-name>
<param-value>com.gimhae.controller.IndexController</param-value>
</init-param>
<init-param>
<param-name>/intro.do</param-name>
<param-value>com.gimhae.controller.IntroController</param-value>
</init-param>
<init-param>
<param-name>/emp/list.do</param-name>
<param-value>com.gimhae.controller.ListController</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>framework</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
jsp 파일들을 WEB-INF 안의 view 폴더 안에 작성한다.
model과 controller를 작성한다.
Mysql 데이터 가져오기
list.jsp
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<body>
<%@include file="../template/menu.jspf" %>
<h2 class="page-header">list page</h2>
<table>
<thead>
<tr>
<th>사번</th>
<th>이름</th>
<th>금액</th>
<th>날짜</th>
</tr>
</thead>
<tbody>
<c:forEach items="${alist }" var="bean">
<c:url value="detail.do" var="detail">
<c:param name="empno" value="${bean }"></c:param>
</c:url>
<tr>
<td><a href="${detail }">${bean.empno }</a></td>
<td><a href="${detail }">${bean.ename }</a></td>
<td><a href="${detail }">${bean.pay }</a></td>
<td><a href="${detail }">${bean.hiredate }</a></td>
</tr>
</c:forEach>
</tbody>
</table>
<%@include file="../template/footer.jspf" %>
</body>
ListController.java
package com.gimhae.controller;
public class ListController implements MyController{
@Override
public String execute(HttpServletRequest req, HttpServletResponse arg1) {
EmpDao dao=new EmpDao();
try {
req.setAttribute("alist", dao.pullList());
} catch (SQLException e) {
e.printStackTrace();
}
return "emp/list";
}
}
템플릿 메서드 패턴
EmpDao.java
'100일 챌린지 > 빅데이터기반 인공지능 융합 서비스 개발자' 카테고리의 다른 글
Day 42 - Framework 만들기 (2) | 2024.09.24 |
---|---|
Day 41 - Embeded (0) | 2024.09.23 |
Day 38 - Filter / Listener (1) | 2024.09.13 |
Day38 - Maven으로 웹사이트 만들고 배포하기 (1) | 2024.09.13 |
Day 37 - Build tool 세팅하기 (Maven) (1) | 2024.09.12 |