Spring MVC 中的DispatcherServlet文件与Controller类中可以使用的注解

来源:互联网 发布:python 定义类 编辑:程序博客网 时间:2024/06/05 20:51

Spring MVC 中的 DispatcherServlet 的功能

功能:

  • 根据URI调用对应的Controller的对应方法

  • 根据返回的值跳转到对应的JSP页面

  • 将请求的参数值包装传给对应的Controller中去。

DispatcherServlet 的使用

首先在web.xml中配置一个DispatcherServlet类

<servlet>        <servlet-name>HelloWeb</servlet-name>        <servlet-class>            org.springframework.web.servlet.DispatcherServlet        </servlet-class>        <load-on-startup>1</load-on-startup>    </servlet>    <servlet-mapping>        <servlet-name>HelloWeb</servlet-name>        <url-pattern>/</url-pattern>    </servlet-mapping>

就像这样,就配置了一个Helloweb 的一个DispatcherServlet,而且,还必须在相同目录下,也就是/WEB-INF/ 目录下配置 Helloweb-servlet.xml 文件,对自定义的DispatcherServlet进行配置。名字不能改变。。

改变DispatcherServlet 文件的位置

如果你想将 Helloweb-servlet.xml 文件写在其它地方,只需要在web.xml 中 <servlet> 标签下使用 <init-param> 标签对 contextConfigLocation 的值进行改变就了。不仅可以改变位置,也可以改变文件名。就像下图将文件名改变成 Helloweb-config.xml 文件。

<servlet>        <servlet-name>HelloWeb</servlet-name>        <servlet-class>            org.springframework.web.servlet.DispatcherServlet        </servlet-class>        <init-param>            <param-name>contextConfigLocation</param-name>            <param-value>/WEB-INF/config/Helloweb-config.xml</param-value>        </init-param>        <load-on-startup>1</load-on-startup>    </servlet>    <servlet-mapping>        <servlet-name>HelloWeb</servlet-name>        <url-pattern>/</url-pattern>    </servlet-mapping>

配置DispatcherServlet的XML文件

我们就配置默认的 Helloweb-servlet.xml 文件来了解这个文件到底干了什么。。

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"       xmlns:context="http://www.springframework.org/schema/context"       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"       xsi:schemaLocation="   http://www.springframework.org/schema/beans   http://www.springframework.org/schema/beans/spring-beans-3.0.xsd   http://www.springframework.org/schema/context   http://www.springframework.org/schema/context/spring-context-3.0.xsd">    <!-- 指定控制器所在的包 -->    <context:component-scan base-package="controller" />    <!-- 配置视图解析器 -->    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">        <property name="prefix" value="/WEB-INF/jsp/" />        <property name="suffix" value=".jsp" />    </bean></beans>

1、在指定的包下,找到有 @Controller 标签的类,它就是一个控制器,可以根据对应的URL来进行不同的处理。

2、根据对应控制器的返回的视图,使用定义好的视图解析器进行解析。。。。

有@Controller注解的类

@Controller 注解的类成为了控制器,可以处理HTTP请求。具体是怎么样实现呢?

首先,找到控制器中有 @RequestMapping 注解的方法,这样的方法就是可以处理HTTP请求的方法,然后根据注解中value的值表示此方法只能处理对应的URI。返回的字符串就是对应的视图的名字。。更多有关 @RequestMapping 注解的内容,请看这篇文章。

@Controllerpublic class HelloController{    @RequestMapping("/login")    public String getLogin() {        return "login";    }    @RequestMapping(value = "/{userName}")    public String login(ModelMap model,                        @PathVariable String userName) {        User user = new User();        user.setUserName(userName);        user.setPassword("123456");        model.addAttribute("user", user);        return "userInfo";    }}

其实 @RequestMapping 注解也可以放在类名上,对这时注解对URI的限制是对全类的,如果类中的方法也的 @RequestMapping 注解,那方法要匹配的URI就是类的限制加上方法的限制。。

使用@AutoWired和@Service注解进行依赖注入

@AutoWired 注解可以注释属性或方法,此时,属性或方法就不需要定义了,它在生成类时,就会注入对应的实例。而被 @Service 注解注释的类就是要被注入的类。

比如,你需要在控制器中使用 UserService 类中的方法。

@ModelAttribute 注解