-
[Spring] MVCback end 2022. 3. 16. 23:12
Spring의 WEB 로직으로 MVC 패턴을 설정
Servlet 로직이 구현된 설정 파일(mymvc-servlet.xml, applicationContext.xml)
동적, 정적 페이지 연동
정적페이지를 설정 파일을 통해 연동 (web.xml)
MVC 패턴에서 @를 사용해서 로직을 설계
실습) SpringMVC
1. Dynamic Web Project (+web.xml) > convert to Maven Project >. pom.xml dependency 설정
2. index.html 에서 a 태그로 클릭하면 jsp 파일로 이동하도록 작성
<a href="/SpringMVC/test.sp""> test 이동 </a> <br/> <a href="/SpringMVC/test01.sp""> test01 view/test01.jsp 이동 </a> <br/> <a href="/SpringMVC/test02.sp""> test02 view/test02.jsp 이동 </a> <br/> <a href="/SpringMVC/test03.sp""> test03 view01/test03.jsp 이동 </a> <br/> <a href="/SpringMVC/test04.sp""> test04 view01/test04.jsp 이동 </a> <br/> <a href="/SpringMVC/hello.sp""> view01/hello.jsp 이동 </a> <br/>
3. web.xml 수정 (context의 환경설정)
Spring MVC Documentation 참고
Web on Servlet Stack
Spring Web MVC is the original web framework built on the Servlet API and has been included in the Spring Framework from the very beginning. The formal name, “Spring Web MVC,” comes from the name of its source module (spring-webmvc), but it is more com
docs.spring.io
<listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/applicationContext.xml</param-value> </context-param> <servlet> <servlet-name>mymvc</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>mymvc</servlet-name> <url-pattern>*.sp</url-pattern> </servlet-mapping>
servlet-name 태그 이름으로 환경설정 파일을 만든다.
4. mymvc-servlet.xml : Controller 설정파일
url-pattern 태그에는 index.html 의 a 태그 url의 패턴을 적는다.
설정파일에서는 controller를 선언하고 @을 읽는다.
<context:component-scan base-package="controller" />
5. applicationContext.xml : Model(Service, Dao) 설정파일
context-param 태그의 param-value 에 model 설정파일의 경로를 적는다.
model (service, Dao)를 선언하고 @을 읽는다
<context:component-scan base-package="com.model" />
* client는 webapp폴더에서 index.html 만 볼 수 있다. 나머지는 접근 불가.
6. src 에 controller를 생성한다.
class 위에 @Controller를 적고, index.html에서 클릭한 url을 @RequestMapping과 같이 적어준다.
메서드 실행하면 이동할 페이지를 리턴해준다.
@RequestMapping(value="/test.sp") public String Test() { return "/WEB-INF/view/test.jsp"; }
7. Dao 생성
@Repository
Controller --> Service --> Dao로 데이터를 보내야하기 때문에 생성자와 set 메서드를 대신해줄 수 있는 @Autowired도 같이 사용한다.
@Repository public class HelloDao { public String getHello() { return "Hi I'm HelloDao"; } }
8.Service 생성
@Service
@Service public class HelloService { @Autowired private HelloDao hellodao; }
실습)SpringMVC02
폼 데이터 + DB연결 실습
1. pom.xml 과 web.xml 은 위와 동일하게 작성한다.
2. index.html 에 전체 목록을 보는 링크와 입력 링크를 입력한다.
<a href="/SpringMVC02/list.sp"> 전체 목록 </a><br> <a href="/SpringMVC02/insert.sp"> 입 력 </a><br>
3. -sevlet.xml : controller package에 있는 @을 다 읽는 코드 넣는다.
<context:component-scan base-package="com.controller" />
4. applicationContext.xml : Model 환경설정
- model, entity package의 @을 읽는다.
- DB를 연결하는 <bean/> 태그 작성
- Dao에서 DB를 연결할 때 사용할 jdbctemplate connection을 bean에 등록한다.
<context:component-scan base-package="com.model" /> <context:component-scan base-package="com.entity" /> <bean id="dataSource" class="org.springframework.jdbc.datasource.SimpleDriverDataSource" p:driverClass="com.mysql.cj.jdbc.Driver" p:url="jdbc:mysql://localhost:3306/shopdb?characterEncoding=UTF-8&serverTimezone=UTC" p:username="root" p:password="mcys1309" /> <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> <property name="dataSource" ref="dataSource"></property> </bean>
5. Entity
저장할 데이터를 VO객체로 만든다.
name, age, hobby (field, constructor, get set method)
6. 프로젝트 하위에 db폴더 만들고 sql로 DB에 데이터 입력하기
create table user1( name varchar(40), age int, hobby varchar(40) );
7. Dao
@Repository
- jdbcTemplate : DB에서 쿼리로 데이터 가져올 때 사용한다. applicationContext.xml에서 bean으로 등록했기 때문에 바로 사용가능하다. @Autowired로 JdbcTemplate 선언하고 사용하기!
@Autowired JdbcTemplate jdbcTemplate;
- list method: listUser()
public List<User> listUser() { List<User> res = jdbcTemplate.query("select * from user1", new RowMapper<User>() { @Override public User mapRow(ResultSet rs, int rowNum) throws SQLException { User u = new User(); u.setName(rs.getString("NAME")); u.setAge(rs.getInt("AGE")); u.setHobby(rs.getString("HOBBY")); return u; } }); return res; }
- insert method: inserUser
public boolean insertUser(User user) { int res = jdbcTemplate.update("insert into user1 values(?,?,?)", new Object[] { user.getName(), user.getAge(), user.getHobby() }); return (res > 0) ? true : false; }
8. Service
@Service
Dao에서 데이터 받기 위해 선언한다.
@Autowired private UserDao userDao;
list 전체보기 및 insert
public List<User> listUser() { return userDao.listUser(); } public boolean insertUser(User user) { return userDao.insertUser(user); }
9. Controller
@Controller
Biz에서 데이터를 넘겨받는다.
@Autowired private UserService userService;
전체 출력 페이지
Model로 request, response 정보를 받는다. all_list 라는 속성이름으로 DB로 부터 온 데이터값을 model에 저장한다.
그리고 list.jsp로 이동한다.
@RequestMapping("/list.sp") public String list(Model model) { model.addAttribute("all_list", userService.listUser()); return "/WEB-INF/view/list.jsp"; }
입력페이지
입력을 클릭시 입력페이지로 이동한다.
@RequestMapping("/insert.sp") public String insertPage() { return "/WEB-INF/view/insert.jsp"; }
입력페이지 insert.jsp에서 받은 데이터를 넘긴다.
- insert.jsp에서 제출 버튼을 클릭하면 해당 데이터를 Post방식으로 /insert_res.sp로 넘긴다.
<form action="<%=application.getContextPath()%>/insert_res.sp" method="Post">
- 입력페이지에서 /insert_res.sp 맵핑이 @된 insertRes 메서드를 실행한다.
@RequestMapping(value = "/insert_res.sp", method = RequestMethod.POST) public String insertRes(@ModelAttribute User user) { if (userService.insertUser(user) == true) { return "/list.sp"; } else { return "/WEB-INF/view/insert.jsp"; } }
'back end' 카테고리의 다른 글
[Spring] AOP (0) 2022.03.16 [Spring] DI Annotation (0) 2022.03.15 [JSP] EL/JSTL (0) 2022.03.09 [MVC] WebScore 프로젝트 (0) 2022.03.09 [MVC 패턴] DB연동 (0) 2022.03.08