SpringMVC 学习笔记(一) Hello World

来源:互联网 发布:flashcs4软件下载 编辑:程序博客网 时间:2024/05/22 06:10

springMVC概述:

spring MVC 是目前最主流的MVC 框架之一

Spring MVC 通过一套 MVC 注解,让 POJO 成为处理请

求的控制器,而无须实现任何接口。

支持 REST 风格的 URL 请求

采用了松散耦合可插拔组件结构,比其他 MVC 框架更具

扩展性和灵活性

项目结构图:


pom.xml:

[html] view plain copy
  1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  2.     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">  
  3.     <modelVersion>4.0.0</modelVersion>  
  4.     <groupId>com.ibigsea</groupId>  
  5.     <artifactId>springmvc</artifactId>  
  6.     <packaging>war</packaging>  
  7.     <version>0.0.1-SNAPSHOT</version>  
  8.     <name>springmvc</name>  
  9.     <url>http://maven.apache.org</url>  
  10.     <dependencies>  
  11.         <dependency>  
  12.             <groupId>org.springframework</groupId>  
  13.             <artifactId>spring-core</artifactId>  
  14.             <version>${spring_version}</version>  
  15.         </dependency>  
  16.         <dependency>  
  17.             <groupId>org.springframework</groupId>  
  18.             <artifactId>spring-web</artifactId>  
  19.             <version>${spring_version}</version>  
  20.         </dependency>  
  21.         <dependency>  
  22.             <groupId>org.springframework</groupId>  
  23.             <artifactId>spring-webmvc</artifactId>  
  24.             <version>${spring_version}</version>  
  25.         </dependency>  
  26.         <dependency>  
  27.             <groupId>org.springframework</groupId>  
  28.             <artifactId>spring-context</artifactId>  
  29.             <version>${spring_version}</version>  
  30.         </dependency>  
  31.         <dependency>  
  32.             <groupId>org.springframework</groupId>  
  33.             <artifactId>spring-aop</artifactId>  
  34.             <version>${spring_version}</version>  
  35.         </dependency>  
  36.         <dependency>  
  37.             <groupId>org.springframework</groupId>  
  38.             <artifactId>spring-beans</artifactId>  
  39.             <version>${spring_version}</version>  
  40.         </dependency>  
  41.         <dependency>  
  42.             <groupId>org.springframework</groupId>  
  43.             <artifactId>spring-expression</artifactId>  
  44.             <version>${spring_version}</version>  
  45.         </dependency>  
  46.         <dependency>  
  47.             <groupId>javax.servlet.jsp.jstl</groupId>  
  48.             <artifactId>jstl-api</artifactId>  
  49.             <version>1.2</version>  
  50.         </dependency>  
  51.         <dependency>  
  52.             <groupId>jstl</groupId>  
  53.             <artifactId>jstl</artifactId>  
  54.             <version>1.2</version>  
  55.         </dependency>  
  56.         <dependency>  
  57.             <groupId>junit</groupId>  
  58.             <artifactId>junit</artifactId>  
  59.             <version>3.8.1</version>  
  60.             <scope>test</scope>  
  61.         </dependency>  
  62.     </dependencies>  
  63.   
  64.     <properties>  
  65.         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>  
  66.         <spring_version>4.1.2.RELEASE</spring_version>  
  67.     </properties>  
  68.   
  69.     <build>  
  70.         <finalName>springmvc</finalName>  
  71.         <plugins>  
  72.             <plugin>  
  73.                 <groupId>org.apache.maven.plugins</groupId>  
  74.                 <artifactId>maven-compiler-plugin</artifactId>  
  75.                 <version>2.3.2</version>  
  76.                 <configuration>  
  77.                     <source>1.7</source>  
  78.                     <target>1.7</target>  
  79.                 </configuration>  
  80.             </plugin>  
  81.         </plugins>  
  82.     </build>  
  83.   
  84. </project>  

Web.xml:

[html] view plain copy
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  3.     xmlns="http://java.sun.com/xml/ns/javaee"  
  4.     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"  
  5.     version="3.0" >  
  6.     <!-- The front controller of this Spring Web application, responsible for handling all application requests -->  
  7.     <servlet>  
  8.         <servlet-name>springDispatcherServlet</servlet-name>  
  9.     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>  
  10.         <!-- 加载spirng配置文件 -->  
  11.         <init-param>  
  12.             <param-name>contextConfigLocation</param-name>  
  13.             <param-value>classpath:spring-mvc.xml</param-value>  
  14.         </init-param>  
  15.         <!-- 启动就加载 -->  
  16.         <load-on-startup>1</load-on-startup>  
  17.     </servlet>  
  18.   
  19.     <!-- 拦截所有请求 -->  
  20.     <servlet-mapping>  
  21.         <servlet-name>springDispatcherServlet</servlet-name>  
  22.         <url-pattern>/</url-pattern>  
  23.     </servlet-mapping>  
  24. </web-app>  
  25.       

通过在web.xml配置DispatcherServlet前端控制器, web容器 启动时加载,并且进行初始化.

因为HttpServlet继承了HttpServlet 所以在web容器启动执行时将会调用 init() 方法


其中initServletBean() 是HttpServletBean 提供给子类扩展的

FrameworkServlet 继承了 HttpServletBean 实现了initServletBean()这个方法,web上下文进行初始化 并且提供了onRefresh(wac) 方法给子类实现   




DispatcherServlet继承了 FrameworkServlet 实现了onRefresh()这个方法


如果 web.xml中没有指定 contextConfigLocation . 则使用servlet-name 寻找xml文件.





 HelloWorld.java 

[java] view plain copy
  1. package com.ibigsea.springmvc.helloworld;  
  2.   
  3. import org.springframework.stereotype.Controller;  
  4. import org.springframework.web.bind.annotation.RequestMapping;  
  5.   
  6. @Controller  
  7. public class HelloWorld {  
  8.       
  9.     /** 
  10.      * 配置@RequestMapping 拦截 localhost:8080/springmvc/hello 请求  
  11.      * @return 
  12.      */  
  13.     @RequestMapping("/hello")  
  14.     public String helloWorld(){  
  15.   
  16.         System.out.println("hello world");  
  17.         return "helloworld";  
  18.     }  
  19. }  

 RequestMapping

详情请见第2章节

Spirng-mvc.xml

[html] view plain copy
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans xmlns="http://www.springframework.org/schema/beans"  
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  4.     xmlns:context="http://www.springframework.org/schema/context"  
  5.     xmlns:mvc="http://www.springframework.org/schema/mvc"  
  6.     xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.1.xsd  
  7.         http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd  
  8.         http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.1.xsd">  
  9.     <!-- 配置自动扫描包  扫描com.ibigsea.springmvc 包下的类 -->  
  10.     <context:component-scan base-package="com.ibigsea.springmvc"/>  
  11. <!-- 配置视图解析器 如返回helloworld       
  12.                          为 [/WEB-INF/pages/helloworld.jsp] -->  
  13.     <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">  
  14.      <!-- 前缀 -->  
  15.         <property name="prefix" value="/WEB-INF/pages/"/>  
  16.          <!-- 后缀 -->  
  17.         <property name="suffix" value=".jsp"/>  
  18.     </bean>  
  19. </beans>  

当访问 http://localhost:8080/springmvc/hello 后 DispatcherServlet 会拦截请求 



InternalResourceViewResolver 继承了 UrlBasedViewResolver 最终通过buildView() 解析



重定向和转发

一般情况下,控制器方法返回字符串类型的值会被当成逻辑视图名处理

• 如果返回的字符串中带 forward: 或 redirect: 前缀时,SpringMVC 会对他们进行特殊处理:将 forward: redirect: 当成指示符,其后的字符串作为 URL 来处理

– redirect:helloworld.jsp:会完成一个到 helloworld.jsp 的重定向的操作

– forward:helloworld.jsp:会完成一个到 helloworld.jsp 的转发操作

 

在 UrlBasedViewResolver 类里面的 createView 方法 解析

 

0 0
原创粉丝点击