일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- Math.ceil()
- hide
- 주석이 먹히지 않을 때
- Excel
- 파일질라설치
- toFixed()
- ctrl+/
- Math.round()
- is_check
- removeClass
- selectedIndex
- index %
- Parent
- 소스트리인증실패
- FileZilla설치
- 증가값
- Math.floor()
- SUB함수
- 파일질라다운로드
- selectoptions
- calc.minus
- 파일질라설치오류
- excel중복체크
- push오류
- FileZilla다운로드
- slideUp
- addClass
- 1521
- calc.plus
- Git
- Today
- Total
잡동사니에도 사랑을
[21.11.17] WAC (Web Application Context) 등록 - (chapter06_SpringWebMaven) 본문
[21.11.17] WAC (Web Application Context) 등록 - (chapter06_SpringWebMaven)
luvforjunk 2021. 11. 17. 15:01★ WAC (Web Application Context) 등록
1. ContextLoaderListener가 생성하는 Root WAC
- 웹 환경과 독립적인 빈 등록
- 디폴트 설정 파일 /WEB-INF/applicationContext.xml 으로 설정 된다
- 서비스계층과 데이터 액세스 계층을 포함해서 웹 환경과 직접 관련이 없는 모든 빈들을 여기에 등록 한다
→ 만약에 사용할 이름이 다르거나 설정파일이 여러 개인 경우
contextConfigLocation 파라미터를 추가해서 설정해주면 된다
2. DispatcherServlet이 생성하는 WAC
- DispatcherServlet이 직접 사용하는 컨트롤러를 포함한 웹 관련 빈을 등록
- 디폴트 설정 파일 /WEB-INF/서블릿이름-servlet.xml으로 설정된다
→ 만약에 사용할 이름이 다르거나 설정파일이 여러 개인 경우
contextConfigLocation 파라미터를 추가해서 설정해주면 된다
[예제] Spring MVC + mybatis + jQuery
http://localhost:8080/chapter06_SpringWebMaven/main/index
Project : chapter06_SpringWebMaven (
Package : main.controller
Class : IndexController.java
Package : user.controller
Class : UserController.java
Package : user.bean
class : UserDTO.java
Package : user.service
Interface : UserService.java
Class : UserServiceImpl.java
Package : user.dao
Interface : UserDAO.java
Class : UserDAOMybatis.java
: userMapper.xml
File : index.jsp
Folder : user
File : writeForm.jsp
write.jsp
Folder : js
File : user.js
src : mybatis-config.xml
스프링 설정 파일
/WEB-INF/dispatcherServlet-servlet.xml → /WEB-INF/spring/appServlet/servlet-context.xml
/WEB-INF/spring/root-context.xml
////////index.jsp
//-------------중략-------------------
<body>
<h1>*** 메인화면 ***</h1>
<hr>
<h3>
<p><a href="/chapter06_SpringWebMaven/user/writeForm">입력</a></p>
<p><a href="">출력</a></p>
<p><a href="">수정</a></p>
<p><a href="">삭제</a></p>
</h3>
</body>
웹 페이지의 시작 위치가 되는 index.jsp파일이다.
결과 화면을 먼저 보면 다음과 같다.
Bean 등록을 위해 xml파일을 먼저 설정해주려고 한다.
설정에 앞서 servlet-context.xml / root-context.xml / web.xml 의 차이에 대해 정리해보자.
우선, xml 파일은 모두 객체(Bean)을 정의한다.
1. servlet-context.xml - '요청'과 관련된 객체 정의
url과 관련된 controller, @어노테이션, ViewResolver, Interceptor, MultipartResolver 등의 설정을 해준다.
DispatcherServlet과 관련된 설정을 반드시 해야한다.
2. root-context.xml
servlet-context.xml과는 반대로 view와 관련되지 않은 객체를 정의한다.
Service / Repository(DAO) / DB 등 비즈니스 로직과 관련된 설정을 해준다.
3. web.xml - 설정파일
WAS 최초 구동 시의 설정을 정의한다.
여러 xml파일을 인식하도록 파일을 가리키는 역할을 한다.
////////web.xml
<!--
웹과는 독립된 WAC
/WEB-INF/applicationContext.xml
-> 변경 /WEB-INF/spring/root-context.xml
-->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring/root-context.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!--
웹과 관련된 WAC
/WEB-INF/dispatcherServlet-servlet.xml
-> 변경 /WEB-INF/spring/appServlet/servlet-context.xml로 변경한다. -->
<servlet>
<servlet-name>dispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 파일명이나 위치를 변경할 때 -->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/spring/appServlet/servlet-context.xml
</param-value>
//------------------------중략--------------------------------
////////writeForm.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>
<style type="text/css">
div {
color: red;
font-size: 8pt;
font-weight: bold;
}
</style>
</head>
<body>
<form id="writeForm" method="post">
<img alt="네오앤프로도" src="../image/neoNprodo.gif" width="80" height="80"
onclick="location.href='../index.jsp'" style="cursor: pointer;">
<table border="1" cellspacing="0" cellpadding="5">
<tr>
<td width="50" align="center">이름</td>
<td>
<input type="text" name="name" id="name">
<div id="nameDiv"></div>
</td>
</tr>
<tr>
<td width="50" align="center">아이디</td>
<td>
<input type="text" name="id" id="id">
<div id="idDiv"></div>
</td>
</tr>
<tr>
<td width="80" align="center">비밀번호</td>
<td>
<input type="password" name="pwd" id="pwd">
<div id="pwdDiv"></div>
</td>
</tr>
<tr>
<td colspan="2" align="center">
<input type="button" value="회원가입" id="writeBtn">
<input type="reset" value="다시작성">
</td>
</tr>
</table>
</form>
<script type="text/javascript" src="http://code.jquery.com/jquery-3.6.0.min.js"></script>
<script type="text/javascript" src="../js/user.js"></script>
</body>
</html>
////////UserController.java
package user.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import user.service.UserService;
@Controller
public class UserController {
private UserService userService;
@RequestMapping(value = "/user/writeForm", method = RequestMethod.GET)
public String writeForm() {
return "/user/writeForm";
}
@RequestMapping(value = "/user/checkId", method = RequestMethod.POST)
@ResponseBody
public String checkId(@RequestParam String id) {
return "exist"; // @ResponseBody를 쓰지 않게 되면 "exist"라는 jsp파일을 찾음
// 문자열이 들어올 수 있도록 @ResponseBody를 써줘야 한다
}
}
////////servlet-context.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd">
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="suffix" value=".jsp"></property>
</bean>
<context:component-scan base-package="user.controller" />
<mvc:resources location="/js/" mapping="/js/**" />
<mvc:resources location="/image/" mapping="/image/**" />
<mvc:annotation-driven />
</beans>
구문을 하나하나 살펴보자!
<context:component-scan>
특정 패키지 내의 클래스를 스캔하고, Annotation(@Component @Controller @Service @Repository) 확인한 후
Bean인스턴스로 생성한다.
이를 이용하면 @Autowired와 @Qualifier Annotation을 인식할 수 있다.
context:component-scan을 선언했다면 context:annotation-config를 선언할 필요가 없다.
<mvc:resources>
Spring은 기본적으로 JSP 등 동적인 페이지와는 달리 HTML, CSS, JavaScript 등 정적인 리소스에 대한 접근을 막는다.
정적인 리소스를 서비스해야 한다면 dispatcher-servlet.xml에 <mvc:resources>를 추가함으로써 접근을 허용할 수 있다.
<mvc:annotation-driven>
index.jsp에서 '입력' 클릭 시 writeForm으로 화면 이동이 생기도록
<p><a href="/chapter06_SpringWebMaven/user/writeForm">입력</a></p>
다음과 같이 설정해두었다.
위 이미지와 같이 console창에 'No mapping for GET~ ' 이라는 메시지가 뜨면서 웹 화면에는 404 에러가 뜬다.
하지만 servlet-context.xml 파일에 <mvc:annotation-driven> 입력하였더니 화면 이동이 정상적으로 이루어진다.
그 기능에 대해 알아보자.
1. Spring Web MVC를 하기 위해 설정해야 하는 값들을 자동으로 추가해준다.
2. Spring MVC가 @Controller에 요청을 보내기 위해 필요한 HandlerMapping과 HandlerAdapter를 bean으로 등록한다.
- HandlerMapping : HTTP 요청정보를 이용해서 컨트롤러를 찾아주는 기능
- HandlerAdapter : HandlerMapping을 통해 찾은 컨트롤러를 직접 실행하는 기능을 수행
3. bean을 생성하기 위해 xml 파일에 context:component-scan을 명시하면 이 태그를 포함하지 않아도 MVC 애플리케이션은 작동한다.
////////user.js
$('#writeBtn').click(function(){
});
// 중복체크
$('#id').focusout(function(){
$('#idDiv').empty();
if($('#id').val() == '')
$('#idDiv').html('아이디 입력');
else
$.ajax({
url : '/chapter06_SpringWebMaven/user/checkId',
type : 'post',
data : 'id=' + $('#id').val(), // = {'id' : $('#id').val()} / 'id='안에는 절대 공백이 들어가면 안된다
dataType : 'text', //서버로 받을 타입 exist - 사용불가능, non-exist-사용가능
success : function(data) {
if(data == 'exist'){
$('#idDiv').text('사용 불가능');
}else if(data == 'non_exist'){
$('#idDiv').text('사용 가능');
}
},
error : function(err){
console.log(err);
}
});
});
[결과]
'SPRING' 카테고리의 다른 글
[21.11.18] (0) | 2021.11.18 |
---|---|
[21.11.17] (chapter06_1) (0) | 2021.11.17 |
[21.11.16] 스프링 MVC (chapter06) (0) | 2021.11.16 |
[21.11.11] (sample01 - chapter03_SpringMaven) (0) | 2021.11.11 |
[21.11.11] AOP 예제 (sample01 - chapter03) (0) | 2021.11.11 |