SpringMVC学习笔记2----实现Controller的方式

方式一:实现controller接口

来变成控制类进行控制

这样写的缺点就是:

一个控制类,只能写一个控制方法,不能传递多个参数或者值。

好处:

不用去配置,注解开启和驱动支持也不用去管静态文件的处理和扫描包,即

<context:component-scan base-package="com.kuang.controller"></context:component-scan>

    <mvc:default-servlet-handler></mvc:default-servlet-handler>

    <mvc:annotation-driven></mvc:annotation-driven>

代码案例1:实现Controller接口

web.xml

  <servlet>
        <servlet-name>springmvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:springmvc-servlet.xml</param-value>
        </init-param>

        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

springmvc-servlet.xml

<?xml version="1.0" encoding="UTF8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"

       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd

">
<!--<context:component-scan base-package="com.kuang.controller"></context:component-scan>-->
<!--    <mvc:default-servlet-handler></mvc:default-servlet-handler>-->
<!--    <mvc:annotation-driven></mvc:annotation-driven>-->

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

    <bean name="/t1" class="com.kuang.controller.ControllerDome1"></bean>

</beans>

实现Controller接口

//实现了Controller接口,就是一个控制器了
public class ControllerDome1 implements Controller {
    
    
    public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
    
    
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.addObject("msg","你好呀,世界");
        modelAndView.setViewName("test");

        return modelAndView;
    }
}

方式二,使用Controller注解(推荐使用)

其他文件都不变和方式一一样,web.xml不变,test.jsp不变,把spring-servlet.xml的bean去掉,加入扫描包的注解即可。

springmvc-servlet.xml

<?xml version="1.0" encoding="UTF8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"

       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd

">
<context:component-scan base-package="com.kuang.controller"></context:component-scan>
    <mvc:default-servlet-handler></mvc:default-servlet-handler>
    <mvc:annotation-driven></mvc:annotation-driven>

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

<!--    <bean name="/t1" class="com.kuang.controller.ControllerDome1"></bean>-->

</beans>

ControllerDome2.java

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller//会被Spring接管,
public class ControllerDome2 {
    
    

    //这里的类会被视图解析器接管
    @RequestMapping("/t2")
    public String test1(Model model){
    
    
        model.addAttribute("msg","使用注解Controller");
        return "test";
        //这里的return就是要在视图解析器找到的地址文件。
        // 比如这里是test,那它就会找/WEB-INF/jsp/test.jsp
    }

    @RequestMapping("/t3")
    public String test3(Model model){
    
    
        model.addAttribute("msg","test3");
        return "test";
    }

}

这里的return就是要在视图解析器找到的地址文件。
比如这里是test,那它就会找/WEB-INF/jsp/test.jsp

使用注解开发实现Controller,可实现一个控制类,实现多个页面视图。向案例中,我们输入/t2和/t3都跳入test.jsp,实现了软件开发过程中的低耦合。可以扩展的效果,是值得继续推荐使用的。实际写的代码也是最少的,只要通过注解支持即可。

public String是为了返回一个视图解析器。

@RequestMapping

是用于映射url到控制器,可以用于类或者方法上,用于类上表示类下面的所有方法都是以改地址作为父地地址。

比如,我们在设置管理员权限时,就可以在最上面的父类上加上admin,其下所有的子类或者子方法,都必须经过这个父类admin才能访问到。

@Controller
@RequestMapping("/admin")
public class ControllerDome3 {
    
    

    @RequestMapping("/t2")
    public String test1(Model model){
    
    
        model.addAttribute("msg","使用/admin/t2");
        return "test";
    }

    @RequestMapping("/t3")
    public String test2(Model model){
    
    
        model.addAttribute("msg","/admin/t3");
        return "test";
    }
}

这样在访问时,必须在/admin目录下,在输入/t2才能访问里面的内容。实现了封闭。

通常在开发中,使用较多也也有

在子类上加地址的,

    @RequestMapping("/admin/t2")
    public String test1(Model model){
    
    
        model.addAttribute("msg","使用/admin/t2");
        return "test";
    }

错误整理:

检查Project Structure下的lib包,是不是缺失或者放置位置不对。

lib包要放在WEB-INF下,和classses同级别放置。

猜你喜欢

转载自blog.csdn.net/weixin_45263852/article/details/115066768