Spring MVC体系结构和ssm整合
1.Spring mvc的环境搭建
表现层框架,非常优秀,比之前的传统表现层框架Strus2\webWork优秀
①#在导入Spring相关炸包之后,再导入额外的俩个包,web . webmvc
②#编写web.xml配置核心控制器(DispathcherServlet),
<!-- 编写核心控制器 -->
<servlet>
<servlet-name>springmvc</servlet-name>
<!-- Ctrl+Shift+T -->
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 指定核心配置文件位置 否则默认去WEB-INF下寻找 -->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc-servlet.xml</param-value>
</init-param>
<!-- 随着服务器启动而加载 -->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
③编写核心配置文件(-servlet.xml)
④编写控制器,并且在配置文件中做好映射,也可以采用注解映射
*第一种在配置文件中做好映射使用xml(BeanNameUrlHandlerMapping了解一下就行)
public class HelloController implements Controller {
// 处理某个请求
@Override
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
System.out.println("执行!");
// 它封装着视图资源(逻辑视图名)和数据资源
return new ModelAndView("index");
}
}
```
xml形式的配置
```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: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/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd">
<!-- HandlerMapping 映射处理器
BeanNamUrlHandlerMapping(默认)
-->
<bean name="/hello" class="cn.kgc.demo1.HelloController"></bean>
<!-- 配置视图解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!-- index -> /WEB-INF/index.jsp -->
<property name="prefix" value="/WEB-INF/"/>
<property name="suffix" value=".jsp"/>
</bean>
</beans>
```
第二种使用springMVC注解形式进行开发(掌握)
Defaultz默认Annotation注解Handler处理器Adapter适配器(适配器就是代表了对某个代码做了继承优化等)
```java
@Controller
public class HelloController2 {
@RequestMapping("/hello1")
public ModelAndView doHello1(HttpServletRequest request, HttpServletResponse response) throws Exception {
System.out.println("执行了Hello1!");
// 它封装着视图资源(逻辑视图名)和数据资源
return new ModelAndView("index");
}
// 请求映射
@RequestMapping("/hello")
public ModelAndView doHello(HttpServletRequest request, HttpServletResponse response) throws Exception {
System.out.println("执行了Hello!");
// 它封装着视图资源(逻辑视图名)和数据资源
return new ModelAndView("index");
}
}
```
```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: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/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd">
<!-- 配置IoC注解扫描 -->
<context:component-scan base-package="cn.kgc.demo1"></context:component-scan>
<!-- 开启Spring MVC注解处理器的 -->
<mvc:annotation-driven></mvc:annotation-driven>
<!-- 配置视图解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!-- index -> /WEB-INF/index.jsp -->
<property name="prefix" value="/WEB-INF/"/>
<property name="suffix" value=".jsp"/>
</bean>
</beans>
```
2.掌握 Spring MVC 的执行流程(面试题)
#启动流程(生命周期的一部分)
*在服务器(Servlet容器)启动的时候,核心控制器(DispathcherServlet)被实例化
*核心控制器在实例化后,开始读取指定的核心配置文件,将相应的映射和其他资源配置读取并且加入Spring管理,
如果有注解,则开始扫描指定的包,然后也是去将配置加入到Spring管理
#请求执行流程(生命周期的补一部分)
*当请求过来的时候,核心控制器开始读取此资源信息
&服务器会根据资源地址进行资源分发
&因为我们的核心控制器能够接受所有的请求,所以自然会被只配
例如:http://locahost:8080/spingmvc/hello1
*核心控制器会根据资源信息,去查找指定的HandlerMapping
*当找到的时候,开始对映射处理进行一系列的实例化初始化,并且将数据进行一定的转换和封装交给对应的处理器、
*处理开始执行业务逻辑处理(Service-->dao),当执行完毕之后,需要返回一个ModerAndView给核心控制器
ModelAndView包含着响应数据和视图信息(视图信息就是逻辑视图名)
*核心控制器拿到这个ModerAndView通过视图解析器开始解析其中的视图信息
*当找到指定的视图之后,开始将模型数据和视图进行渲染,
*渲染后,核心控制器会将这个渲染后的页面等展示给客户端
3.掌握Spring MVC 请求数据接收以及数据响应
3.1v(view)-->c(controller)
接受客户端的请求,数据就是在处理方法中添加对应的参数就行,而普通类型就是可以随便转换
@RequestParam(请求参数的指定),请求参数缺少所以报错
defaultValue:默认值的指定,当参数没有值的时候,可以作为默认的值使用
```java
public ModelAndView doLogin(@RequestParam(defaultValue="hehe") String username,String password) {}
```
name:指定请求参数的键名,如果不设置默认为处理方法的对应的形参名
```java
public ModelAndView doLogin(@RequestParam(name="name") String username,String password) {}
```
required:默认为true。表示请求中是否必须有某个请求参数。(如果请求中没有这个参数,就会报400 Bad)
如果某个请求真的是不需要每次都传某个参数,可以调整此属性为false
*例如:根据用户名进行模糊查询,以及根据角色名等值进行查询,这俩个条件都是可选的,那就不能设置为必填项
```java
public ModelAndView doLogin(@RequestParam(required=false) String username,String password) {}
```
3.2c(controller)---V(view)
ModelAndView作为返回值,返回Model 和View
设置视图信息。这个视图信息默认是使用请求转发进行跳转的
*ModerAndView(String viewName)
*ModelAndView(View view)
*setView(View view)
*setViewName(String viewName)
设置模型信息(数据):数据默认会存储在request作用域中,
ModerlAndView()系列
addObject(String key,Object value);
addObject(Object value);取指的时候,需要根据值对应的数据类型进行接收
```java
addObject("hehe"); // ${string}
addObject(new User()); // ${user}
```
addAllObject(Map<String,Object> modelMap)
*String字符串作为方法的返回值,:这个返回值代表的就是你的逻辑试图名(ViewName)(以后推荐使用)
```java
@RequestMapping("/hello")
public String hello() {
System.out.println("我在执行!");
return "index";
}
在参数中使用Model对象作为入餐,:它可以保存返回的数据(推荐使用)
或者是使用Map集合作为入参也是可以的
@RequestMapping("/hello")
public String hello(Model model) {
System.out.println("我在执行!");
model.addAttribute("result", "success");
return "index";
}
@RequestMapping("/hello")
public String hello(Map map) {
System.out.println("我在执行!");
map.put("result", "fail");
return "index";
}
3.3请求的转发
@RequestMapping[]:请求映射
headers(String[]):它是控制请求头中必须要有哪些参数(目前了解)
produces(Srtring[]):表示返回的数据格式。用来设置相应头信息的,application/json; text/html;…一般要配合一些特定的注解返回(目前了解)
value/path(String[]):它是映射路径,当请求中符合此路径的规则时,则会将请求交给此处理器执行处理
@RequestMapping(value="/login")
@RequestMapping(value={"/login",“login1”})
params(String[]):它是控制请求中要有哪些参数的。如果不指定,就标识不限制(一般不配置)
method:(RequestMethod[]):它是控制能够处理哪些请求方式的,(枚举类型的请求方式)
GET POST DELETE PUT 等
RequestMapping(value="/login",method={RequestMethod.GET,RequestMethod.POST})
未来如果想直接表示此请求只能处理某种方式的请求(了解)
@GetMapping
@PostMapping
注意事项:
*每一个requestMapping他们必须保证在项目中的唯一性,(只要requestMapping某个属性不一致,都是属于唯一的)
*除了通过更改直接地址之外,还可以按照模块的思想将类上添加requestMapping,用于作为此控制器类中所有的处理器的映射路径的前缀
@Controller
@RequestMapping("/role")
public class RoleController {
// /role/del
@RequestMapping("/del")
public ModelAndView delRole() {
System.out.println("正在执行删除角色!");
return new ModelAndView("index");
}
}
```
4.掌握spring mvc 中的如何获取servlet API
在Spring MVC中想要获取Servlet的API.只需要在对应的方法参数中添加对应的形参即可
HttpServletRequest
HttpServletResponse
HttpSession
ServletContext
```java
@RequestMapping("/list")
public String doList(HttpServletRequest request,HttpServletResponse response,HttpSession session) {
String parameter = request.getParameter("key");
System.out.println(parameter);
return "index";
}
5.整合SSM框架
Spring 的Ioc和OP的原因,所以要进行整合,使得我们的代码更加精简
Spring MVC 表现层框架
它和Spring还真没有啥需要进行整合的,因为是一家的。
Spring它是提供了一个声明式事务,但是它其实不算业务逻辑层框架
它的最主要作用就是用来给其他框架提供管理帮助,Ioc和AOP
Sping MVC和Spring不用整合,但是Spring和Spring MVC需要进行整合
因为以前的Spring想要进行启动,需要以下的代码
ApplicationContext context = new ClassPathXmlApplicationContext(配置文件信息); // 构建Spring容器
context.xxx
但是我们发现和它是一家的Spring MVC竟然可以不用写代码就利用服务器就可以自动加载,所以Spring也可以实现此操作,最终合并为一个Spring 容器,也需在web.xml中做一些处理
MyBatis数据访问层、持久层框架
数据源dataSource交给Spring 管理
SqlSessionFactory交给Spring处理
SqlSession和Mapper接口 交给Springchuli
整合ssm框架的步骤如下
1.导入相关的炸包(Spring相关包 + Spring MVC相关的包,+MyBatis的相关包,+MyBatis的整合包,+数据库的驱动。。。。。。)
2.编写核心配置文件applicationContext.xml
BasicDatasource
SqlSessionFactoryBean
MapperScannerConfigurre
声明式事务
3.编写pojo和Mapper接口和映射文件
4.Springmvc环境的搭建
5.另外Spring为了能够随着服务器的启动而加载容器等在web.xml中单独配置了一些东西
<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>
或者利用Spring MVC一块启动
<servlet>
<servlet-name>springmvc</servlet-name>
<!-- Ctrl+Shift+T -->
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 指定核心配置文件位置 否则默认去WEB-INF下寻找 -->
<init-param>
<param-name>contextConfigLocation</param-name>
<!-- <param-value>classpath:springmvc-servlet.xml</param-value> -->
<param-value>classpath:spring/*.xml</param-value>
</init-param>
<!-- 随着服务器启动而加载 -->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>