SpringMVC的配置及理解

Springmvc的工作原理:

 

组件:

1.前端控制器DispatcherServlet

      作用:接收请求响应结果,相当于转发器

2、处理器映射器,HandlerMapping

根据请求找到Handler

3、处理器适配器HandlerAdaptor

按照特定的规则去执行Handler

4、视图解析器View resolver

进行视图解析根据逻辑视图名解析成真正的试图(View

5、视图 view

SpringMVC 的配置文件

 

web.xml中配置前段控制器是一个sevelt

<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <!----contextConfigLocation配置springmvc的配置文件在配置文件中配置处理器映射器,
    处理器适配器,视图解释器
    默认是找web-inf下的spring-sevelt.xml
    -->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:config/springmvc.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>*.action</url-pattern>
</servlet-mapping>

 

 

springmvc.xml里面配置各种器

配置处理器映射器(多个映射器可以并存)新建一个

 

 

 

<!-- 处理器映射器 -->
   <!--
   非注解的要求bean nameurl的形式
   <bean name="/queryItemsqw.action"
    class="AdesKing.ssm.contorller.itemsContorller"/>
    <bean
   class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>

    -->

   <!--
   另一种非注解的配置方式
   <bean name="contorller"
        class="AdesKing.ssm.contorller.ItemsContorller1"/> –>
   <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping
">
      <property name="mappings">
         <props>
            <prop key="/queryItemsqw.action"> contorller</prop>
         </props>
      </property>

配置处理器适配器处理handlercontorller

 

 

 


<!--处理器适配器  要求handel实现contorller接口-->

<bean
      class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>

源码跟踪

源码入口

protected void doDispatch(HttpServletRequest request, HttpServletResponse response) throws Exception {

 

找到handler

protected HandlerExecutionChain getHandler(HttpServletRequest request) throws Exception {
    Iterator var2 = this.handlerMappings.iterator();

    
HandlerExecutionChain handler;
    do
{
        if(!var2.hasNext()) {
            return null;
        
}

        HandlerMapping hm = (HandlerMapping)var2.next();
        if
(this.logger.isTraceEnabled()) {
            this.logger.trace("Testing handler map [" + hm + "] in DispatcherServlet with name \'" + this.getServletName() + "\'");
        
}

        handler = hm.getHandler(request);
    
} while(handler == null);

    return
handler;
}

Springmvcmybatis的整合

第一步:

需要配置mybatis的配置文件新建一个SqlMapConfig.Xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<!-- 配置是有顺序的、propertiessetting \typeAliases.... -->
<configuration>
    <typeAliases>
<package name="AdesKing.ssm.pojo"></package>
    </typeAliases>
   <!--
   可以用springmybatis的整合包的扫描器来扫描mapper
   <mappers>
        <mapper></mapper>
    </mappers>-->
   </configuration>

第二步:

配置spring的配置文件

a. 包括SqlSessionFactory

b. 数据源

c. 扫描mapper

Spring的作用

spring管理表现层的handler,使handler能够调用service接口

管理持久层的mapping

管理业务层的service,使service能够调用mapping接口,

Handlermappingservice都是javabean,能够在spring容器中注册

有关Mybatis的一些学习

typeAliases标签的作用

例如: 我们在使用 com.demo.entity. UserEntity 的时候,我们可以直接配置一个别名user, 这样以后在配置文件中要使用到com.demo.entity. UserEntity的时候,直接使用User即可。

配置数据源

<!--数据源的配置-->
   <!--读取文件-->
   <context:property-placeholder location="classpath:db.properties"></context:property-placeholder>
   <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
        destroy-method="close">
      <property name="driverClassName" value="${jdbc.driver}" />
      <property name="url" value="${jdbc.url}" />
      <property name="username" value="${jdbc.username}" />
      <property name="password" value="${jdbc.password}" />
   </bean>

Mapper器的配置

<!--    mapper的扫描器的配置-->
   <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
      <property name="basePackage" value="AdesKing.ssm.mapper,AdesKing.ssm.contorller"/>
      <property name="sqlSessionFactoryBeanName" value="sqlSessiomFactory"/>

   </bean>

(二)整合成品mvc-mybatis

需求:通过查询数据库的mybatis数据表在后台输出数据表的user的一些相关属性内容

数据库的设计:

目录结构:

 

环境的准备和各种jar

maven导包

Pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.AdesKing.spring_mvc_mybatis</groupId>
  <artifactId>mvc_mybatis</artifactId>
  <packaging>war</packaging>
  <version>0.0.1-SNAPSHOT</version>
  <name>mvc_mybatis Maven Webapp</name>
  <url>http://maven.apache.org</url>
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.9</version>
      <scope>test</scope>
    </dependency>
    
    <!-- https://mvnrepository.com/artifact/org.aspectj/aspectjrt -->
<dependency>
    <groupId>org.aspectj</groupId>
    <artifactId>aspectjrt</artifactId>
    <version>1.8.9</version>
</dependency>
    
    <!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.1.0</version>
</dependency>
    
    
    <!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>4.3.2.RELEASE</version>
</dependency>

<!-- https://mvnrepository.com/artifact/org.springframework/spring-orm -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-orm</artifactId>
    <version>4.3.2.RELEASE</version>
</dependency>
<!-- https://mvnrepository.com/artifact/javax.servlet/jstl -->
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>jstl</artifactId>
    <version>1.2</version>
</dependency>

    <!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>4.3.2.RELEASE</version>
</dependency>
      <dependency>
          <groupId>org.mybatis</groupId>
          <artifactId>mybatis</artifactId>
          <version>3.4.1</version>
      </dependency>
      <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
      <dependency>
          <groupId>org.mybatis</groupId>
          <artifactId>mybatis-spring</artifactId>
          <version>1.3.0</version>
      </dependency>
      <dependency>
          <groupId>mysql</groupId>
          <artifactId>mysql-connector-java</artifactId>
          <version>5.1.38</version>
      </dependency>
      <dependency>
          <groupId>commons-dbcp</groupId>
          <artifactId>commons-dbcp</artifactId>
          <version>1.4</version>
      </dependency>
      <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-core</artifactId>
          <version>4.3.2.RELEASE</version>
      </dependency>

      <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-web</artifactId>
          <version>4.3.2.RELEASE</version>
      </dependency>
  </dependencies>



  <build>
    <finalName>mvc_mybatis</finalName>
  </build>
</project>

 

Web.xml

<?xml version="1.0" encoding="utf-8"?>

<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
                      http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
  version="3.1"
  metadata-complete="true">


    <welcome-file-list>
<welcome-file> index.jsp</welcome-file>
</welcome-file-list>

<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <!--contextConfigLocation配置springmvc的配置文件在配置文件中配置处理器映射器,
    处理器适配器,视图解释器
    默认是找web-inf下的spring-sevelt.xml
    -->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:config/springmvc.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>*.action</url-pattern>
</servlet-mapping>
</web-app>

SqlMapConfig.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<!-- 配置是有顺序的、propertiessetting \typeAliases.... -->
<configuration>
    <typeAliases>
        <package name="AdesKing.ssm.pojo"></package>
    </typeAliases>
    <!--
    可以用springmybatis的整合包的扫描器来扫描mapper
    <mappers>
         <mapper></mapper>
     </mappers>-->
</configuration>

Springmvc.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:aop="http://www.springframework.org/schema/aop"
   xmlns:tx="http://www.springframework.org/schema/tx"
   xmlns:context="http://www.springframework.org/schema/context"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
   xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context-4.3.xsd
        http://www.springframework.org/schema/aop
        http://www.springframework.org/schema/aop/spring-aop-4.3.xsd
        http://www.springframework.org/schema/tx
        http://www.springframework.org/schema/tx/spring-tx-4.3.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc.xsd
       ">
       
       <!-- 各种声明 -->
<!--   <context:annotation-config />

   <aop:aspectj-autoproxy /> -->
   <!--读取文件-->
<!--   <context:property-placeholder location="classpath:db.properties"></context:property-placeholder>-->
   <context:component-scan base-package="com.AdesKing.ssm.*" />

   <!-- 注解处理器映射器 -->
   <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"></bean>
   <!--注解处理器适配器  -->

   <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"></bean>
   <mvc:annotation-driven/>
<!--数据源的配置-->

   <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
        destroy-method="close">
      <property name="driverClassName" value="com.mysql.jdbc.Driver" />
      <property name="url" value="jdbc:mysql://localhost/mybatis" />
      <property name="username" value="root" />
      <property name="password" value="109126" />
   </bean>

   <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
   <property name="configLocation" value="classpath:sqlMapconfig.xml"></property>
   <property name="dataSource" ref="dataSource"></property>
</bean>
<!--   mapper的扫描器的配置-->
   <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
      <property name="basePackage" value="com.AdesKing.ssm.mapper"/>
      <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>

   </bean>

      <!--
        非注解的要求bean nameurl的形式
        <bean name="/queryItemsqw.action"
         class="AdesKing.ssm.contorller.itemsContorller"/>
         <bean
        class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
         -->
   <!--
   另一种非注解的配置方式
   <bean name="contorller"
        class="ItemsContorller1"/> –>
   <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping
">
      <property name="mappings">
         <props>
            <prop key="/queryItemsqw.action"> contorller</prop>
         </props>
      </property>
   </bean>-->
    <!--<bean
    class="ItemsContorller1"/> -->
    
   <!--  <context:component-scan base-package="AdesKing.ssm.contorller" /> -->




   <!--处理器适配器  -->
   <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>
   <!--  视图解释器-->
   <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
   <property name="prefix" value="/WEB-INF/jsp"/>
   <property name="suffix" value=".jsp"/>
     
   </bean>
   </beans>

 

UserCustom.java

package com.AdesKing.ssm.mapper;

import
com.AdesKing.ssm.pojo.User;

import
org.springframework.stereotype.Repository;


/**
 * Created by adeaking on 2017/3/3.
 */
@Repository
public interface UserCustom {
    public User findUserById(int userId);

}

UserCustomImpl.java

import com.AdesKing.ssm.pojo.User;
import
org.springframework.stereotype.Component;

import
javax.annotation.Resource;


/**
 * Created by adeaking on 2017/3/3.
 */

@Component
public class UserCustomImpl   {
    @Resource
private UserCustom userCustom;

    public
User findUserById(int userId) {
        User user=userCustom.findUserById(userId);
        return
user;

    
}
}

UserCustom.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--namespace要为mapper接口的路径  -->
<mapper namespace="com.AdesKing.ssm.mapper.UserCustom">
    <select id="findUserById" parameterType="java.lang.Integer" resultType="com.AdesKing.ssm.pojo.User">
        SELECT * FROM USER WHERE id=#{userid,jdbcType=INTEGER}
    </select>
    </mapper>

UserService.java

package com.AdesKing.ssm.service;

import
com.AdesKing.ssm.mapper.UserCustomImpl;
import
com.AdesKing.ssm.pojo.User;
import
org.springframework.stereotype.Service;

import
javax.annotation.Resource;

/**
 * Created by adeaking on 2017/3/3.
 */

@Service
public class UserService {
   @Resource
    private UserCustomImpl userCustomImpl;
    public
User fingUser(int userId){
        User user= userCustomImpl.findUserById(4);
        
System.out.println(user.getUsername());
      return
user;
    
}
}

ItemsContorller1.java

package com.AdesKing.ssm.contorller;

import
java.util.ArrayList;
import
java.util.Date;
import
java.util.List;

import
javax.annotation.Resource;

import
com.AdesKing.ssm.pojo.User;
import
com.AdesKing.ssm.service.UserService;
import
org.springframework.stereotype.Controller;
import
org.springframework.web.bind.annotation.RequestMapping;
import
org.springframework.web.servlet.ModelAndView;




import
com.AdesKing.ssm.pojo.Items;
@Controller
public class ItemsContorller1   {
    @Resource
    private UserService userService;
    
@RequestMapping("/queryItems")
    public ModelAndView queryItems()throws Exception{
        User user=userService.fingUser(1);
        
//System.out.println(userService.fingUser(1).getId());
        List<Items> itemsList=new ArrayList<Items>();
        
Items items1=new Items();
        
items1.setComment("很好1");
        
items1.setDate(new Date());
        
items1.setNumber(3);
        
System.out.println(userService.fingUser(4).getId());

        
Items items2=new Items();
        
items2.setComment("很好+1");
        
items2.setDate(new Date());
        
items2.setNumber(8);

        
itemsList.add(items1);
        
itemsList.add(items2);
        
ModelAndView modelAndView=new ModelAndView();
        
modelAndView.addObject("itemsList", itemsList);
        
modelAndView.setViewName("/items/index");
        return
modelAndView;
    
}

 

 

写在后面的话
整啊整啊整,整了好几天了,毕竟不会啊,整累了或者不会整了,就干干别的事情,就好像看下鲁滨逊漂流记,打下乒乓球,听下黎明和张学友的歌,看下公众号的文章,或者有学习下智能算法等等,日子过得充实又舒适,日子就是这样过的吧。但是在这过程中也是有痛苦的因为程序会报错啊,问题总是要解决的,在你看不懂英文的时候,当你无从下手的时候你就痛苦了。有时真的感觉整个人都要崩溃了人的一切痛苦本质上都是对自己无能为力的愤怒,毕竟都是这这种情况下才会痛苦吧。好了我们不要痛苦了。有些东西急不得,必须要有耐心,烦躁只会把问题弄得越来越遭。好久没写过文字的感觉都找不到感觉了。就这样吧。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值