S S M


SSM框架

组成:
Spring
Mabatis
Spring-MVC

Spring-MVC

1.轻量级Web框架
2.Spring MVC提供了一种绑定机制,通过该机制可以从用户请求中提取数据,然后将数据转换为预定义的数据格式,最后映射到一个模型类,从而创建一个对象。该实现机制只需请求参数名称与Java类的属性相匹配即可。
3.Spring MVC是视图不可知的,他并没有规定你的视图必须使用哪种视图技术,可以是JSP,也可以是Velocity模板、Tiles、Freemarker以及XSLT等。
4.Spring MVC是非侵入性的,因为业务逻辑代码与框架本身是相分离的。

Springmvc 执行流程是什么?
用户发送请求至前端控制器DispatcherServlet;
DispatcherServlet收到请求后,调用HandlerMapping处理器映射器,请求获取Handle;
处理器映射器根据请求url找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet;
DispatcherServlet 调用 HandlerAdapter处理器适配器;
HandlerAdapter 经过适配调用 具体处理器(Handler,也叫后端控制器);
Handler执行完成返回ModelAndView;
HandlerAdapter将Handler执行结果ModelAndView返回给DispatcherServlet;
DispatcherServlet将ModelAndView传给ViewResolver视图解析器进行解析;
ViewResolver解析后返回具体View;
DispatcherServlet对View进行渲染视图(即将模型数据填充至视图中)
DispatcherServlet响应用户。
————————————————
版权声明:本文为CSDN博主「百知小陈之JAVAEE」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/cx521600/article/details/90241944

在这里插入图片描述

使用

1.导jar包
2.配置前端控制器
classpath:springmvc.xml

<!-- 前端控制器 -->
<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>
  	<load-on-stratup>1</>
</servlet>
<servlet-mapping>
    <servlet-name>springmvc</servlet-name>
    <url-pattern>*.action</url-pattern>
</servlet-mapping>

3.创建Controller类(配置注解)

@Controller
public class BooksController {
 @Autowired(required = false)
    Bookservice bookservice;
    @RequestMapping("/book")
    public String  listCategories(@RequestParam(value ="id")int id, HttpServletRequest httpServletRequest){
        List<Books> books = bookservice.listBooks(id);
        System.out.println(id);
        httpServletRequest.setAttribute("bookslist",books);
        return "books";
    }

4.创建SpringMVC配置文件
classpath:springmvc.xml

<?xml version="1.0" encoding="UTF-8" ?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       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">
<!--    配置用户定义的Controller的实例-->
<!--    配置处理器Handle>
    <context:component-scan base-package="svtcc.controller"/>
    ————————————————
<!--注解映射器 -->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/>
<!--注解适配器 -->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/>
    ————————————————
<!--    配置视图解析器-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!--        指定前缀-->
        <property name="prefix" value="/"/>
<!--        指定后缀-->
        <property name="suffix" value=".jsp"/>
    </bean>
</beans>

spring4.0后可以不用配置处理器映射器,处理器适配器,视图解析器

出现404

两种方法:
1.idea右上角那个文件夹图标(有蓝色图标)
在这里插入图片描述

检查artfical中的项目是否有lib
2.
在这里插入图片描述

如果仅仅在类上映射url不够,要在具体的方法上也要映射,不然就是404

参数绑定规则

基本类型

public String listCategories(@RequestParam(value =“userid”)int id)
ps:请求头:https://editor.csdn.net/md?userid=1

@PathVariable:请求头的参数
@RequestParam:请求体的参数

pojo类

public String listCategories(User user)
需编写pojo类,类名一样,属性与表单name值相同

包装类pojo

在这里插入图片描述
如果查询条件参数是包装类中POJO的子属性,则参数名必须为[对象.属性]

自定义数据绑定

用于将一种类型转化为另一种类型(估计可以作用于数据库时间的转化)

Converter
绑定数组

用于表单中的复选框
用 Integer[] ids 接收

绑定集合

不允许直接使用集合形参进行数据绑定,所以需要使用包装类。

<form id="form" action="test/test.do" method="post">
<input type="text" name="person[0].username" value="jobs"/>
<input type="text" name="person[0].age" value="55"/><br/>
<input type="text" name="person[1].username]" value="jim"/>
<input type="text" name="person[1].age" value="21"/><br/>
<input type="submit">
<form>
public class PersonList { 
     
  private List<Person> person; 
   
  public List<Person> getPerson() { 
    return person; 
  } 
   
  public void setPerson(List<Person> person) { 
    this.Person= person; 
  } 
   
}


@RequestMapping(value = "xxx", method = RequestMethod.POST)
  public void test(PersonList person) {
    //遍历person 
    }
}    

乱码问题

<!-- 编码问题之配置过滤器 -->
  <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>
  </filter>
  <filter-mapping>
      <filter-name>encodingFilter</filter-name>
      <url-pattern>/*</url-pattern>
  </filter-mapping>
配置文件
applicationContext.xml配置文件:

配置事务
配置注解
配置数据库
配置通知
配置sqlsession管理

<?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:aop="http://www.springframework.org/schema/aop"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans-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/context
       https://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
       http://www.springframework.org/schema/tx
       http://www.springframework.org/schema/tx/spring-tx.xsd">
    <context:component-scan base-package="svtcc.ServiceImp"/>
<!--    导入一个配置文件-->
    <import resource="classpath*:/database.xml"/>

    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost:3306/bianxinji"/>
        <property name="username" value="admin"/>
        <property name="password" value="123456"/>
    </bean>
    <!--事务管理-->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"/>
    </bean>
    <tx:annotation-driven transaction-manager="transactionManager"/>
<!--    <tx:advice id="txAdvice" transaction-manager="transactionManager">-->
<!--        <tx:attributes>-->
<!--            <tx:method name="*" propagation="REQUIRED" isolation="DEFAULT" read-only="false"/>-->
<!--        </tx:attributes>-->
<!--    </tx:advice>-->
    <!--配置Mybatis工厂-->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        <!--指定核心配置文件的位置-->
        <property name="configLocation" value="classpath:mybatis-config.xml"/>
    </bean>
<!--&lt;!&ndash;    &lt;!&ndash;自动扫描指定包下的接口,对其进行映射配置&ndash;&gt;&ndash;&gt;-->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="svtcc.Dao" />
    </bean>
<!--    &lt;!&ndash;    启动AOP注解&ndash;&gt;-->
<!--    <aop:aspectj-autoproxy/>-->
</beans>
mybatis-config.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">
<configuration>
    <settings>
        <!--        开启缓存-->
        <setting name="cacheEnabled" value="true"/> 默认开启
        <!--        控制台输出编译后的sql语句-->
        <setting name="logImpl" value="STDOUT_LOGGING"/>
    </settings>
</configuration>
springmvc-config.xml配置文件:

配置Controller扫描器
配置视图解析器
配置拦截器
配置置自定义类型转换器

<?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"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
  http://www.springframework.org/schema/beans/spring-beans-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/context
  http://www.springframework.org/schema/context/spring-context-4.3.xsd">
    <!--    配置用户定义的Controller的实例-->
    <context:component-scan base-package="svtcc.jspcontrol"/>
    <!--    配置视图解析器-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <!--        指定前缀-->
        <property name="prefix" value="/JSP/"/>
        <!--        指定后缀-->
        <property name="suffix" value=".jsp"/>
    </bean>
</beans>

web.xml配置文件:

1.配置spring文件监听器
2.编码过滤器
3.前段控制器

为啥配置ContextLoaderListener
使用spring时需要先创建容器,并指定容器所解析的xml文件的位置,加载完成后才能使用(注解注入bean),
Springmvc的前端控制器这直接在xml中加载,并指出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_4_0.xsd"
         version="4.0">
    <!--    配置Spring-->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:applicationContext.xml</param-value>
    </context-param>
    <!--    配置ContextLoaderListener-->
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    <!--    配置前段控制器-->
    <servlet>
        <servlet-name>springDispatcherServlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:springmvc-config.xml</param-value>
        </init-param>
        <load-on-startup>2</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>springDispatcherServlet</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
        <!--    将limitword加载入servlet容器-->
        <servlet>
            <servlet-name>limitservlet</servlet-name>
            <servlet-class>svtcc.jspcontrol.initservlet</servlet-class>
            <load-on-startup>1</load-on-startup>
        </servlet>
        <servlet-mapping>
            <servlet-name>limitservlet</servlet-name>
            <url-pattern>/CCTV</url-pattern>
        </servlet-mapping>
    <!--    配置字符编码过滤器-->
    <filter>
        <filter-name>encoding</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>
    </filter>
    <filter-mapping>
        <filter-name>encoding</filter-name>
        <url-pattern>*</url-pattern>
    </filter-mapping>
</web-app>

两个重要标签

mvc:annotation-driven/ -->自动注册处理器映射器和适配器还提供读写xml和读写JSON等功能的支持
<mvc:resources location=“/No/image/” mapping=“/No/image/**” />
放行静态资源

资源找不到

url-pattern中配置的斜杠(/)表示将除了JSP以外的其他请求都拦截下来,交给spring的前端控制器来处理。
但是这样配置,会将对静态资源的访问也拦截下来,导致访问静态资源时,出现404(资源找不到),因为spring的前端控制器将对静态资源的访问也当成了一个controller请求,去配置对应的映射路径,这当然找不到。

注意在你配置的图片,css等需要加上项目名
在这里插入图片描述
否则也访问不到

方法一:
springmvc-config.xml配置文件:
<mvc:default-servlet-handler />
在这里插入图片描述
方法二:
在这里插入图片描述
方法三:
<mvc:resources location=“/No/image/” mapping=“/No/image/**” />

处理JSON

接收JSON数据的两种方式

第一. 标签mvc:annotation-driven/

第二请添加图片描述

具体接收

一般用异步ajax加载
@ResponseBody 写在类上,return .接收json数据
@RequestBody 写在方法参数上,参数接收json数据
在这里插入图片描述

那么ContextLoaderListener的作用是什么?

ContextLoaderListener的作用就是启动Web容器时,读取在contextConfigLocation中定义的xml文件,自动装配ApplicationContext的配置信息,并产生WebApplicationContext对象,然后将这个对象放置在ServletContext的属性里,这样我们只要得到Servlet就可以得到WebApplicationContext对象,并利用这个对象访问spring容器管理的bean。
简单来说,就是上面这段配置为项目提供了spring支持,初始化了Ioc容器。

文件上传

要实现文件上传功能,只需在我们的项目中配置好这两个bean中的任何一个即可。其实这两个都很好用,如果我们部署的容器支持Servlet3.0,我们完全可以使用StandardServletMutipartResolver。但是如果我们的应用部署的容器不支持Servlet3.0或者用到的Spring版本是3.1以前的,那么我们就需要用到CommonMutipartResolver了。
在写我们处理上传文件的controller之前,我们得先配置一个Mutipart Resolver来告诉DispatchServlet如何解析一个mutipart 请求。
————————————————
版权声明:本文为CSDN博主「Heaven-Wang」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/suifeng3051/article/details/51659731
这里使用servletApi part接口出现

StandardServletMutipartResolver 0

servelt3.0 提供的api 可使用part来接受文件
若项目为springmvc项目则需要配置bean


  <bean id="multipartResolver" class="org.springframework.web.multipart.support.StandardServletMultipartResolver"/>
<servlet>
    <servlet-name>appServlet</servlet-name>
    <servlet-class> org.springframework.web.servlet.DispatcherServlet </servlet-class>
    <load-on-startup>1</load-on-startup>
    <multipart-config>
        <location>/tmp/spittr/uploads</location> //必填,这里出现临时文件夹无效。不知道为啥
        <max-file-size>2097152</max-file-size>
        <max-request-size>4194304</max-request-size>
    </multipart-config>
</servlet>

否则出现
在这里插入图片描述

CommonMutipartResolver

链接: 详细.

再谈Springmvc

1.配置maven依赖
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

spring加载bean时和Springmvc加载bean时冲突了

在这里插入图片描述

绑定参数

这里参数接收默认是造对象。但是List没有构造方法,导致报错
在这里插入图片描述
@RequestParam把参数扔进去

整合SSM

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值