一、SpringMVC常用表明

@Controller

卖力注册一个bean 到spring 高下文中。

mvc如何请求映射jsp步步精心Spring MVC的映射要求 JavaScript

@Service

声明Service组件,例如@Service(\"大众myMovieLister\"大众)

@Repository

声明Dao组件。

@Component

泛指组件, 当不好归类时利用此表明。

@Resource

用于注入,( j2ee供应的 ) 默认按名称装置,@Resource(name=\"大众beanName\公众) 。

@Autowired

用于注入,(srping供应的) 默认按类型装置 。

@Transactional( rollbackFor={Exception.class})

事务管理。

@Scope(\"大众prototype\"大众)

设定bean的浸染域。

@RequestMapping

表明为掌握器指定可以处理哪些 URL 要求。

@RequestBody

该表明用于读取Request要求的body部分数据,利用系统默认配置的HttpMessageConverter进行解析,然后把相应的数据绑定到要返回的工具上 ,再把HttpMessageConverter返回的工具数据绑定到 controller中方法的参数上。

@ResponseBody

该表明用于将Controller的方法返回的工具,通过适当的HttpMessageConverter转换为指定格式后,写入到Response工具的body数据区。

@ModelAttribute

在方法定义上利用 @ModelAttribute 表明:Spring MVC 在调用目标处理方法前,会先逐个调用在方法级上标注了@ModelAttribute 的方法。

在方法的入参前利用 @ModelAttribute 表明:可以从隐含工具中获取隐含的模型数据中获取工具,再将要求参数 –绑定到工具中,再传入入参将方法入参工具添加到模型中 。

@RequestParam

在处理方法入参处利用 @RequestParam 可以把要求参 数通报给要求方法。

@PathVariable

绑定 URL 占位符到入参。

@ExceptionHandler

表明到方法上,涌现非常时会实行该方法。

@ControllerAdvice

使一个Contoller成为全局的非常处理类,类中用@ExceptionHandler方法表明的方法可以处理所有Controller发生的非常。

二、@RequestMapping详解

1、映射要求 URL

Spring MVC 利用 @RequestMapping 表明为掌握器指定可以处理哪些 URL 要求。
在掌握器的类定义及方法定义处都可标注。

@RequestMapping

– 类定义处:供应初步的要求映射信息。
相对付 WEB 运用的根目录。

– 方法处:供应进一步的细分映射信息。
相对付类定义处的 URL。
若类定义处未标注 @RequestMapping,则方法处标记的 URL 相对付WEB 运用的根目录。

DispatcherServlet 截获要求后,就通过掌握器上@RequestMapping 供应的映射信息确定要求所对应的处理方法。

@RequestMapping(\公众/springmvc\"大众)

@Controller

public class HelloWorld {

/

1. 利用 @RequestMapping 表明来映射要求的 URL

2. 返回值会通过视图解析器解析为实际的物理视图, 对付 InternalResourceViewResolver 视图解析器, 会做如下的解析:

通过 prefix + returnVal + 后缀 这样的办法得到实际的物理视图, 然会做转发操作。

/WEB-INF/views/success.jsp------->对应的要求是类的@RequestMapping+方法的@RequestMapping

也便是/springmvc/helloworld

/

@RequestMapping(\"大众/helloworld\公众)

public String hello(){

System.out.println(\公众hello world\"大众);

return \"大众success\"大众;

}

}

2、映射要求参数、要求方法或要求头

@RequestMapping 的 value、method、params 及 heads分别表示要求 URL、要求方法、要求参数及要求头的映射条件,他们之间是与的关系,联合利用多个条件可让要求映射更加精确化。

示例:

-----

@RequestMapping(value = \公众/testMethod\"大众, method = RequestMethod.POST)

指定要求办法为POST办法,如此便不再相应GET办法的要求。

-----

@RequestMapping(value = \"大众testParamsAndHeaders\"大众, params = { \"大众username\"大众,

\公众age!=10\公众 }, headers = { \公众Accept-Language=en-US,zh;q=0.8\公众 })

默认要求办法为GET办法,且须要有两个参数:username和age,还限定了age不能为10。

\"大众/testParamsAndHeaders?username=atguigu&age=10\"大众这个要求不知足哀求,SpringMVC不会处理。

3、通配符

@RequestMapping 支持 Ant 风格的 URL。

---?:匹配文件名中的一个字符

---:匹配文件名中的任意字符

---: 匹配多层路径

示例:

---/user//createUser: 可以匹配如下

/user/aaa/createUser、/user/bbb/createUser 等 URL。

---/user//createUser: 可以匹配如下

/user/createUser、/user/aaa/bbb/createUser 等 URL。

---/user/createUser??: 可以匹配如下

/user/createUseraa、/user/createUserbb 等 URL,但不匹配/user/createUseraaa。

三、@PathVariable

通过 @PathVariable 可以将 URL 中占位符参数绑定到掌握器处理方法的入参中:URL 中的 {xxx} 占位符可以通过@PathVariable(\公众xxx\公众) 绑定到操作方法的入参中。

示例:

@RequestMapping(\"大众/testPathVariable/{id}\公众)

public String testPathVariable(@PathVariable(\"大众id\"大众) Integer id) {

System.out.println(\公众testPathVariable: \"大众 + id);

return SUCCESS;

}

如果要求为/testPathVariable/1,那么参数\公众1\公众会作为参数传给id作为传入参数。
在方法中就可以获取这个参数值。

四、要求处理方法署名

Spring MVC 通过剖析处理方法的署名,可以将 HTTP 要求信息绑定到处理方法的相应人参中。
必要时可以对方法及方法入参标注相应的表明(@PathVariable、@RequestParam、@RequestHeader 等)、SpringMVC 框架会将 HTTP 要求的信息绑定到相应的方法入参中,并根据方法的返回值类型做出相应的后续处理。

1、@RequestParam

在处理方法入参处利用 @RequestParam 可以把要求参数通报给要求方法。
有三个属性:

value:指定参数名

required:解释是否必须。
默认为 true, 表示要求参数中必须包含对应的参数,若不存在,将抛出非常

defaultValue:指定要求参数的默认值。

示例

@RequestMapping(value = \公众/testRequestParam\"大众)

public String testRequestParam(

@RequestParam(value = \"大众username\"大众) String un,

@RequestParam(value = \"大众age\公众, required = false, defaultValue = \公众10\"大众) int age) {

System.out.println(\"大众testRequestParam, username: \"大众 + un + \"大众, age: \公众

+ age);

return SUCCESS;

}

声明两个输入参数,个中age参数可以缺省,默认为10。
如/testRequestParam?username=kang&age=11。

2、@RequestHeader

利用 @RequestHeader 可以绑定要求报头的属性值。
要求头包含了多少个属性,做事器可据此获知客户真个信息,通过 @RequestHeader 即可将要求头中的属性值绑定到处理方法的入参中。

示例:

@RequestMapping(\"大众/testRequestHeader\公众)

public String testRequestHeader(

@RequestHeader(value = \"大众Accept-Language\"大众) String al) {

System.out.println(\"大众testRequestHeader, Accept-Language: \"大众 + al);

return SUCCESS;

}

3、利用 @CookieValue 绑定要求中的 Cookie 值,可让处理方法入参绑定某个 Cookie 值。

示例:

@RequestMapping(\"大众/testCookieValue\公众)

public String testCookieValue(@CookieValue(\公众JSESSIONID\"大众) String sessionId) {

System.out.println(\"大众testCookieValue: sessionId: \"大众 + sessionId);

return SUCCESS;

}

五、将 POJO 工具绑定为要求参数值

Spring MVC会按要求参数名和 POJO 属性名进行自动匹配,自动为该工具添补属性值。
支持级联属性。
示例:POJO类:Address.java

public class Address {

private String province;

private String city;

//省略了get/set方法

//重写了toString方法

}

User.java

public class User {

private String username;

private String password;

private String email;

private int age;

private Address address;//持有一个Address的类实例

//省略了get/set方法

//重写了toString方法

}

jsp页面要求:

<form action=\"大众/testPojo\"大众 method=\公众post\"大众>

username: <input type=\"大众text\公众 name=\公众username\"大众/>

<br>

password: <input type=\公众password\"大众 name=\"大众password\"大众/>

<br>

email: <input type=\公众text\公众 name=\"大众email\"大众/>

<br>

age: <input type=\公众text\公众 name=\"大众age\公众/>

<br>

city: <input type=\"大众text\公众 name=\公众address.city\"大众/>

<br>

province: <input type=\公众text\"大众 name=\"大众address.province\"大众/>

<br>

<input type=\"大众submit\"大众 value=\公众Submit\公众/>

</form>

<br><br>

可以看出name=\公众address.city\"大众和name=\"大众address.province\公众都采取了级联属性。

Spring MVC代码

@RequestMapping(\公众/testPojo\"大众)

public String testPojo(User user) {

System.out.println(\"大众testPojo: \"大众 + user);

return SUCCESS;

}

这里直接将User类和index.jsp的表单参数名直接对照,从而实现映射。

六、利用 Servlet API 作为入参

MVC 的 Handler 方法可以接管的 ServletAPI 类型的参数如下:

---HttpServletRequest

---HttpServletResponse

---HttpSession

---Locale,InputStream等。

示例:

public void testServletAPI(HttpServletRequest request,

HttpServletResponse response, Writer out) throws IOException {

System.out.println(\"大众testServletAPI, \"大众 + request + \"大众, \公众 + response);

out.write(\"大众hello springmvc\"大众);

return SUCCESS;

}