728x90

Spring MVC

  • Dispatcher Servlet이 설정정보 내용들을 가지고 있어야 함(독립적인 Spring container)

  • controller의 역할 : 비즈니스호출, 결과값 전달, 경로설정

  • ModelAndView보다 Spring이 더 자주쓰임

  • View : 항상 jsp는 아니다

-VO객체, Command객체(DTO객체, 폼객체), 폼으로 값을 넘겨주기 위한 객체

 

*폼 입력값 검증

Client측에서 폼 입력값 검증을 하는게 나음(Server단에서x)

 

 

 

<validation check>

 

**폼 입력값 검증(validator)

--BoardController

@RequestMapping(value="/board_insert", method=RequestMethod.GET)

         public String insertForm(@ModelAttribute("boardCommand") Board board){//처음 경로설정값이기 때문에 modelAttribute설정 해주어야 함

                 return "insert_form";

         }

 

BoardController@RequestMapping(value="/board_insert", method=RequestMethod.POST)

         public String board_insert(@ModelAttribute("boardCommand") @Valid Board board, BindingResult errors){

                 if(errors.hasErrors()){

                          System.out.println("에러발생");

                          return "insert_form";

                 }

}

 

Board.java

@NotEmpty(message = "반드시 제목을 입력하세요.")

         @Size(min=2, max=5, message="2~5사이 글자수 입력")

         private String title;

         

         @Pattern(regexp="[0-9a-zA-Z가-힣]*",message="특수문자 금지")

         private String writer;

 

form       ->      controller    ->    view

      (command객체)         (ModelAttribute사용)

       (valid체크)

 

--insert_form.jsp

<%@ page language="java" contentType="text/html; charset=utf-8"

    pageEncoding="utf-8"%>

<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>

<!DOCTYPE html>

<html>

<head>

<meta charset="EUC-KR">

<title>����기</title>

<style type="text/css">

         .error{

                 color: #ff0000;

         }

</style>

</head>

<body>

<h3> 게시글 올리기 </h3>

<hr><br>

         <form:form action = "board_insert" method="post"

                 commandName="boardCommand" >

         제목 <br> <form:input type="text" path = "title"/>

                                  <form:errors path="title" cssClass="error"/> <br>

         작성자<br> <form:input type ="text" path ="writer"/>

                                  <form:errors path="writer" cssClass="error"/> <br>

         내용 <br>

                 <form:textarea rows="7" cols="70" path= "contents"></form:textarea><br>

                 <br><input type="submit" value="등록">

         </form:form>

</body>

</html>

 

 

**DB와 연동

  • DAO 지원 클래스 사용

 

dependency Injection으로 만들어야지 new로 만들면 안됨!! -> spring container가 이 모든것을 관리해주기 때문

 

<!-- DB Setting -->

         <bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">

                 <constructor-arg name="sqlSessionFactory" ref="sqlSessionFactory"/>

         </bean>

         

         <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">

                 <property name="dataSource" ref="dataSource"/>

                 <property name="configLocation" value="/WEB-INF/mybatis-config.xml"/>

         </bean>

         

         <bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">

                 <property name="jndiName" value="jdbc/oracle"/>

                 <property name="resourceRef" value="true"/>

         </bean>

 

 

 

 

**@RequestParam 어노테이션 이용한 파라메터 매핑 : integer로 변환할 필요 없음

@RequestParam("name") String name, @RequestParam("age") int age) 

 

@RequestMapping("/board_detail")

         public String board_detail(Model model, @RequestParam("seq") int seq){

                 Board board = dao.detailBoard(seq);

                 model.addAttribute("board",board);

                 return "detail";

         }

 

 

 

**RESTful방식

url-> 의미있는 data전달

 

detail_board?

=>    

@RequestMapping(“/game/users/{userId}/characters/{characterId}”)

    public String characterInfo( @PathVariable String userId

, @PathVariable int characterId, ModelMap model){

 

 

@RequestMapping("/board_detail{seq}")

         public String board_detail(Model model, @PathVariable int seq){

                 Board board = dao.detailBoard(seq);

                 model.addAttribute("board",board);

                 return "detail";

         }

 

<td><a href="board_detail?seq=${board.seq }">${board.title }</a></td>

=>

<td><a href="board_detail${board.seq }">${board.title }</a></td>

 

 

**템플릿만들기

tiles => Template

 

 

 

728x90

+ Recent posts