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

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 注解的内容,请看这篇文章

@Controller
public 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 注解

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值