SSM框架笔记

本文详细介绍Spring整合Spring MVC和MyBatis的过程,包括所需外部jar包、配置文件创建。还阐述了多个注解如@Controller、@RequestMapping等的使用,以及获取前端数据的多种方式。此外,讲解了Spring MVC设置session、拦截器配置和文件上传的相关内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

至少需要的外部jar包

在这里插入图片描述
IDEA中pom.xml的依赖:

   <properties>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
    <spring.version>4.3.9.RELEASE</spring.version>
  </properties>
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>3.4.0</version>
    </dependency>
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis-spring</artifactId>
      <version>1.3.0</version>
    </dependency>
    <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>druid</artifactId>
      <version>1.0.9</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-jdbc</artifactId>
      <version>${spring.version}</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>8.0.13</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-aop</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-beans</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-expression</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-web</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-tx</artifactId>
      <version>${spring.version}</version>
    </dependency>

    <dependency>
      <groupId>commons-logging</groupId>
      <artifactId>commons-logging</artifactId>
      <version>1.1.3</version>
    </dependency>

    <dependency>
        <groupId>org.aspectj</groupId>
        <artifactId>aspectjrt</artifactId>
        <version>1.9.5</version>
    </dependency>

    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>4.0.1</version>
    </dependency>
    <dependency>
      <groupId>jstl</groupId>
      <artifactId>jstl</artifactId>
      <version>1.2</version>
    </dependency>
    <!--jackson-->
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>2.8.7</version>
      <scope>compile</scope>
      <exclusions>
        <exclusion>
          <artifactId>jackson-annotations</artifactId>
          <groupId>com.fasterxml.jackson.core</groupId>
        </exclusion>
      </exclusions>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-core</artifactId>
      <version>2.8.7</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-annotations</artifactId>
      <version>2.8.7</version>
      <scope>compile</scope>
    </dependency>

  </dependencies>

Spring整合Spring MVC:

web.xml:

  <servlet>
    <servlet-name>smart</servlet-name>
<!--    配置Spring MVC前端控制器-->
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
      <init-param>
      <!--指定Spring和Spring MVC共用的配置文件-->
          <param-name>contextConfigLocation</param-name>
          <param-value>classpath:spring-mvc.xml</param-value>
      </init-param>
  <load-on-startup>1</load-on-startup><!--  启动服务器时,创建该servlet-->
  </servlet>
  <servlet-mapping>
    <servlet-name>smart</servlet-name>
     <!--<url-pattern>*.do</url-pattern>-->
    <url-pattern>/</url-pattern>
  </servlet-mapping>

url-pattern为"/“将所有请求拦截到SpringMVC处理,”/"也会拦截静态文件,需要进行配置:
将静态文件放在webapp/static文件夹中

    <!-- 确保静态资源可以被访问 -->
    <servlet-mapping>  
	<servlet-name>default</servlet-name>  
	<url-pattern>static/*</url-pattern>  
	</servlet-mapping>

也可以用Spring自带的<mvc:resources>标签:

<mvc:annotation-driven/>  
<mvc:resources mapping="/static/**/" location="/static/"/> 
<!--或者-->
 <!--
 <mvc:resources location="/img/" mapping="/img/**"/>   
 <mvc:resources location="/js/" mapping="/js/**"/>    
 <mvc:resources location="/css/" mapping="/css/**"/>
 -->

*.do拦截后缀为do的请求,类似/user/login.do的请求也能被拦截

配置错误页面:

    <error-page>
        <error-code>404</error-code>
        <location>/notfound.jsp</location>
    </error-page>

创建Spring和SpringMVC配置文件

在这里插入图片描述
内容为:

<?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: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.xsd
       http://www.springframework.org/schema/aop
	   http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
	   http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context-4.3.xsd
       http://www.springframework.org/schema/mvc
       http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd ">
    <!-- 开启控制类注解扫描 -->
    <context:component-scan base-package="com.test.controller">
    </context:component-scan>
    <!-- 开启代理模式,打开Spring对AOP的扫描 -->
    <aop:aspectj-autoproxy proxy-target-class="true"/>
      <!-- 启动SpringMVC的注解功能,完成请求和注解POJO的映射
    -->
    <mvc:annotation-driven/>
    <!--    配置视图解析器对象-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <!--    /page/意为页面的路径,.jsp为页面格式-->
        <property name="prefix" value="/page/"/>
        <property name="suffix" value=".jsp"/>
    </bean>
</beans>

prefix和suffix分别为控制类返回自动加上的前缀和后缀

整合mybatis

Spring整合mybatis需要mybatis-pring,所以需要加入以下依赖:

    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis-spring</artifactId>
      <version>1.3.0</version>
    </dependency>

经过实测Spring4.3.9用1.3.0的版本不会有冲突
整合后在Spring中配置mybatis,mybatis不单独建配置文件
web.xml指定配置文件:

  <!-- 加载spring,mybatis配置 -->
  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:spring-mybatis.xml</param-value>
  </context-param>
  <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>

创建spring-mybatis.xml配置文件:
在这里插入图片描述
spring-mybatis.xml内容:

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc-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">

    <!--扫描dao里面的注解-->
    <context:component-scan base-package="com.test.dao"/>

    <!-- 数据库连接池配置文件Dao层 -->
    <!-- 加载配置文件 -->
    <context:property-placeholder location="classpath:db.properties"/>
    <!-- 数据库连接池,使用dbcp -->
    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
        <property name="driverClassName" value="${jdbc.driverClass}"/>
        <property name="url" value="${jdbc.url}"/>
        <property name="username" value="${jdbc.username}"/>
        <property name="password" value="${jdbc.password}"/>
        <property name="maxActive" value="10"/>
        <property name="maxIdle" value="5"/>
    </bean>
    <!-- SqlSessionFactory配置 -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <!-- 加载mybatis的映射文件 -->
        <property name="mapperLocations" value="classpath:Mappers/*.xml" />
    </bean>
    <!-- mapper扫描器 -->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <!-- 扫描dao层包路径,如果需要扫描多个包,中间使用半角逗号隔开  -->
        <property name="basePackage" value="com.test.dao"/>
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
    </bean>
    <!-- 事务管理器-->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"/>
    </bean>
</beans>

这里DataSource用了com.alibaba.druid.pool.DruidDataSource,连接数据库,druid依赖Spring-jdbc,所以需要加上依赖:

    <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>druid</artifactId>
      <version>1.0.9</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-jdbc</artifactId>
      <version>4.3.9.RELEASE</version>
      <scope>compile</scope>
    </dependency>

上面加载了db.properties文件,所以要创建db.properties:
在这里插入图片描述
内容:

jdbc.driverClass=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/travel?characterEncoding=UTF-8
jdbc.username=root
jdbc.password=188278

@Controller

使用这些注解之前记得开启注解扫描
标识一个类为SpringMVC的控制层对象.使用后框架将检测该方法是否使用了@RequestMapping注解。
Spring将生成对象,默认对象名为类名首字母小写
在这里插入图片描述

@RequestMapping

可以用在类定义处和方法定义处。 类定义处:规定初步的请求映射,相对于web应用的根目录; 方法定义处:进一步细分请求映射,相对于类定义处的URL。
@PostMapping,DeleteMapping,PutMapping用法和@RequestMapping用法差不多.

import com.test.bo.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

@Controller
@RequestMapping("/user")
public class LoginController {
    public UserService getUserService() {
        return userService;
    }

    @Autowired
    private UserService userService;
    @RequestMapping("/loginRequest")
    public String login(@RequestParam(value = "name")String name,@RequestParam("pwd")String pwd ){
       if(userService.checkPwd(name,pwd)) {
           return "index";
       }
       else
           return "login";
    }
}

@PathVariable

可以接受请求路径中占位符中的值

@RequestMapping("get/{userId}")
public User getById(@PathVariable("userId") long userId){
	//...
}

获取前端数据

获取参数

控制类方法的参数名和input标签的name属性值相同则可以直接获取.
也可以用@RequestParam
将请求参数绑定到你控制器的方法参数上(是springmvc中接收普通参数的注解)
用于获取前端页面的参数,值设置成页面中input标签的name属性值

<input type="text" name="name"/>
<input type="password" name="pwd"/>

@RequestParam

@RequestParam int page
//或
@RequestParam("page")
//defaultValue设置默认值
@RequestParam(value = "page", defaultValue = "1")

获取前端数据封装对象

input的name属性值与对象的属性值相同.

    <form action="${pageContext.request.contextPath}/getData.do">
        <input type="text" name="userName"/><br/>
        <input type="text" name="userPassword"/><br/>
        <input type="text" name="phone"/><br/>
        <input type="submit"/>
    </form>

控制层获取对象,以对象为参数:

	@RequestMapping("/getData")
    public void test2(User user){
        System.out.println(user.getUserName());
        System.out.println(user.getUserPassword());
        System.out.println(user.getPhone());
    }

@RequestBody

@RequestBody主要用来接收前端传递给后端的json字符串中的数据的(请求体中的数据的);GET方式无请求体,所以使用@RequestBody接收数据时,前端不能使用GET方式提交数据,而是用POST方式进行提交。

@Service

@Service(“serviceName”)注解相当于applicationContext.xml配置文件中配置的<bean id=“serviceName”>,表示给当前类命名一个别名,方便注入到其他需要用到的类中。@Service注解也可以不指定serviceName,默认别名就是当前类名,但是首字母小写。

@Service
public class UserServiceImpl implements UserService {
    @Autowired
    private UserDao userDao;
    @Override
    public boolean checkPwd(String uname,String upwd){
        System.out.println(userDao.findById(1).getName());
        System.out.println(userDao.findByName("aa"));
        User user=userDao.findById(1);
        if (uname.equals(user.getName())&&upwd.equals(user.getPassword())){
            return true;
        } else {
            return false;
        }
    }
}
 @Autowired
 private UserService userService;

@Repository

标识为dao层,Spring将生成对象,默认对象名为类名首字母小写

@Repository
public interface UserDao {
    public User findById(int id);
    @Select("select * from tab_user where name=#{name}")
    public List<User> findByName(String name);
}

@Mapper

作用和@Repository类似
区别在于:

1、使用@mapper后,不需要在spring配置中设置扫描地址,通过mapper.xml里面的namespace属性对应相关的mapper类,spring将动态的生成Bean后注入到ServiceImpl中。

2、@repository则需要在Spring中配置扫描包地址,然后生成dao层的bean,之后被注入到ServiceImpl中

@ResponseBody

将controller的方法返回的对象通过适当的转换器转换为指定的格式之后,写入到response对象的body区,通常用来返回JSON数据或者是XML数据。

@RestController

控制类中的方法无法返回jsp页面,配置的视图解析器InternalResourceViewResolver不起作用
@RestController注解相当于@ResponseBody + @Controller合在一起的作用

Spring MVC设置session

引入依赖:

    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>4.0.1</version>
    </dependency>

加上HttpSession session参数
在这里插入图片描述

Spring MVC拦截器

类似servlet的过滤器,用于拦截一些请求
实现HandlerInterceptor接口:

public class CustomInterceptor implements HandlerInterceptor{
        public boolean preHandle(HttpServletRequest request, 
                                 HttpServletResponse response, Object handler)throws Exception {
            return false;
        }
        public void postHandle(HttpServletRequest request, 
                               HttpServletResponse response, Object handler,
                               ModelAndView modelAndView) throws Exception {
            
        }
        public void afterCompletion(HttpServletRequest request,
                                    HttpServletResponse response, Object handler,
                                    Exception ex) throws Exception {
        }
    }
  • preHandle() 方法:该方法会在控制器方法前执行,其返回值表示是否中断后续操作。当其返回值为true时,表示继续向下执行;
    当其返回值为false时,会中断后续的所有操作(包括调用下一个拦截器和控制器类中的方法执行等)。

  • postHandle()方法:该方法会在控制器方法调用之后,且解析视图之前执行。可以通过此方法对请求域中的模型和视图做出进一步的修改。

  • afterCompletion()方法:该方法会在整个请求完成,即视图渲染结束之后执行。可以通过此方法实现一些资源清理、记录日志信息等工作。

拦截器配置:

<!--配置拦截器-->
    <mvc:interceptors>
        <!--<bean class="com.ma.interceptor.CustomeInterceptor" />-->
        <!--拦截器1-->
        <mvc:interceptor>
            <!--配置拦截器的作用路径-->
            <mvc:mapping path="/**"/>
            <mvc:exclude-mapping path=""/>
            <!--定义在<mvc:interceptor>下面的表示匹配指定路径的请求才进行拦截-->
            <bean class="com.ma.interceptor.Intercptor1"/>
        </mvc:interceptor>
        <!--拦截器2-->
        <mvc:interceptor>
            <mvc:mapping path="/hello"/>
            <bean class="com.ma.interceptor.Interceptor2"/>
        </mvc:interceptor>
    </mvc:interceptors>

上面的代码中,<mvc:interceptors>元素用于配置一组拦截器,基子元素<bean>中定义的是全局拦截器,它会拦截所有的请求;而<mvc:interceptor>元素中定义的是指定路径的拦截器,它会对指定路径下的请求生效。<mvc:interceptor>元素的子元素<mvc:mapping>用于配置拦截器作用的路径,该路径在其属性path 中定义。如上述代码中 path 的属性值“/**” 表示拦截所有路径,“/hello” 表示拦截所有以 “/hello” 结尾的路径。如果在请求路径中包含不需要拦截的内容,还可以通过<mvc:exclude-mapping>元素进行配置。
注意:<mvc:interceptor>中的子元素必须按照上述代码中的配置顺序进行编写,即<mvc:mapping> <mvc:exclude-mapping> <bean>,否则文件会报错。

Spring MVC文件上传

pom.xml引入依赖:

   <dependency>
      <groupId>commons-io</groupId>
      <artifactId>commons-io</artifactId>
      <version>2.1</version>
    </dependency>
    <dependency>
      <groupId>commons-fileupload</groupId>
      <artifactId>commons-fileupload</artifactId>
      <version>1.2.2</version>
    </dependency>

sping-mvc.xml配置bean:

    <!--文件上传-->
    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <property name="maxUploadSize" value="20971520"></property>
        <property name="defaultEncoding" value="UTF-8"></property>
    </bean>

前端页面设置form的enctype属性:

<form action="uploadtest" enctype="multipart/form-data">
	<input type="file" name="file"/>
</form>

控制层参数加MultipartFile参数:

@RequestMapping("/uploadtest")
public String upload(@RequestParam("file") MultipartFile file){
	file.transferTo(File file);//保存到指定目录
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值