springMVC的controller实现的两种方式

springMVC中需要将控制器类交由spring来统一管理,再由DispatcherServlet统一调度,然而让一个类成为控制器有两种实现方法.

方法一:实现Controller接口,重写handleRequest方法

public class ControllerTest implements Controller {
    public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.addObject("msg","hello springmvc!");
        modelAndView.setViewName("test");//需要提前配置好视图解析器
        return modelAndView;
    }
}

然后在spring的配置文件applicationContext.xml中注册这个类

<!-- 视图解析器 -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"
          id="internalResourceViewResolver">
        <!-- 前缀 -->
        <property name="prefix" value="/WEB-INF/jsp/" />
        <!-- 后缀 -->
        <property name="suffix" value=".jsp" />
    </bean>
    
    <!-- 注册控制类 -->
<bean id="/hello" class="com.pqw.controller.ControllerTest"></bean>

简而言之就是:首先自定义类实现Controller接口,然后重写handleRequest方法,最后在spring配置文件中注册交由容器管理!这种方式还可以使用httpServletRequest的请求转发和httpServletResponse的重定向。

httpServletRequest.getRequestDispatcher("index.jsp").forward(httpServletRequest,httpServletResponse);//请求转发
httpServletResponse.sendRedirect("index.jsp");//重定向

方式二 : 使用@Controller注解

自定义类,在类上添加@Controller注解,将控制器交由Spring容器管理

@Controller
public class Controller2 {
    @RequestMapping("/test2")
    public String sayHello(Model model){
        model.addAttribute("msg","controller2 hello!");
        return  "test";
    }
}

当然还要在applicationContext中配置添加注解驱动支持、扫描包下的注解生效、请求过滤、视图解析器

<!-- 自动扫描包,让指定包下的注解生效,由IOC容器统一管理 -->
    <context:component-scan base-package="com.pqw.controller"/>
    <!-- 让Spring MVC不处理静态资源 例如.css .js .mp3等等 -->
    <mvc:default-servlet-handler />
    <!--
    支持mvc注解驱动
        在spring中一般采用@RequestMapping注解来完成映射关系
        要想使@RequestMapping注解生效
        必须向上下文中注册DefaultAnnotationHandlerMapping
        和一个AnnotationMethodHandlerAdapter实例
        这两个实例分别在类级别和方法级别处理。
        而annotation-driven配置帮助我们自动完成上述两个实例的注入。
     -->
    <mvc:annotation-driven />

    <!-- 视图解析器 -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"
          id="internalResourceViewResolver">
        <!-- 前缀 -->
        <property name="prefix" value="/WEB-INF/jsp/" />
        <!-- 后缀 -->
        <property name="suffix" value=".jsp" />
    </bean>

最后,无论是那种方式实现的controller,都不能忘记在web.xml中配置注册请求调度器DispatcherServlet

<!--1.注册DispatcherServlet-->
    <servlet>
        <servlet-name>springmvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <!--关联一个springmvc的配置文件-->
        <init-param>
        <!--       关联spring配置文件     -->
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:applicationContext.xml</param-value>
        </init-param>
        <!--启动级别-1 跟随服务器启动-->
        <load-on-startup>1</load-on-startup>
    </servlet>

    <!--    / 匹配所有的请求;(不包括.jsp页面)      -->
    <!--    /* 匹配所有的请求,包括.jsp页面     -->
    <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值