springMVC学习笔记

为什么要学习springMVC,springMVC和struts2的比较

SpringMVC与Struts2区别

对比项目

SrpingMVC

Struts2

优势

国内市场情况

有大量用户,一般新项目启动都会选用springmvc

有部分老用户,老项目组,由于习惯了,一直在使用。

国内情况,springmvc的使用率已经超过Struts2

框架入口

基于servlet

基于filter

本质上没太大优势之分,只是配置方式不一样

框架设计思想

控制器基于方法级别的拦截,处理器设计为单实例

控制器基于类级别的拦截, 处理器设计为多实例

由于设计本身原因,造成了Struts2,通常来讲只能设计为多实例模式,相比于springmvc设计为单实例模式,Struts2会消耗更多的服务器内存。

参数传递

参数通过方法入参传递

 

参数通过类的成员变量传递

Struts2通过成员变量传递参数,导致了参数线程不安全,有可能引发并发的问题。

与spring整合

与spring同一家公司,可以与spring无缝整合

需要整合包

Springmvc可以更轻松与spring整合

简单的使用srpingmvc的开发步骤

 创建工程

导入jar包

 编写控制类

package com.angus.springmvc.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

//使用注解标识这是一个控制器
@Controller
public class HellowControll {
	//注解用来绑定请求地址
	@RequestMapping("hello")
	public ModelAndView hello() {
		System.out.println("hello springmvc...");
		ModelAndView mav = new ModelAndView();
		//设置模型数据,用于传递jsp
		mav.addObject("msg", "hello springmvc...");
		//设置视图名字,用于相应用户
		mav.setViewName("/WEB-INF/jsp/hello.jsp");
		
		return mav;
	}
}	

创建页面

 创建和配置springmvc.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:p="http://www.springframework.org/schema/p"
	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-4.0.xsd
        http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd">

	<!-- 配置controller扫描包 -->
	<context:component-scan base-package="com.angus.springmvc.controller" />
</beans>

 

 在web.xml中配置前端控制器 

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
  <display-name>01-springmvc</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  <!-- 核心控制器的配置 -->
  <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>
  </servlet>
  <servlet-mapping>
  	<servlet-name>springmvc</servlet-name>
  	<url-pattern>*.action</url-pattern>
  </servlet-mapping>
</web-app>

springmvc代码的执行流程

 ① 客户端发送名为 hello.action 的请求

 ② 请求被<servlet-mapping> 将带 .action 的请求拦截下来,交给名为springmvc的<servlet>核心控制器来处理。

 ③<servlet>核心控制器

 ④<servlet>核心控制器加载一些参数

 ⑤加载springmvc的配置文件

 ⑥开启控制类的包扫描

 ⑦找到控制器类

 ⑧到控制器类里边去,找到带 @Controller的注解

 ⑨ @Controller 与 @RequestMapping 相对照

 ⑩ @RequestMappin和请求相对应

 最后加载控制类,完成相应,将结果处理结果返回。

springmvc默认组件的加载

处理器映射器

在spring的核心配置文件里边配置一个处理器映射器

还需要配置一个处理器适配器

映射器和适配器是成套使用的,如果一个用最新的,那么另外一个也需要用最新的。

显然,这么长的一个名字,我们不一定能能够记下来,那么该怎么办呢,还可以

接着我们为了方便在控制器里边对页面的访问更加简单,我们还可以配置 视图解析器

springmvc的架构体系

springmvc的核心组件是:处理器映射器,处理器适配器,视图解析器,还有前端控制器

整个流程就是,用户发送一个请求,到前端控制器,然后前端控制器,到处理器映射器上去找谁来处理,接着处理器映射器返回一个处理器执行连,然后到处理器适配器上去处理,处理器适配器执行handler,然后返回一个ModelAndView,然后再回到前端控制器,请求解析视图,返回view对象,渲染视图,最后相应用户。

springmvc简单的参数传递

@RequestParam

传递简单的参数,第一个用途是,当传的参数名不相同的时候;第二个用途,可以限制必须传递参数,第三个用途是,设置默认的传递参数。

传递pojo对象

传递包装的pojo

要点:通过点(.)传递属性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值