1.创建WEB项目,引入开发的jar包(引入依赖)
war
5.0.2.RELEASE
org.springframework
spring-context
${spring.version}
org.springframework
spring-web
${spring.version}
org.springframework
spring-webmvc
${spring.version}
javax.servlet
javax.servlet-api
3.0.1
provided
javax.servlet.jsp
jsp-api
2.0
provided
2.配置核心配置的控制器
dispatcherServlet
org.springframework.web.servlet.DispatcherServlet
contextConfigLocation
classpath:springmvc.xml
1
dispatcherServlet
/
3.编写springmvc.xml的配置文件
4.编写index.jsp和HelloController控制器
4.1success.jsp页面
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
Title
SpringMVC入门案例!
5.HelloController控制器
package com.itheima.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
/****
* @Author:itheima
* @Description:
*****/
@Controller
public class HelloController {
/******
* 请求地址 http://localhost:18081/hello
* @RequestMapping(path = "/hello"):用户请求/hello的时候,由该注解所在的方法处理
* method:过滤了用户请求提交的方式
* method = RequestMethod.POST:用户以POST条,才能被该方法拦截处理\
*
*
* params用的比较少,这里不做要求掌握。
* param1: 表示请求必须包含名为 param1 的请求参数
* !param1: 表示请求不能包含名为 param1 的请求参数
* param1 != value1: 表示请求包含名为 param1 的请求参数,但其值不能为 value1
* {“param1=value1”, “param2”}: 请求必须包含名为 param1 和param2 的两个请求参数,且 param1 参数的值必须为 value1
* params = {"name"}:用户请求提交,必须要传入一个name参数
*
*
* headers用的比较少,这里不做要求掌握。
* param1: 表示请求头必须包含名为 param1 的请求头信息
* !param1: 表示请求头不能包含名为 param1 的请求头信息
* param1 != value1: 表示请求头包含名为 param1 的请求头信息,但其值不能为 value1
* {“param1=value1”, “param2”}: 请求必头须包含头信息 param1 和param2的两个请求头信息 ,且 param1 的值必须为 value1
*/
@RequestMapping(path = "/hello")
public String sayHello(){
System.out.println("SpringMVC hello!");
//只需要写页面的名字即可(不用写全路径,不用写后缀)
return "success";
//ViewResolver
//prefix+[返回的页面名字]+suffix
}
}
1.前端控制器(DispathcherServlet)
2.处理映射器(HandlerMapping)
3.处理器(Handler)
4.处理器适配器(HandlAdapter)
5.视图解析器(Viem Resolver)
6.视图(View)
@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Mapping
public @interface RequestMapping {
String name() default "";
@AliasFor("path")
String[] value() default {};
@AliasFor("value")
String[] path() default {};
RequestMethod[] method() default {};
String[] params() default {};
String[] headers() default {};
String[] consumes() default {};
String[] produces() default {};
}
出现位置:
类上:
请求 URL 的第一级访问目录。此处不写的话,就相当于应用的根目录。写的话需要以/开头
他出现的目的是为了使我们的URL可以按照模块化管理:
列如:
账户模块: 订单模块:
/account/add /order/add
/account/update/ /order/update
/account/delete /order/delete
.........
红色部分就是把RequsetMappding写在类上,使我们URL更加精细
访问上:请求URL的第二级访问目录。
作用在类上:第一级的访问目录
作用在方法上:第二级的访问目录
细节:路径可以不编写 / 表示应用的根目录开始
细节:${ pageContext.request.contextPath }也可以省略不写
案列:
案例:处理的请求路径是 http://localhost:8085/hello/say
@Controller
@RequestMapping(value = "/hello")
public class HelloController {
/**
* 接收请求
* @return
*/
@RequestMapping(value = "/say")
public String sayHello() {
System.out.println("Hello SpringMVC!!");
return "success";
}
}
列如: 在HelloController方法上加了@RequestMapping(path="/hello"),而sayHello方法上加了@RequestMapping(path="/say"),此时用户可以直接访问 http://localhost:8085/hello/say 来访问该方法.
@Controller
@RequestMapping(path = "/hello")
public class HelloController {
/**
* 此时用户访问此方法路径为 http://localhost:8085/hello/say
* @return
*/
@RequestMapping(value = "/say")
public String sayHello() {
System.out.println("Hello SpringMVC!!");
return "success";
}
}
我们这里写了sayHello()和sayYourName()2个方法,但他们请求路径相同,而method属性的值不一样,如果是RequestMethod.GET,则只能以方式请求,如果是RequestMethod.POST则只能以POST方式请求。
@Controller
@RequestMapping(value = "/hello")
public class HelloController {
/**
* 加了method = RequestMethod.GET
* 此时此方法只接收 http://localhost:8085/hello/say 的GET提交方式请求
* @return
*/
@RequestMapping(value = "/say",method = RequestMethod.GET)
public String sayHello() {
System.out.println("Hello SpringMVC!!调用了GET方法");
return "success";
}
/**
* 加了method = RequestMethod.POST
* 此时此方法只接收 http://localhost:8085/hello/say 的POST提交方式请求
* @return
*/
@RequestMapping(value = "/say",method = RequestMethod.POST)
public String sayYourName() {
System.out.println("Hello SpringMVC!!调用了POST方法");
return "success";
}
}
params用的比较少,这里不做要求掌握。
param1: 表示请求必须包含名为 param1 的请求参数
!param1: 表示请求不能包含名为 param1 的请求参数
param1 != value1: 表示请求包含名为 param1 的请求参数,但其值不能为 value1
{“param1=value1”, “param2”}: 请求必须包含名为 param1 和param2 的两个请求参数,且 param1 参数的值必须为 value1
列如:
/**
* headers参数:
* "Accept":表示请求头必须包含Accept头信息
* "!Date":表示请求头中不能包含Date的头信息
* "Accept-Encoding!=zh-CN":表示请求头中Accept-Encoding头信息的值不能为zh-CN
* "Host=localhost:18081":表示请求头中Host的值必须为localhost:18081
*
* @return
*/
@RequestMapping(headers = {"Accept","!Date","Accept-Encoding!=zh-CN","Host=localhost:18081"},
value = "/say",method = RequestMethod.GET)
public String sayHello() {
System.out.println("Hello SpringMVC!!调用了GET方法");
return "success";
}