Spring MVC 4.1.3+MyBatis 제로 기초 구축 웹 개발 프레임 워 크(주해 모델)

23904 단어 springmybatis
우선 윤 과 소프트웨어 에 감 사 드 리 며 스프링 MVC 웹 개발 의 길 을 안내 해 주 셨 습 니 다.
본론 으로 들 어가 도록 하 겠 습 니 다.
개발 환경 구축:
Netbeans8.0.2 + MySql5.6 + JDK1.7 + tomcat8.0.15
  • 번 에 사 용 된 Spring MVC Jar 가방 은 다음 과 같 습 니 다.
  • spring-aop-4.1.3.RELEASE.jar
  • spring-beans-4.1.3.RELEASE.jar
  • spring-context-4.1.3.RELEASE.jar
  • spring-context-support-4.1.3.RELEASE.jar
  • spring-core-4.1.3.RELEASE.jar
  • spring-expression-4.1.3.RELEASE.jar
  • spring-jdbc-4.1.3.RELEASE.jar
  • spring-oxm-4.1.3.RELEASE.jar
  • spring-tx-4.1.3.RELEASE.jar
  • spring-web-4.1.3.RELEASE.jar
  • spring-webmvc-4.1.3.RELEASE.jar
  • 1.먼저 웹 프로젝트 만 들 기
    web.mvc
    2.모든 jar 파일 도입
    3.웹.xml 설정
    웹 개발 을 하 는 사람들 은 모두 알 고 있 습 니 다.웹.xml 은 프로젝트 의 입구 입 니 다.우 리 는 spring 을 사용 하 는 이상 당연히 Spring 의 지원 을 추가 해 야 합 니 다!
    spring 기본 값 은 applicationContext.xml 입 니 다.MyBatis 를 통합 해 야 하기 때 문 입 니 다.
    그래서 저 는 Spring 의 프로필 이름 을 강제로 지정 하고 MyBatis 와 함께 설정 하여 프로필 수 를 줄 였 습 니 다.
    spring 프로필 이름과 경 로 를 먼저 지정 합 니 다.
    
    <!-- Spring         Spring     --> 
     <context-param> 
      <param-name>contextConfigLocation</param-name> 
      <param-value>classpath*:xmlconfig/springmvc-mybatis.xml</param-value> 
     </context-param> 
    
    Spring 컨 텍스트 감청 설정 을 다시 실행 합 니 다.
    
    <listener> 
     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
    </listener> 
    Spring mvc 지원 설정 추가
    설명:지원 을 추가 하 는 방법 은 현재 세 가지 가 있 습 니 다.
    첫 번 째:차단/*.do
    
    <!-- spring mvc       --> 
    <servlet> 
     <servlet-name>springmvc</servlet-name> 
     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
      <init-param> 
       <param-name>contextConfigLocation</param-name> 
       <param-value>classpath*:/xmlconfig/springmvc-servlet.xml</param-value> 
      </init-param> 
      <load-on-startup>1</load-on-startup> 
     </servlet> 
     <servlet-mapping> 
     <servlet-name>springmvc</servlet-name> 
     <url-pattern>/*.do</url-pattern> 
    </servlet-mapping> 
    
    장점:차단 이 명확 하고 다른 차단 과 충돌 하지 않 습 니 다.
    단점:URL 이 아름 답지 않 음
    두 번 째:차단/*
    
    <!-- spring mvc       --> 
    <servlet> 
     <servlet-name>springmvc</servlet-name> 
     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
      <init-param> 
       <param-name>contextConfigLocation</param-name> 
       <param-value>classpath*:/xmlconfig/springmvc-servlet.xml</param-value> 
      </init-param> 
      <load-on-startup>1</load-on-startup> 
     </servlet> 
     <servlet-mapping> 
     <servlet-name>springmvc</servlet-name> 
     <url-pattern>/*</url-pattern> 
    </servlet-mapping> 
    
    장점:rest 스타일 지원,Url 미관
    단점:정적 자원 차단
    세 번 째 도 제 가 추천 하 는 것 중 하나 입 니 다.차단/
    
    <!-- spring mvc       --> 
    <servlet> 
     <servlet-name>springmvc</servlet-name> 
     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
      <init-param> 
       <param-name>contextConfigLocation</param-name> 
       <param-value>classpath*:/xmlconfig/springmvc-servlet.xml</param-value> 
      </init-param> 
      <load-on-startup>1</load-on-startup> 
     </servlet> 
     <servlet-mapping> 
     <servlet-name>springmvc</servlet-name> 
     <url-pattern>/</url-pattern> 
    </servlet-mapping> 
    
    장점:rest 스타일 을 지원 하고 URL 이 아름 다 우 며 정적 자원 을 차단 하지 않 습 니 다.
    우 리 는 세 번 째 차단 방안 으로 웹 xml 에 설정 을 추가 합 니 다.
    모두 가 알다 시 피 웹 프로젝트 에서 가장 두려워 하 는 것 은 난 코드 입 니 다.spring 은 문자 인 코딩 필 터 를 제공 합 니 다.저희 도 웹.xml 에 설정 합 니 다.
    
    <!--        --> 
    <filter> 
     <filter-name>characterEncodingFilter</filter-name> 
     <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> 
     <init-param> 
      <param-name>encoding</param-name> 
      <param-value>UTF-8</param-value> 
     </init-param> 
     <init-param> 
      <param-name>forceEncoding</param-name> 
      <param-value>true</param-value> 
     </init-param> 
    </filter> 
    <filter-mapping> 
     <filter-name>characterEncodingFilter</filter-name> 
     <url-pattern>/*</url-pattern> 
    </filter-mapping> 
    
    Google 은 tomcat 서버 를 사용 합 니 다.정적 자원 을 tomcat 에 직접 전달 하기 위해 웹.xml 에 다음 설정 을 설정 하 였 습 니 다.
    
    <!--   Tomcat defaultServlet        --> 
    <servlet-mapping> 
     <servlet-name>default</servlet-name> 
     <url-pattern>*.jpg</url-pattern> 
    </servlet-mapping> 
    <servlet-mapping> 
     <servlet-name>default</servlet-name> 
     <url-pattern>*.gif</url-pattern> 
    </servlet-mapping> 
    <servlet-mapping> 
     <servlet-name>default</servlet-name> 
     <url-pattern>*.png</url-pattern> 
    </servlet-mapping> 
    <servlet-mapping> 
     <servlet-name>default</servlet-name> 
     <url-pattern>*.js</url-pattern> 
    </servlet-mapping> 
    <servlet-mapping> 
     <servlet-name>default</servlet-name> 
     <url-pattern>*.css</url-pattern> 
    </servlet-mapping> 
    
    4.springmvc-mybatis.xml 와 springmvc-servlet.xml 설정
    많은 사람들 이 이곳 에 있 을 거 라 고 믿 습 니 다.설정 이 너무 많아 서 여러 가지 방식 이 있 습 니 다.
    여러분 에 게 방해 가 되 지 않도록 저 는 완전한 설정 을 직접 붙 이기 로 했 습 니 다.
    springmvc-mybatis.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:p="http://www.springframework.org/schema/p"  
      xmlns:mvc="http://www.springframework.org/schema/mvc"  
      xmlns:context="http://www.springframework.org/schema/context"  
      xmlns:util="http://www.springframework.org/schema/util"  
      xsi:schemaLocation="http://www.springframework.org/schema/beans 
       http://www.springframework.org/schema/beans/spring-beans-4.1.xsd  
       http://www.springframework.org/schema/context 
       http://www.springframework.org/schema/context/spring-context-4.1.xsd  
       http://www.springframework.org/schema/mvc 
       http://www.springframework.org/schema/mvc/spring-mvc-4.1.xsd  
       http://www.springframework.org/schema/util 
       http://www.springframework.org/schema/util/spring-util-4.1.xsd"> 
     
     <!--      --> 
     <bean id="dataSource" class="com.jolbox.bonecp.BoneCPDataSource"> 
      <property name="driverClass" value="jdbc:mysql://127.0.0.1:3306/web" /> 
      <property name="jdbcUrl" value="root" /> 
      <property name="username" value="123456" /> 
      <property name="password" value="com.mysql.jdbc.Driver" /> 
     </bean> 
      
     <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> 
      <property name="dataSource" ref="dataSource" /> 
      <property name="mapperLocations" value="classpath*:dbmap/*Mapper.xml" /> 
     </bean> 
      
     <!--         --> 
     <bean id="transactionManager" 
       class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> 
      <property name="dataSource" ref="dataSource" /> 
     </bean> 
      
     <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> 
      <property name="dataSource"> 
       <ref bean="dataSource" /> 
      </property> 
     </bean> 
     <bean id="defaultLobHandler" 
       class="org.springframework.jdbc.support.lob.DefaultLobHandler" 
       lazy-init="true"/> 
     <!--                                       MapperFactoryBean--> 
     <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> 
      <property name="basePackage" value="com.ansitech.web.orm.mapper" /> 
     </bean> 
    </beans> 
    
    spring-servlet.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.1.xsd 
      http://www.springframework.org/schema/beans 
        http://www.springframework.org/schema/beans/spring-beans-4.1.xsd 
      http://www.springframework.org/schema/context 
        http://www.springframework.org/schema/context/spring-context-4.1.xsd"> 
      
     <description>Spring MVC Configuration</description> 
      
     <!--           ,  default servlet handler   --> 
     <mvc:default-servlet-handler/> 
      
     <!--   spring mvc    --> 
     <context:annotation-config /> 
      
     <!--            --> 
     <mvc:annotation-driven /> 
      
     <!--            jar  --> 
     <context:component-scan base-package="com.ansitech.web"></context:component-scan> 
      
     <!--        POJO    --> 
    <bean class= 
      "org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"/> 
      
     <!-- JSP         --> 
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
     <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/> 
     <property name="prefix" value="/WEB-INF/view/"/> 
     <property name="suffix" value=".jsp"/> 
     <property name="viewNames" value="jsp/*"/> 
     <property name="order" value="1"/> 
    </bean> 
      
    <bean class="org.springframework.web.servlet.view.UrlBasedViewResolver"> 
     <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/> 
     <property name="prefix" value="/WEB-INF/view/"/> 
     <property name="suffix" value=".jsp"/> 
     <property name="order" value="2"/> 
    </bean> 
     
     <!--       ,           10M=10*1024*1024(B)=10485760 bytes --> 
     <bean id="multipartResolver" 
       class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> 
      <!-- one of the properties available; the maximum file size in bytes --> 
      <property name="maxUploadSize"> 
       <value>5242880</value> 
      </property> 
     </bean> 
    </beans> 
    
    web.xml
    
    <?xml version="1.0" encoding="UTF-8"?> 
     
    <web-app xmlns="http://java.sun.com/xml/ns/javaee" 
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
       xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
       http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" 
       version="3.0"> 
     <!--   Session   --> 
     <session-config> 
      <!-- Session    (  : ) --> 
      <session-timeout>30</session-timeout> 
     </session-config> 
      
     <!--   Tomcat defaultServlet        --> 
     <servlet-mapping> 
      <servlet-name>default</servlet-name> 
      <url-pattern>*.jpg</url-pattern> 
     </servlet-mapping> 
     <servlet-mapping> 
      <servlet-name>default</servlet-name> 
      <url-pattern>*.gif</url-pattern> 
     </servlet-mapping> 
     <servlet-mapping> 
      <servlet-name>default</servlet-name> 
      <url-pattern>*.png</url-pattern> 
     </servlet-mapping> 
     <servlet-mapping> 
      <servlet-name>default</servlet-name> 
      <url-pattern>*.js</url-pattern> 
     </servlet-mapping> 
     <servlet-mapping> 
      <servlet-name>default</servlet-name> 
      <url-pattern>*.css</url-pattern> 
     </servlet-mapping> 
     
     <!-- Spring         Spring     --> 
     <context-param> 
      <param-name>contextConfigLocation</param-name> 
      <param-value>classpath*:xmlconfig/springmvc-mybatis.xml</param-value> 
     </context-param> 
     
     <listener> 
      <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
     </listener> 
      
     <!-- spring mvc       --> 
     <servlet> 
      <servlet-name>springmvc</servlet-name> 
      <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
      <init-param> 
       <param-name>contextConfigLocation</param-name> 
       <param-value>classpath*:/xmlconfig/springmvc-servlet.xml</param-value> 
      </init-param> 
      <load-on-startup>1</load-on-startup> 
     </servlet> 
     <servlet-mapping> 
      <servlet-name>springmvc</servlet-name> 
      <url-pattern>/</url-pattern> 
     </servlet-mapping> 
      
     <!--        --> 
     <filter> 
      <filter-name>characterEncodingFilter</filter-name> 
      <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> 
      <init-param> 
       <param-name>encoding</param-name> 
       <param-value>UTF-8</param-value> 
      </init-param> 
      <init-param> 
       <param-name>forceEncoding</param-name> 
       <param-value>true</param-value> 
      </init-param> 
     </filter> 
     <filter-mapping> 
      <filter-name>characterEncodingFilter</filter-name> 
      <url-pattern>/*</url-pattern> 
     </filter-mapping> 
     
     <!--     --> 
     <welcome-file-list> 
      <welcome-file>/index.html</welcome-file> 
     </welcome-file-list> 
    </web-app> 
    
    다음은 가방 의 구조 입 니 다.
    접 두 사 는 여러분 이 좋아 하 는 것 을 스스로 정의 할 수 있 지만 뒤의 구 조 는 전체 구조의 핵심 이 므 로 제 격식 에 따라 지어 주세요.
    접두사 com.ansitech
    com.ansitech.orm
    com.ansitech.orm.base
    com.ansitech.orm.mapper
    com.ansitech.service
    com.ansitech.service.po
    com.ansitech.service.impl
    com.ansitech.web
    com.ansitech.web.controller
    여러분 은 이해 하지 못 하 시 겠 지만,왜 이렇게 지어 야 합 니까?
    그러면 사용자 관리 모듈 로 사용자 대상 을 user 로 설명 합 니 다.
    그러면 우 리 는 기초 대상 을 세 워 야 한다.
    com.ansitech.orm.base.User.Java
    
    package com.ansitech.orm.base; 
     
    /** 
     *      
     * 
     * @author qsyang 
     */ 
    public class User { 
     
     private int id; 
     private String loginName; 
     private String loginPwd; 
     /** 
      *      1     2      
      */ 
     private int typeId; 
     
     public int getId() { 
      return id; 
     } 
     
     public void setId(int id) { 
      this.id = id; 
     } 
     
     public String getLoginName() { 
      return loginName; 
     } 
     
     public void setLoginName(String loginName) { 
      this.loginName = loginName; 
     } 
     
     public String getLoginPwd() { 
      return loginPwd; 
     } 
     
     public void setLoginPwd(String loginPwd) { 
      this.loginPwd = loginPwd; 
     } 
     
     public int getTypeId() { 
      return typeId; 
     } 
     
     public void setTypeId(int typeId) { 
      this.typeId = typeId; 
     } 
    } 
    
    기본 대상 이 다 만 들 어 졌 으 니,우 리 는 Mapper 를 만들어 서 사용자 대상 의 첨삭 과 검 사 를 실현 해 야 한다.
    com.ansitech.orm.mapper.UserMapper.java
    
    package com.ansitech.orm.mapper; 
     
    import com.ansitech.orm.base.User; 
    import org.apache.ibatis.annotations.Param; 
     
    /** 
     *        
     * 
     * @author qsyang 
     */ 
    public interface UserMapper { 
     
     void add(User user); 
     
     User get(@Param("id") int id); 
     
     void update(User user); 
     
     int delete(@Param("id") int id); 
     
    } 
    
    ORM 모드 를 사용 하려 면 추가 속성 조회 문 제 를 해결 하기 위해 추상 적 인 사용자 대상 을 만들어 야 합 니 다.
    com.ansitech.orm.AbstractUser.java
    
    package com.ansitech.orm; 
     
    import com.ansitech.orm.base.User; 
     
    /** 
     *        
     * 
     *          
     * 
     * @author qsyang 
     */ 
    public abstract class AbstractUser extends User{ 
     
     //             
     public abstract String findTypeName(); 
    } 
    
    데이터 인터페이스 가 생 겨 서 우 리 는 대외 적 으로 서 비 스 를 제공 해 야 한다.
    com.ansitech.service.IUserService.java
    
    package com.ansitech.service; 
     
    import com.ansitech.orm.AbstractUser; 
    import com.ansitech.orm.base.User; 
     
    /** 
     *        
     * 
     * @author qsyang 
     */ 
    public interface IUserService { 
     
     //        
     void addSystemUser(String loginName, String loginPwd); 
     
     //       
     void addNormalUser(String loginName, String loginPwd); 
      
     //    Id       
     AbstractUser getAbstractUserById(int userId); 
     
     //    Id     
     User getUserById(int userId); 
     
     //       
     void updateUser(int userId, String loginName, String loginPwd); 
     
     //    Id     
     int deleteUser(int userId); 
    } 
    
    서비스 인터페이스 가 있 으 면 실현 인터페이스 가 있어 야 한다.
    com.ansitech.service.impl.UserService.java
    
    package com.ansitech.service.impl; 
     
    import com.ansitech.orm.AbstractUser; 
    import com.ansitech.orm.base.User; 
    import com.ansitech.orm.mapper.UserMapper; 
    import com.ansitech.service.IUserService; 
    import org.springframework.beans.factory.annotation.Autowired; 
    import org.springframework.stereotype.Service; 
     
    /** 
     *         
     * 
     * @author qsyang 
     */ 
    @Service 
    public class UserService implements IUserService { 
     
     @Autowired 
     private UserMapper userMapper; 
     
     @Override 
     public void addSystemUser(String loginName, String loginPwd) { 
      User user = new User(); 
      user.setLoginName(loginName); 
      user.setLoginPwd(loginPwd); 
      //     1     2      
      user.setTypeId(1); 
      userMapper.add(null); 
     } 
     
     @Override 
     public void addNormalUser(String loginName, String loginPwd) { 
      User user = new User(); 
      user.setLoginName(loginName); 
      user.setLoginPwd(loginPwd); 
      //     1     2      
      user.setTypeId(2); 
      userMapper.add(null); 
     } 
     
     @Override 
     public AbstractUser getAbstractUserById(int userId) { 
      throw new UnsupportedOperationException("Not supported yet."); 
     } 
     
     @Override 
     public User getUserById(int userId) { 
      return userMapper.get(userId); 
     } 
     
     @Override 
     public void updateUser(int userId, String loginName, String loginPwd) { 
      //     Id       
      User user = userMapper.get(userId); 
      if (user != null) { 
       user.setLoginName(loginName); 
       user.setLoginPwd(loginPwd); 
       //     
       userMapper.update(user); 
      } 
     } 
     
     @Override 
     public int deleteUser(int userId) { 
      return userMapper.delete(userId); 
     } 
     
    } 
    
    세심 한 저렴 함,이미 보 았 을 수도 있 습 니 다.getAbstract UserById()이 방법 은 아직 실현 되 지 않 았 습 니 다.
    Abstract User 는 구체 적 인 실현 클래스 가 있 기 때문에 실현 클래스 를 새로 만 듭 니 다.
    
    package com.ansitech.service.po; 
     
    import com.ansitech.orm.AbstractUser; 
    import com.ansitech.orm.base.User; 
    import com.ansitech.service.impl.UserService; 
     
    /** 
     *          
     * 
     * @author qsyang 
     */ 
    public class UserPO extends AbstractUser { 
     
     private final UserService userService; 
     
     public UserPO(UserService userService) { 
      this.userService = userService; 
     } 
     
     public UserPO copyFrom(User obj) { 
      this.setId(obj.getId()); 
      this.setLoginName(obj.getLoginName()); 
      this.setLoginPwd(obj.getLoginPwd()); 
      this.setTypeId(obj.getTypeId()); 
      return this; 
     } 
     
     @Override 
     public String findTypeName() { 
      return userService.findTypeName(this.getTypeId()); 
     } 
     
    } 
    
    대상 이 이미 만 들 어 졌 습 니 다.이 럴 때 우 리 는 service 실현 류 의 방법 을 수정 할 수 있 고 방법 을 추가 할 수 있 습 니 다.
    이 방법 을 추가 하 는 것 은 단지 우리 가 다른 Mapper 를 계속 호출 하여 조회 해 야 할 수도 있 기 때문이다.
    수 정 된 실현 방법
    
    @Override 
    public AbstractUser getAbstractUserById(int userId) { 
     User user = userMapper.get(userId); 
     if (user != null) { 
      UserPO po = new UserPO(this); 
      po.copyFrom(user); 
      return po; 
     } 
     return null; 
    } 
    
    새로 추 가 된 방법:
    
    public String findTypeName(int typeId) { 
     if (typeId == 1) { 
      return "     "; 
     } else { 
      return "    "; 
     } 
    } 
    첫째,Service 구조 와 orm 구조 만 완성 되 었 습 니 다.다음은 컨트롤 러 만 구축 하면 됩 니 다.
    
    package com.ansitech.web.controller.user; 
     
    import com.ansitech.orm.base.User; 
    import com.ansitech.service.impl.UserService; 
    import org.springframework.beans.factory.annotation.Autowired; 
    import org.springframework.stereotype.Controller; 
    import org.springframework.web.bind.annotation.RequestMapping; 
     
    /** 
     *       
     * 
     * @author qsyang 
     */ 
    @Controller 
    public class UserController { 
     
     @Autowired 
     private UserService userService; 
     
     @RequestMapping("/user/user-index") 
     public String index() { 
      User user = userService.getUserById(1); 
      if (user != null) { 
       System.out.println("user name = " + user.getLoginName()); 
      } 
      return "jsp/user/index"; 
     } 
    } 
    
    여러분 은 지금까지 이 구 조 를 이해 하 셨 나 요?

    이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

    좋은 웹페이지 즐겨찾기