spring+mybatis+springMVC 整合配置

首先,我们需要配置在resourse文件下编写applicationContext.xml文件和mysql.properties,与spring+myBatista类似

<?xml version="1.0" encoding="UTF-8"?>
<!--spring bean容器的主配置文件-->
<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:aop="http://www.springframework.org/schema/aop"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:tx="http://www.springframework.org/schema/tx"
	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/aop
	http://www.springframework.org/schema/aop/spring-aop-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/util
	http://www.springframework.org/schema/util/spring-util-4.1.xsd
	http://www.springframework.org/schema/tx
	http://www.springframework.org/schema/tx/spring-tx-4.1.xsd">

	<!--定义组件扫描的基础包名
	用于扫描指定基础包下的所有类里面包含的组件注解-->  <!--ssm主要的组件有三大类:1.dao下数据库访问的映射接口 2:service下的业务类 3:控制器组件-->
	<context:component-scan base-package="com.**.dao,com.**.service,com.**.aop"/><!--项目一加载时,包下的所有注解都会加载进来:带了组件的注解,就会把它实例化成bean容器里面的bean-->
	<!--指定注解方式加载配置-->
	<context:annotation-config/>

	<!--定义属性文件的读取-->
	<util:properties id="reader" location="classpath:mysql.properties"/>

	<!--定义C3P0	连接池数据源-->
	<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
		<property name="driverClass" value="#{reader[driver]}"/>
		<property name="jdbcUrl" value="#{reader[url]}"/>
		<property name="user" value="#{reader[username]}"/>
		<property name="password" value="#{reader[password]}"/>
		<property name="initialPoolSize" value="5"/>
		<property name="maxPoolSize" value="10"/>
	</bean>

	<!--指定mybatis映射接口包名-->
	<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
		<property name="basePackage" value="com.**.dao"/><!--去扫描(映射)mapper接口的时候,让它直接去扫dao包找映射器的接口-->
	</bean>

	<!--定义SqlSessionFactory   bean-->
	<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
		<property name="dataSource" ref="dataSource"/>
	</bean>

	<!--定义事务管理器-->
	<bean class="org.springframework.jdbc.datasource.DataSourceTransactionManager" id="transactionManager">
		<property name="dataSource" ref="dataSource"/>
	</bean>

	<!--配置事务注解驱动-->
	<tx:annotation-driven/>


	<!--aop注解驱动-->
	<aop:aspectj-autoproxy/>


</beans>

#mysql
driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/test0312?serverTimezone=UTC&useSSL=true
username=root
password=root

接着,再在resourse文件下配置springMVC.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<!--springmvc的主配置文件-->
<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: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.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
	">

	<!--扫描加载控制器组件-->     //前端控制器被扫描的时候才会被加载,即发送第一次请求时。所以一般不要写在applicationContext.xml中,因为两者的加载时期不同
	<context:component-scan base-package="com.**.controller"/>
	<!--配置注解驱动方式-->
	<mvc:annotation-driven/>

	<!--静态资源访问的处理方式-->     <!--静态资源(图片,html)也会经过前端控制器,可是它找不到对应的映射,因为控制器里面有没有静态资源相应的映射,所以就陪配置静态资源的访问方式,一共有两种方式-->
	<!--配置使用web容器默认的servlet处理静态资源访问-->
	<mvc:default-servlet-handler/>
	<!--配置静态资源映射路径-->
	<!--<mvc:resources mapping="/resources/*" location="/,/WEB-INF"/>-->
	<!--src="js/test.js"实际路径-->
	<!--src="/resources/js/test.js"映射路径-->

	<!--配置视图解析器-->   // 控制器只需要返回视图的名字,视图的名字交还给前端控制器,前端控制器按照你配置的前缀和后缀就把,视图名(xx),放在前缀(/)和后缀(.jsp)的中间
	<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="viewResolver">
		<property name="prefix" value="/"/>                    //前缀
		<property name="suffix" value=".jsp"/>                 //后缀
	</bean>



</beans>

然后再在webapp/WEB-INF/web.xml中添加如下信息(当然,这要根据实际情况而定)

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
         http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         id="WebApp_ID" version="3.1">

  <!-- 重新部署工程时 Tomcat 内存溢出 -->
  <listener>
    <listener-class>se.jiderhamn.classloader.leak.prevention.ClassLoaderLeakPreventorListener</listener-class>
  </listener>

  <!-- 防止内存泄露 -->
  <listener>
    <listener-class>
      org.springframework.web.util.IntrospectorCleanupListener
    </listener-class>
  </listener>

  <!--spring应用上下文加载监听器-->
  <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>

  <!--指定主配置文件路径-->
  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:applicationContext.xml</param-value>
  </context-param>

  <!-- 配置字符集编码转换的过滤器 -->
  <filter>
    <filter-name>encodingFilter</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>encodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

  <!--springmvc前端控制器,核心控制器-->
  <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:springmvc.xml</param-value>
    </init-param>
  </servlet>

  <servlet-mapping>
    <servlet-name>springmvc</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>

  <display-name>Archetype Created Web Application</display-name>

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


这样,一个ssm的框架就搭建完成 :)

关于spring 和 mybatis 框架所对应的 dao层和service层中的程序例子在文章《spring+mybatis 配置整合》已经提到,所以文本只提供了springMVC框架所对应的controller层例子:

package com.yy.controller;

//导入包省略

@Controller
public class HelloController {


    //springmvc控制器被称为完全基于方法的控制器,他可以在类里面直接写一个方法,来映射控制器的请求
    //相当于定义servlet的url(请求映射的url)。当你请求根目录下的/hello,就会自动执行hello方法
    @RequestMapping("/hello")                                         //hello方法本身就可以当做一个控制器                                    
    public String hello(){                                                         
        System.out.println("hello方法被执行");
    //返回的是视图名,把视图名配置到springmvc.xml的视图解析器中去----所以直白讲,当请求访问/hello时,将执行hello方法,hello方法将返归一个”hello“(视图名)给视图解析器,然后调转到/hello.jsp(默认跳转方式内部转发)此方法没有带任何请求参数,返回也没有模型数据
        return "hello";                                                     
    }                                                                          

    //自动按方法参数名字和请求参数名自动映射,但这个方法参数,没有给我们当做一个模型数据被封装到作用域对象中去,因为是基本类型参数
    @RequestMapping("/login")                                  
    public String login(String username,String pwd){      //基本类型数据和模型数据是有区别的
        //请求参数按名称自动注入到方法参数
        System.out.println(username+":"+pwd);
        return "index";
    }



    @RequestMapping("/login1")
    //将参数直接封装成一个pojo对象(一旦方法参数给的是模型数据,这个方法参数就会被放到ModelAndView中去,并放到请求作用域中去),把pojo封装成ModelAndVIew
    public String login1(User user){                             
         //请求参数按名称自动注入到方法参数         //表单的name属性一定要跟pojo的属性名相同(其实就是在反射getter,setter)
        System.out.println(user.getUsername()+":"+user.getPwd());
        //重定向到index.jsp
        return "redirect:/index.jsp";                           //你如果想绕过视图解析器(默认内部转发),则
    }                                                                  //设置成重定向redirect,前面配置的前缀和后缀就没用了
}


下面是前端页面代码login.jsp和index.jsp

//login.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>登录</title>
</head>
<body>
    <form method="post" action="login">
        <p>用户名:<input name="username"></p>
        <p>密码:<input type="password" name="pwd"></p>
        <p><input type="submit" value="登录"></p>
    </form>
</body>
</html>
//index.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<body>
<h2>Hello World!</h2>
<h2>用户名${param.username}</h2>    //username没有放在作用域里面。因为是内部转发,所以可以根据请求参数的隐式对象来获取
<h2>用户名${user.username}</h2>     //取模型数据user的用户名
</body> 
</html>



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值