zoukankan      html  css  js  c++  java
  • Spring学习10-SpringMV核心组件2及SpringMVC项目示例

    一、SpringMVC核心接口
         5、ViewResolver接口--视图解析接口

    继承体系:Spring学习10-SpringMV核心组件2及SpringMVC项目示例
    Spring学习10-SpringMV核心组件2及SpringMVC项目示例
    Spring学习10-SpringMV核心组件2及SpringMVC项目示例


         5、View接口--视图接口

    Spring学习10-SpringMV核心组件2及SpringMVC项目示例
    Spring学习10-SpringMV核心组件2及SpringMVC项目示例
    Spring学习10-SpringMV核心组件2及SpringMVC项目示例
      、SpringMVC项目示例

      (1)建立动态web工程,导入spring的jar包(不要忘加SpringMVC.jar)。
      (2)配置DispatcherServlet
        DispatcherServlet是SpringMVC的核心,将下面Servlet的注册信息登记在web.xml中。一定要记住:Servlet跟伴侣一样,要结婚,先得注册登记!

    <servlet>
     <servlet-name>test</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>test</servlet-name>
      <url-pattern>*.do</url-pattern>
    </servlet-mapping>

      说明:
     红题字指明了配置文件的文件名,不使用默认配置文件名,而使用springMVC.xml配置文件。
     其中<param-value>**.xml</param-value> 这里可以使用多种写法
    1、红题字不写,使用默认值:/WEB-INF/<servlet-name>-servlet.xml
    2、<param-value>/WEB-INF/classes/springMVC.xml</param-value>
    3、<param-value>classpath*:springMVC-mvc.xml</param-value>
    4、多个值用逗号分隔
    5、在全局定义中加载配置文件
      <context-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>/WEB-INF/applicationContext.xml,
    classpath*:springMVC-mvc.xml</param-value>
     </context-param>

     其中:
    <context-param>和<servlet>是同一级的元素,并不是父子元素关系
    (3)编写Controller,做核心配置文件,并配置url和Controller的映射
    package com.wepull.test;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import org.springframework.web.servlet.ModelAndView;
    import org.springframework.web.servlet.mvc.Controller;
    public class HelloController implements Controller{

        public ModelAndView handleRequest(HttpServletRequest request,

                  HttpServletResponse response) throws Exception {

                 request.setAttribute("hello", "welcome to spring!");

                 return new ModelAndView("welcome");

                }

    }


    我们知道Struts有个XML格式的核心配置文件,springMVC当然也有,在WEB-INF下新建一XML文件:test- servlet.xml.注意,这里的test取决于servlet的名字.当DispatcherServlet载入后,它将试图从这个文件中载入应用 上下文。

    <?xml version="1.0" encoding="UTF-8"?>

    <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
    <beans>

        <!--缺省映射处理器,不需要明确声明,但声明后就非常清楚使用的是哪个映射处理器  -->  
    <bean id="beanNameUrlMapping"
    class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping">
    </bean>

        <!-- 这里的name属性有两个职责,既定义Bean的名字,也定义需要这个控制器处理的URL样式 -->

        <bean name="/hello.do"
         class="com.wepull.test.HelloController">
        </bean>

    </beans>

    上面可能有人奇怪,为什么不用id属性,而设置name属性。这里是因为URL中含有XML id属性非法字符——特别是斜杠(/);

    (4)配置一个视图解析器将控制器与JSP结合起来。
    将解析器的配置片段加到上面的test-servlet.xml中。

    <bean id="viewResolver"
    class="org.springframework.web.servlet.view.InternalResourceViewResolver">

           <property name="prefix" value="/WEB-INF/jsp/" />
          <property name="suffix" value=".jsp" />
    </bean>


    InternalResourceViewResolver在ModelAndView返回的视图名前加上prefix属性配置的前缀,再在最 后加上suffix属性配置的后缀。由于HelloController返回的ModelAndView中视图名为welcome,所以 InternalResourceViewResolver将在/WEB-INF/jsp/welcome.jsp处查找视图。
    (5)编写呈现给用户的jsp文件。
    /WEB-INF/jsp/welcome.jsp

    <%@ page contentType="text/html; charset=UTF-8"%>
    <%@ page isELIgnored="false" %>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Hello World!</title>
      </head>
      <body>
       <h2>${hello}</h2>
      </body>
    </html>

      完成后启动服务器,在浏览器地址栏上输入http://locahost:8080/projectName/hello.do       就可以访问了。

       对照一下,我们发现SpringMVC跟Struts大同小异。只是有两处映射,SpringMVC做的相对灵活。哪两处呢?

    (1) url和动作(后端控制器)的映射。

    springMVC里有个映射处理器(HandlerMapping)的概念。它实际上是一个处理器映射Bean,用来将一个控制器指定到一个URL上。Spring提供了三种有用的HandlerMapping的实现:

    —— BeanNameUrlHandlerMapping

           根据控制器的名字将控制器映射到URL

    —— SimpleUrlHandlerMapping

           用上下文配置文件中定义的属性集合将控制器映射到URL

    —— CommonsPathMapHandlerMapping

           使用控制器代码中的元数据将控制器映射到URL 

    (2) 逻辑视图名和视图对象的映射。

    springMVC里还有个视图解析器(ViewResolver)的概念。它决定了ModelAndView对象的逻辑视图名如何解析成一个用于将结果渲染给用户的视图Bean..Spring有四种ViewResolver实现:

    —— InternalResourceViewResolver

           将逻辑视图名解析成一个用模板文件(如JSP和Velocity模板)渲染的视图对象

    —— BeanNameViewResolver

           将逻辑视图名解析成一个DispatcherServlet应用上下文中的视图Bean

    —— ResourceBundleViewResolver

           将逻辑视图名解析成一个ResourceBundler中的视图对象

    —— XmlViewResolver

           从一个XML文件中解析视图Bean,这个文件是从DispatcherServlet应用上下文中分离出来的。
  • 相关阅读:
    模板驱动表单中的自定义表单验证
    kartikgridGridView导出excel变科学计数
    linux下安装vue-element-admin报错
    yii2运行流程
    nginx报错502 Bad Gateway
    linux下安装npm
    登录验证记录
    vue的store、vuex状态管理
    vue-cli3使用路由和循环引入路由
    vue使用问题汇总记录
  • 原文地址:https://www.cnblogs.com/kabi/p/5182092.html
Copyright © 2011-2022 走看看