SpringMVC之HelloWorld

Servlet启动加载,Servlet原本是第一次访问创建对象
load-on-startup: 服务器启动的时候创建对象,值越小优先级越高

SpringMVC概述

  • Spring 为展现层提供的基于 MVC 设计理念的优秀的 Web 框架,是目前最主流的 MVC 框架之一。
  • Spring3.0 后全面超越 Struts2,成为最优秀的 MVC 框架。
  • Spring MVC 通过一套 MVC 注解,让 POJO(Plain Old Java Object) 成为处理请求的控制器,而无须实现任何接口。
  • 支持 REST 风格的 URL 请求。
  • 采用了松散耦合可插拔组件结构,比其他 MVC 框架更具扩展性和灵活性。

SpringMVC是什么

  1. 一种轻量级的、基于MVC的Web层应用框架。偏前端而不是基于业务逻辑层。
  2. 是Spring框架的一个后续产品。
  • Spring框架结构图(新版本)
  • Spring框架结构图(老版本):

    以前的MVC和现在的MVC的区别

  1. 普通MVC

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    MVC: 新的软件架构模式
    M: Model模型,封装和映射数据(JavaBean)
    V: View视图,界面显示工作(JSP)
    C: Controller控制器: 控制整个网站的跳转逻辑(Servlet)
    MVC提倡:每一层只编写自己的东西,不写其他任何代码
    控制器{
    调用业务逻辑处理
    调整到某个页面
    }
    分层为了解耦,解耦为了维护方便和分工合作

  2. SpringMVC

    1
    2
    3
    4
    SpringMVC多一个前端控制器,就相当于一个导诊台

    DispatchServlet是一个前端控制器,它是一个Servlet,
    应该在web.xml中配置这个Servlet来拦截所有请求

  3. SpringMVC的主要控件

  • DispatcherServlet:前端控制器
  • Controller:处理器/页面控制器,做的是MVC中的C的事情,但控制逻辑转移到前端控制器了,用于对请求进行处理
  • HandlerMapping :请求映射到处理器,找谁来处理,如果映射成功返回一个HandlerExecutiongChain对象(包含一个Handler处理器(页面控制器)对象、多个HandlerInterceptor拦截器对象)
  • ViewResolver : 视图解析器,找谁来处理返回的页面。把逻辑视图解析为具体的View,进行这种策略模式,很容易更换其他视图技术;
    • 如InternalResourceViewResolver将逻辑视图名映射为JSP视图
  • LocalResolver:本地化、国际化
  • MultipartResolver:文件上传解析器
  • HandlerExceptionResolver:异常处理器

    SpringMVC可以干什么

  • 天生与Spring框架集成,如:(IOC,AOP)
  • 支持Restful风格
  • 进行更简洁的Web层开发
  • 支持灵活的URL到页面控制器的映射
  • 非常容易与其他视图技术集成,如:Velocity、FreeMarker等等。
  • 因为模型数据不存放在特定的API里,而是放在一个Model里(Map数据结构实现,因此很容易被其他框架使用)
  • 非常灵活的数据验证、格式化和数据绑定机制、能使用任何对象进行数据绑定,不必实现特定框架的API
  • 更加简单、强大的异常处理
  • 对静态资源的支持
  • 支持灵活的本地化、主题等解析

SpringMVC需要的jar包

1
spring-webmvc-4.0.0.RELEASE.jar

SpringMVC 实现HelloWorld

操作步骤

  1. eclipse console配置(可以不配置)
    1. 切换JavaEE视图
    2. 在Quick Access中找Package explore
    3. 调整custom perspective,使得鼠标邮件可以找到并创建
    4. 新建工作集
  2. 创建动态web工程
    1. 如果选择Dynamic web module version为3.0则需要自己创建web.xml或点击下一步勾选生成,2.5则不需要
    2. 创建Tomcat运行环境,并引入Tomcat环境
  3. 导包
    1. SpringMVC是Spring的Web模块,所有模块的运行都依赖于核心模块(IOC模块)
      1
      2
      3
      4
      5
      6
      7
      8
      spring-aop-4.0.0.RELEASE.jar
      spring-beans-4.0.0.RELEASE.jar
      spring-context-4.0.0.RELEASE.jar
      spring-core-4.0.0.RELEASE.jar
      spring-expression-4.0.0.RELEASE.jar
      commons-logging-1.1.3.jar
      spring-web-4.0.0.RELEASE.jar
      spring-webmvc-4.0.0.RELEASE.jar
  4. 在 web.xml 中配置 DispatcherServlet(ALT+/)
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
           <!-- The front controller of this Spring Web application, responsible for handling all application requests -->
    <servlet>
    <servlet-name>springDispatcherServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <!-- SpringMVC 配置文件的位置 -->
    <init-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:spring.xml</param-value>
    </init-param>
    <!--
    Servlet启动加载,Servlet原本是第一次访问创建对象
    load-on-startup: 服务器启动的时候创建对象,值越小优先级越高
    -->
    <load-on-startup>1</load-on-startup>
    </servlet>

    <!-- Map all requests to the DispatcherServlet for handling -->
    <servlet-mapping>
    <servlet-name>springDispatcherServlet</servlet-name>
    <url-pattern>/</url-pattern>
    </servlet-mapping>
  5. 加入 Spring MVC 的配置文件:springmvc.xml
    1. 添加命名空间
    2. 增加配置
      1
      <context:component-scan base-package="xyz.lyhcc"></context:component-scan>
    3. 配置视图解析器
      1
      2
      3
      4
      <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
      <property name="prefix" value="/WEB-INF/views/"></property>
      <property name="suffix" value=".jsp"></property>
      </bean>
  6. 需要创建一个入口页面,index.jsp(创建之前,修改JSP文件配置为UTF-8:菜单栏Windows->Preference->搜索JSP->修改编码)
    1
    <a href="${pageContext.request.contextPath }/helloworld">Hello World</a>
  7. 编写处理请求的处理器,并标识为处理器
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    @Controller
    public class HelloWorldController {

    @RequestMapping(value="/hello", method=RequestMethod.GET)
    public String hello() {
    System.out.println("processing the request...");
    return "success";

    }
    }
  8. 编写视图/WEB-INF/views/success.jsp
    1
    <h4>Sucess Page</h4>
  9. 部署测试:

HelloWorld的运行流程

  1. 客户端点击链接发送http://localhost:8080/springmvc/hello
  2. 来到Tomcat服务器
  3. SpringMVC的前端控制器收到所有请求
  4. 来看请求地址和@RequestMapping标注匹配,来找到相应的方法
  5. 前端控制找到目标处理器类和目标方法,直接利用返回执行目标方法
  6. 方法执行完成会有返回值,SpringMVC认为这个返回值就是要去的地址
  7. 拿到方法返回值以后,用视图解析器进行拼串得到完整的页面地址
  8. 拿到页面地址,前端控制器帮我们转发到页面

如果前端控制器不指定配置文件位置

会去寻找默认的文件 前端控制器名-servlet.xml

url-pattern说明


  1. /: 拦截所有请求,不拦截jsp页面*.jsp
  2. /*:拦截所有请求,包括jsp

处理*.jsp是Tomcat做的事,所有项目的小web.xml都是集成大的web.xml
DefaultServlet是Tomcat周玲处理静态资源的,除了jsp,Servlet外都是静态资源

1) 服务器的大的web.xml中有一个DefaultServlet的url-pattern=/
2) 自定义的配置中前端控制器url-pattern=/

这样就会禁用父web.xml,静态资源就会来到DispatchServlet,看那个方法的RequestMapping是这个,所以此时的html会报错
3) jsp可以访问是因为没有覆盖父web.xml的jspServlet
4) /* 直接拦截所有请求,一般写/;也是为了迎合后来Rest风格的URL


Comments

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×