day-69Spring MVC体系结构和ssm整合

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>
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值