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>
<!--<!– <!–自动扫描指定包下的接口,对其进行映射配置–>–>-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="svtcc.Dao" />
</bean>
<!-- <!– 启动AOP注解–>-->
<!-- <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把参数扔进去