SpringMVC框架原理

SpringMVC框架介绍

Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。使用 Spring 可插入的 MVC 架构,可以选择是使用内置的 Spring Web 框架还可以是 Struts 这样的 Web 框架。
Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。 使用 Spring 可插入的 MVC 架构,可以选择是使用内置的 Spring Web 框架还是 Struts 这样的 Web 框架。通过策略接口,Spring 框架是高度可配置的,而且包含多种视图技术,例如 JavaServer Pages(JSP)技术、Velocity、Tiles、iText 和 POI。Spring MVC 框架并不知道使用的视图,所以不会强迫您只使用 JSP 技术。Spring MVC 分离了控制器、模型对象、分派器以及处理程序对象的角色,这种分离让它们更容易进行定制。

SpringMVC运行原理

  1. 程序启动时会先默认加载web.xml中的页面,并使用需要用到的页面,并启动相关servlet标签中的引用
  2. java启动后会自动寻找相关路径下的所有类与方法
  3. 收到页面的请求后调用相关的类,此时如果类和方法前有注解标识,便会优先找到,没有标识会寻找所有类,知道找到该方法
  4. java处理后将结果返回给页面
  5. web代码,其余的xml代码在程序运行后也会被合并到这里
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
  <display-name>ssm</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>spring-dispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:spring-*.xml</param-value>
    </init-param>
  </servlet>
  <servlet-mapping>
    <servlet-name>spring-dispatcher</servlet-name>
    <!--默认匹配所有请求-->
    <url-pattern>/</url-pattern>
  </servlet-mapping>

</web-app>

注解

  1. Spring 注解利用反射机制原理解决了配置时的大量问题

  2. @Controller:
    在SpringMVC中,控制器Controller负责处理由DispatcherServlet分发的请求,它把用户请求中的数据经过业务处理层处理后封装为一个 Model,然后将该Model返回相应的View进行显示。@Controller注解在一个类上,表明该类是一个SpringMVC Controller对象。

  3. @RequestMapping:
    1、@RequestMapping:是一个用来处理请求地址映射的注解,可以用于类或者方法上。当该注解用于类上时,表示该类中所有响应请求的方法都是以该地址为父路径。

    2、@RequestMapping注解包含6个属性,下面我们对这6个属性进行分析:
    value:指定请求的实际地址,指定的地址可以是URL Template模式;
    method:指定请求的方法类型;
    consumes:指定请求提交的内容类型(Content-Type),例如application/json,text/html;
    produces:指定返回的内容类型,仅当请求头部中Accept包含指定类型时方法才进行处理;
    params:请求中必须包含某些参数时,方法才进行处理;
    headers:请求header中必须包含某些指定的header值,方法才进行处理;

  4. @Resource和@Autowired
    1、@Resource和@Autowired都是bean注入时使用,但是其实@Resource并不是spring的注解,它的包是javax.annotation.Resource,需要导入,但是Spring支持该注解的注入;

    2、@Resource和@Autowired的共同点:两者都可以使用在字段或者setter方法上,如果使用在了字段上,那么就不再需要setter方法。

    3、@Resource和@Autowired的不同点:
    @Autowired注解是由spring提供的,需要导入org.springframework.beans.factory.annotation.Autowired,只按照byType进行注入。在默认情况下,它要求依赖的对象必须存在,如果允许null,可以通过属性required设置为false进行设置。如果我们需要辅助通过byName进行装配bean,我们可以结合@Qualifier注解一起使用。

    4、@Resource注解默认是按照byName进行装配bean,由J2EE提供,需要导入javax.annotion.Resource。

    5、@Resource注解包含两个重要的属性: name和type,Spring将@Resource注解中的name属性解析为bean的名字,将type属性解析为bean的类型。
    当@Resource注解的name属性时,Spring将按照byName方式进行bean注入,找不到将会抛出异常;
    当使用type属性时,将按照byType方式进行bean注入,找不到或者找到多个将会抛出异常;
    如果同时使用了这两个属性,那么将会从Spring上下文中查找指定类型指定名字bean进行装配,找不到将会抛出异常;
    如果两个属性都没有使用,那么将会按照默认方式byName进行bean注入。

  5. @ModelAttribute
    @ModelAttribute注解有两种用法:一种是用在拥有返回值的方法上,方法的返回值将会作为Model中指定属性的值;另一种是用在请求处理方法参数上,方法参数将会从Model的属性列表中获取指定属性的值。通过@ModelAttribute(“xxxx”)可以指定属性的名称。在Controller的请求处理方法调用之前,@ModelAttribute注解的方法都会被首先执行。

  6. @SessionAttributes
    @SessionAttibutes注解只能用在类上,不能使用在方法上。该注解将Model属性列表中指定的一些属性保存到Session对象中。

  7. @PathVariable
    该注解用于将请求URL的模板变量提取出来,应用到请求处理方法参数中。

  8. @RequestParam
    @RequestParam主要用于SpringMVC后台请求处理方法中获取参数,类似与request.getParameter(“name”), 该注解包含三个属性:required, defaultValue, value,其中required表示请求中是否必须包含该参数,defaultValue表示请求中没有包含该参数时的默认值,value表示传入的参数的名称。

  9. @ResponseBody
    该注解用于将Controller请求处理方法返回的对象,通过适当的HttpMessageConverter转换为指定的格式,保存到Response对象的body区。

  10. @Component
    相当于通用的注解。

  11. @Repository
    用于注解DAO层。

  12. 处理一次简单的请求响应代码

@Controller --声明控制器

@RequestMapping("/person") –声明URL

publicclass PersonControl extends BaseController {

@Autowired –业务接口注入

private personServices personServices;

/**

* 获得人员列表

* @param request

* @param response

* @throws Exception

*/

@RequestMapping(params = "method=geList") --即处理/person.do? method=geList方法

publicvoid getnodeList(HttpServletRequest request,

HttpServletResponse response) throws Exception { //处理请求

//处理响应

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值