SpringMVC:有哪些核心组件?

基础的四个组件。

 


一、DisapatcherServlet

  前端控制器,接受所有的请求。(配置为/ 则为所有不包括jsp的请求。/*则为所有请求)

配置:

  在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.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <!--接收所有除了jsp的请求-->
        <url-pattern>/</url-pattern>
    </servlet-mapping>

静态资源:

  因为在 DisapatcherServlet 我们配置了它接受所有除了jsp的请求,所以在请求静态资源的时候,会出现错误,于是我们需要在配置文件中声明哪些访问是对静态文件的访问。

配置:

    <!--静态资源:为了避免DisapatcherServlet拦截下对静态资源的请求,我们需要配置静态资源访问映射
        mapping:请求路径
        location:项目路径-->
    <mvc:resources mapping="/js/**" location="/js/"></mvc:resources>
    <mvc:resources mapping="/css/**" location="/css/"></mvc:resources>
    <mvc:resources mapping="/images/**" location="/images/"></mvc:resources>

二、HandlerMapping

  解析请求格式,判断需要执行的具体方法。

xml配置:

  在springmvc配置文件中配置

    <!--准备好控制器-->
    <bean class="com.lurenjia.controller.DemoController" id="demoController"></bean>

    <!--配置一个解析器-->
    <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
        <property name="urlMap">
            <map>
                <!--配置一个控制器的逻辑名为demo-->
                <entry key="demo" value-ref="demoController"></entry>
            </map>
        </property>
    </bean>

注解配置:

  使用RequestMapping配置该方法对应的访问逻辑名。

@Controller
public class LoginController {
    
    @RequestMapping("demo")//配置方法映射的逻辑名
    public String demo(){
        return "main.jsp";
    }
}

三、HandlerAdapter

  责调用具体的方法

xml配置:

  在springmvc配置文件中配置。(可使用默认值,无需配置)

    <!--配置一个适配器-->
    <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"></bean>

注解配置:

    <!--注解驱动,配置了Mapping和Adapter-->
    <mvc:annotation-driven></mvc:annotation-driven>

四、ViewResovler

  视图解析器,解析结果,准备跳转到具体的物理视图。

配置:

  在springmvc配置文件中配置。(可使用默认值,无需配置)

    <!--配置一个视图解析器-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="viewResolver">
        <!--配置前缀-->
        <property name="prefix" value="/"></property>
        <!--配置后缀-->
        <property name="suffix" value=".jsp"></property>
    </bean>

五、MultipartResolver

  用于文件上传,它依赖于commons-fileupload组件。

配置:

    <!--文件解析器-->
    <bean class="org.springframework.web.multipart.commons.CommonsMultipartResolver" id="multipartResolver">
        <!--上传文件的最大字节数-->
        <property name="maxUploadSize" value="1024"></property>
    </bean>

六、ExceptionResolver

  用于在程序发生异常时,指定跳转的页面。

配置:

    <!--异常解析器-->
    <bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver" id="exceptionResolver">
        <property name="exceptionMappings">
            <props>
                <!--key为异常类型,内容为跳转的位置-->
                <prop key="org.springframework.web.multipart.MaxUploadSizeExceededException">/error.jsp</prop>
            </props>
        </property>
    </bean>

 

使用MVC

(一)、不使用注解

示例代码:

  程序运行后,客户端发出请求,DisapatcherServlet接收到demo请求,通过HandlerMapping配置的逻辑名映射找到DemoController类,调用其实现的接口方法ModelAndView,经过视图解析器添加前缀 / ,后缀 .jsp ,最终达到页码跳转到main.jsp文件效果。

public class DemoController implements Controller {
    @Override
    public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
        System.out.println("执行了springmvc的控制器!");
        //创建一个ModelAndView 
        ModelAndView modelAndView = new ModelAndView("main");
        //进行跳转
        return modelAndView;
    }
}

(二)、使用注解

实例代码:

  通过 Controller 注解把控制器对象交给spring管理,然后通过 RequestMapping 注解实现逻辑名与具体方法的绑定,此时客服端访问demo则执行此方法。

@Controller
public class LoginController {

    @RequestMapping("demo")//配置方法映射的逻辑名
    public String demo(){
        return "main.jsp";
    }
}

 

posted @ 2023-03-03 15:00  在博客做笔记的路人甲  阅读(216)  评论(0编辑  收藏  举报