index.jsp:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>$Title$</title>
</head>
<body>
<a href="hello">helloWorld</a>
</body>
</html>
MyFirstController:
package com.it.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
//@Controller注解标识该类是一个控制器
@Controller
public class MyFirstController {
// /代表从当前项目下开始,处理当前项目下的hello请求
@RequestMapping("/hello")
public String myFirstRequest(){
System.out.println("Controller中的myFirstController请求映射成功");
return "success";
}
}
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: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.1.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.1.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-4.1.xsd">
<!-- 扫描所有组件 -->
<context:component-scan base-package="com.it.controller"></context:component-scan>
<!-- 配置一个视图解析器,能帮我们拼接视图地址 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/pages/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
</beans>
web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>springDispatcherServlet</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>
<load-on-startup>1</load-on-startup>
<!--
load-on-startup:服务器启动的时候创建对象,
值越小优先级越高,越先创建对象
-->
</servlet>
<servlet-mapping>
<servlet-name>springDispatcherServlet</servlet-name>
<!--
/*和/都是拦截所有请求,
前者范围更大,会把.jsp文件都拦截,一旦拦截后jsp页面就无法正常显示了
-->
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
HelloWorld的细节:
1、运行流程:
1)点击超链接后客户端会发送http://localhost:8080/springmvc/hello请求
2)来到tomcat服务器
3)SpringMVC的前端控制器接收到请求
4)比较请求地址和@RequestMapping标注的哪个匹配,从而确定使用什么方法
5)前端控制器找到了目标处理器类和目标方法,直接利用反射执行目标方法
6)方法执行后得到一个返回值,SpringMVC认为这个返回值就是要去的页面地址
7)用视图解析器凭借字符串得到完整的页面地址
8)前端控制器帮我们转发到页面
2、@RequestMapping:
作用:告诉SpringMVC这个方法要来处理什么URL请求
括号中的 / 可以省略,习惯加上
可以标注在类或方法上:
标记在类上时:提供初步的请求映射信息
标记在方法上时:提供进一步的细分映射信息
当类和方法上都有注解时,访问 /类注解/方法注解 才能执行目标方法
@RequestMapping的属性值:
method:接收的请求方式,默认全部接受
-method=RequestMethod.POST:只接受post请求
params:规定请求参数
-params和headers支持简单的表达式:
params1表示请求必须包含名为params1的请求参数
!params1表示请求不能包含名为params1的请求参数
params1 !=value1表示请求包含params1的请求参数,但其值不能为value1
{“params1=value1",“params2”}表示请求必须包含名为params1和params2的两个请求参数,且params1的参数值必须为value1
headers:规定请求头,使用方法与params类似;可以限制访问的浏览器
consumes:只接受内容类型是哪种的请求,规定请求头中的Content-Type
produces:告诉浏览器返回的内容类型是什么,给响应头中加上Content-Type:text/html;charset=utf-8
@RequsetMapping的模糊匹配:
URL地址可以写模糊的通配符:
?:能替代任意一个字符(/不行)
- :能替代任意多个字符和一层路径(/不行)
** :能替代多层路径
存在多个相同路径的情况下优先匹配较精确路径
@pathVariable 映射URL绑定的占位符:
带占位符的URL是spring3.0新增的功能
通过@PathVariable可以将占位符参数绑定到URL中
@RequestMapping("/hello/{id}")
public String hello(@PathVariable("id") Interger id){
return "success";
}
3、下配置文件的指定:
可以不指定,不指定的情况下springmvc会默认去找/WEB-INF/xxx-servlet.xml文件(xxx为),找不到则会报错