Spring MVC 4.1.3+MyBatis 제로 기초 구축 웹 개발 프레임 워 크(주해 모델)
본론 으로 들 어가 도록 하 겠 습 니 다.
개발 환경 구축:
Netbeans8.0.2 + MySql5.6 + JDK1.7 + tomcat8.0.15
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";
}
}
여러분 은 지금까지 이 구 조 를 이해 하 셨 나 요?이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
thymeleaf로 HTML 페이지를 동적으로 만듭니다 (spring + gradle)지난번에는 에서 화면에 HTML을 표시했습니다. 이번에는 화면을 동적으로 움직여보고 싶기 때문에 입력한 문자를 화면에 표시시키고 싶습니다. 초보자의 비망록이므로 이상한 점 등 있으면 지적 받을 수 있으면 기쁩니다! ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.