`

Sprng Mvc入门学习

 
阅读更多
 mvc基本流程
     从URL接受请求及数据->DispacherServlet->根据请求调用具体的Controller->Controller->调用service方法处理数据->通过DAO访问
 db->增删改查->db->返回操作结果集->service->处理返回结果->Controller->返回具体页面和数据->jsp页面
2.spring mvc注解
 @Controller,@Service,@Repository
     @Controllers声明控制层。@Service声明服务层。@Repository声明持久层(数据传输层DAO)
     @RequestMapping把一个POJO声明为Spring里的Controller.如果不声明要写Controller类就要从Spring的Controller类继承,并重写handleRequest方法。
     @RequestMapping(value="*.htm",method=RequestMethod.GET);属性value声明Controller处理的请求,method声明处理请求的类型。可声明在类头上,也可声明在方法头上。
     @RequestParam绑定参数与请求参数;例:public String Controller(@RequestParam("id") int topicId,User user)把参数 topicld与请求的参数“id”绑定,id的值传入topicld。
     @AutoWired根据类型自动装配,可放在属性上,set方法上,构造方法上。与@AutoWierd配套使用的是@Qualifier。按名字自动装配。
     @Resource与@AutoWired类似
3.DispatcherServlet-org.springframework.web.servlet.Dispatc-herServlet
 负责将请求分配给控制对象,所以使用Spring MVC的第一步是在web.xml中定义DispatcherServlet;
 <servlet>
       <servlet-name>hello</servlet-name>
       <servlet-class>
    org.springframework.web.servlet.DispatcherServlet
  </servlet-class>
  <init-param>
     <param-name>contextConfigLocation</param-name>
                <param-value>
    /WEB-INF/mvc-config.xml,
    /WEB-INF/spring-config.xml
  <param-value>
                <init-param>
        </servlet>
         .....
  可以加上contextConfigLocation的初始参数,用来设置Bean定义文件的位置和名称,默认使用“Servlet名-servlet.xml";可以加上多个bean文件的来源;如果一个都没加则找默认的;hello-servlet.xml

  spring-servlet.xml-
  <context:component-scan base-package="cn.spring.demo" />
 <bean
 class="org.springframework.web.servlet.view.InternalResourceView-Resolver"
 p:prefix="" p:suffix=".jsp" />
  base-package为注入bean时要spring要查找的包;
  Controller回传ModleAndView,DispatcherServlet会交给ViewResolver解析。如:回传一个字符串“index”,解析后找到/WEB-INF/index.jsp
4.Controller-

    @Controller//将类声明为Spring容器里的Bean,Spring调用时实例化
    @RequestMapping("index.htm")//声明这个Controller处理的请求是什么
    public class IndexController 
    {
     @RequestMapping(method = RequestMethod.GET)
     public String doGet() 
     {
      return "index";
     }
    }
返回“index”,交由ViewResolver解析,返回调用“/WEB-INF/index.jsp”

    //处理post请求的Controller
    @Controller
    @RequestMapping(value="index.htm",method = RequestMethod.POST)
    public String doPost(String username, String password, ModelMap modelMap) throws Exception 
    {
     modelMap.addAttribute("name",username);
     return "index";
    }
把username以名值对的形式放入ModelMap,在index.jsp中用request对象接收;ModleMap,Spring提供的集合可以传递数据到返回的jsp页面
http://www.ibm.com/developerworks/cn/java/j-lo-spring25-mvc/

 以上为基于注解驱动的mvc

5.DispacherServlet-HandlerMapping-ModleAndView-Controller-ViewResolver-View
 1.web.xml指定DispacherServelet和servlet的xml
  web.xml-
   <servlet>
    <servlet-name>buzzwords</servlet-name>
    <servlet-class>
       org.springframework.web.servlet.DispatcherServlet
    </servlet-class>
   <load-on-startup>1</load-on-startup>
   </servlet>
    
  <context-param>
   <param-name>contextConfigLocation</param-name>
   <param-value>/WEB-INF/buzzwords-service.xml</param-value>
   </context-param>
   <load-on-startup>标记容器是否在启动的时候就加载这个servlet,数字越小,当是一个负数时或者没有指定时,则指示容器在该servlet被选择时才加载;正数的值越小,启动该servlet的优先级越高
 2.BuzzwordsController-不用@Controllers则需要实现Controller接口
  public class BuzzwordsController implements Controller
  {
   private BuzzwordService facade;   
   public void setFacade(BuzzwordService facade)
   {       
     this.facade = facade;
   }   
   public ModelAndView handleRequest(HttpServletRequest request,  HttpServletResponse response) throws Exception
   {       
    return new ModelAndView("buzzwords", "buzzwordService", facade);   
   }
  }
 3.buzzwords-servlet.xml-指定servlet controller和urlmapping的映射关系
  <bean id="buzzwordsController“
   class="BuzzwordsController">
    <property name="facade"><ref bean="buzzwordService"/></property>
  </bean>

  <bean id="urlMapping" class="SimpleUrlHandlerMapping">
   <property name="mappings">
    <props>
    <prop key="/buzzwords.htm">
     buzzwordsController
    </prop>
 4.指定viewResolver
  <bean id="viewResolver" class="org.springframework...InternalResourceViewResolver">
    <property name="viewClass">
   <value>org.springframework... ...View</value>
   </property>
    <property name="prefix"><value>/WEB-INF/jsp/</value></property>
     <property name="suffix"><value>.jsp</value></property>
  </bean>
 5.buzzwords.jsp
6.参考 \spring mvc\Spring MVC 详解.ppt
  \spring mvc\Spring MVC 技术交流.ppt
     1. DispatchServlet在Web容器初始化的时候完成初始化——initStrategy() 
     2.ViewResolver-从一个String逻辑视图名映射到一个视图对象;对JSP用户, 通常实现 InternalResourceViewResolver
     3.Controller负责接收从DispatchServlet转发的URL请求

     开发一个Spring MVC程序的基本步骤:
     1编写处理请求逻辑的处理器-controller;
     2在DispatcherServlet上下文对应的Spring配置文件中配置处理器;
     3配置一个视图解析器,对处理器返回的ModelAndView进行解析;
     4编写一个视图对象(jsp或ftl等),将响应展现给客户

 Controller
     -AbstractController
          -MultiActionController 将多个请求行为合并在一个控制器里
          -BaseCommandController
                -AbstractCommandController 能将请求参数绑定到命令对象
                -AbstractFormController 支持表单提交的抽象控制器类
                       -SimpleFormController 简单表单处理控制器
                       -AbstractWizardFormController 向导型表单处理控制器

     ViewResolver接口:Controller传回ModelAndView对象,DispatcherServlet将其交由ViewResolver来作View层的相关解析。要在Spring MVC配置文件中定义一个ViewResolver实例

     ModelAndView-Mode1AndView 类代表了 Spring Web MVC 程序中,呈现画面时所使用 Model 数据对象与 View 数据对象,由于 Java  程序的方法中一次只能回传一个对象,所以 Modelview 的作用是封装这两个对象,方便您同时返回 Model 与 View SimpleUrlHandlerMapping-最常用的处理器映射,将请求的URLs 影射到handlers;由一系列的分别代表URLs 和bean 的名字的name/value 对来定义影射;在x-servlet.xml中定义

7. 参考\spring mvc\Spring_Web_MVC_架构.ppt
 1.web.xml:
  <servlet>
  <servlet-name>dispatcherServlet</servlet-name>
  <servlet-class>
      org.springframework.web.servlet.DispatcherServlet
  </servlet-class>
  <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>/WEB-INF/mvc-config.xml</param-value>
  </init-param>       
  <load-on-startup>1</load-on-startup>
     </servlet>

     <servlet-mapping>
  <servlet-name>dispatcherServlet</servlet-name>
  <url-pattern>*.do</url-pattern>
     </servlet-mapping>

     可以在 XML 文件中设定 Controller 请求处理完毕之后,所要呈现数据的网页路径,见mvc -config . xml

    2.controller:
  public class HelloController implements Controller
  {
     private String viewPage;   
     public ModelAndView handleRequest(HttpServletRequest req, HttpServletResponse res)  throws Exception
     {
  String user = req.getParameter("user");
  //viewPage与mvc-config.xml中的<property name="viewPage">对应,<value>对应返回的jsp页面
  return new ModelAndView(viewPage, "user", user);
     }   
     public void setViewPage(String viewPage)
     {
  this.viewPage = viewPage;
     }
 }


   3.mvc-config.xml:
   <beans>  
     <bean id="viewResolver"
    class="org.springframework.web.servlet.view.InternalResourceViewResolver">
  <property name="prefix">
      <value>/WEB-INF/jsp/</value>
  </property>
  <property name="suffix">
      <value>.jsp</value>
  </property>
     </bean>
    
     <bean name="/hello.do"
    class="onlyfun.caterpillar.HelloController">
  <property name="viewPage">
      <value>hello</value>
  </property>
     </bean>
 </beans>

     DisPatcherServlet 必须根据一个 HandlerMaPping 对象,决定请求由哪一个 Controller 来处理, DispatcherServlet 默认使用 org.spring-
 framwork .web.servlet.handler . BeanNameUrlHandlerMapping ,也就是根据 Bean 在定义时的”name”属性及使用者请求的 URL ,决定使 用哪一个 controller 实例,例如在这个例子中,请求 / FirstSpringMVC / hello.do 时, DispatcherServlet 根据” hello.do ”名称,决定要 使用 “name”为”hello.do”的 Bean 实例,所以就是将请求交由 HelloController 的实例来处理。

     在 controller 返回 ModelAndView 后, Dispatcherservlet 会交由 ViewResolver 对象来作 View 层的相关解析,因而您需要设置一个 ViewResolver 实例,在这个范例中将以 JSP 作为 View 层技术-InternalResourceViewResolver如果想要在自己所定义的 servlet 类中使用 spring 的容器功能,则也可以使用org·springframework·web·context·ContextLoaderListener contextLoaderListener 默认会读取 applicationContext.xml,您可以指定自己的定义文件,只要在
<context-param>中指定”contextConfigLocation”参数;

 WebApplicationContext 实现了 ApplicationContext 接口,是 Spring 专为 Servlet 的 Web 应用程序设计的ApplicationContext 实现类,在取得 WebApplicationContext 之后,可以利用它来取得 Bean 定义文件中定义的 Bean 实例;
     即web.xml中-
   <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/beans-config.xml</param-value>
   </context-param>     
    <listener>
    <listener-class>
     org.springframework.web.context.ContextLoaderListener
   </listener-class>
   </listener>
  beans-config.xml-
   <?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="dateBean" class="java.util.Date" singleton="false"/>
   </beans>
     4.MultiActionController -如果为每一个请求编写一个 Controller 类,在程序规模增大时,您的 Controller 类将会迅速增加,可以继承 或直接使用MultiActionController类,将数个相关的请求处理集中于同一个对象,而不用每一个请求编写一个控制对象。
     使用MultiActionController,您要配合一个 MethodNameResolver 的实例, MultiActioncontroller 默认使用的 MethodNameResolver 类是
 org . springframework . web . servlet . mvc . multiaction . InternalPathMethodNameResolver ,这个类可以根据所给的网址中,最后请求的
 文件名称来判断执行 Controller中的哪一个方法,例如/test . do 的请求会执行 test ( HttpservletRequest , HttpservletResponse )方法
 。但通常不会使用 InternalPathMethodNameResolver ,因为这就失去了使用 MultiActionController 的一些优点,像是依使用者的请求
 参数来决定所要执行的方法。
  改用->ParameterMethodNameResolver
  mvc-config.xml-
    <bean id="paraMethodResolver"          
    class="org.springframework.web.servlet.mvc.multiaction.ParameterMethodNameResolver">
    <property name="paramName">
     <value>action</value>
    </property>
    <property name="defaultMethodName">
     <value>list</value>
    </property>
    </bean>

   <bean id="bookController" class="onlyfun.caterpillar.BookController">
   <property name="methodNameResolver">  <ref bean="paraMethodResolver"/>  </property>

  也可以将所有相对应的方法专门组织在一个委托(delegate)物件中,而不是撰写在 Controller 类别中,当请求来到时,将
  委托给这个物件来执 行指定的方法,您只要设定 MultiActionController 的"delegate"属性参考至委托物件即可

  或者->PropertiesMethodNameResolver
  <bean id="propMethodResolver" class="org.springframework.web.servlet.mvc.multiaction.PropertiesMethodNameResolver">
   <property name="mappings">
    <props>
     <prop key="/listbook.do">list</prop>
     <prop key="/addbook.do">add</prop>
     <prop key="/deletebook.do">delete</prop>
    </props>
   </property>
  </bean>

分享到:
评论

相关推荐

    Ext Struts2.0 Sprng2.0 Ibatis2.3 例子

    它提供了全面的基础设施支持,包括依赖注入(DI)、面向切面编程(AOP)、数据访问、事务管理、远程调用、MVC框架等。Spring的IoC容器是其核心,它负责管理对象的生命周期和依赖关系,使代码更易于测试和维护。此外...

    Sprng2.5.6+Hibernate3.6+Struts2.3.16的Jar包

    里面有 Sprng2.5.6+Hibernate3.6+Struts2.3.16的Jar包 已经分好类 但是strut2里面只是包含了最基础的Jar包,其他的按需自己+。 里面还有 jstl标签库的jar 和 数据库MySQL的驱动包 详细配置方法: ...

    sprng和struts有什么区别?

    Struts是MVC(Model-View-Controller)架构的典型代表,主要关注Web应用的表示层,而Spring则是一个更加全面的框架,涵盖了业务层、持久层以及其他多种服务。 1. **Struts框架**: - **表示层焦点**:Struts主要...

    spring4.0+mybatis3.2+springMvc+easyui1.3.2

    《整合Spring4.0、MyBatis3.2、SpringMVC与EasyUI1.3.2:构建兼容IE8的权限管理系统》 ...这个技术栈对于开发者来说,既能满足现代Web开发的需求,又能应对老旧环境的挑战,是值得学习和实践的技术组合。

    spring配置 spring配置 spring配置 spring配置 spring配置

    spring配置 spring配置 spring配置 spring配置 spring配置

    Spring+Servlet读取数据库返回JSON数据(源码).zip

    总的来说,这个项目实例提供了学习和理解Spring MVC与Servlet整合,以及如何使用它们从数据库获取数据并以JSON格式返回给客户端的宝贵机会。通过分析和运行源码,开发者可以更深入地掌握这些技术,并将其应用到自己...

    spring+springMVC+mybatis+quartz动态定时任务创建

    在本项目中,Spring作为基础框架,负责管理其他组件的生命周期和配置,以及提供事务管理等服务。 Spring MVC是Spring框架的一部分,专门用于构建Web应用的模型-视图-控制器(MVC)架构。它简化了处理HTTP请求和响应...

    Spring 集成 Kafka的配置文件及代码讲解

    在本文中,我们将深入探讨如何将Spring框架与Apache Kafka集成,以便实现...压缩包中的"Kafka与spring集成的代码"文件应该包含了这些示例的完整实现,供你参考和学习。记得根据实际的Kafka集群配置和业务需求调整代码。

    访问有些网站慢的原因

    ### 访问网站速度慢的原因及其解决方案 #### 一、互联网结构与带宽现状 中国的互联网是由多个运营商共同构建的复杂网络系统。其中,包括中国教育和科研计算机网(CERNET)、中国科技网(CSTNET)、中国网通(宽带...

    Spring5.zip

    Spring运行helloworld所需的三个基础包,分明为com.springsource.org.apache.commons.logging-1.1.1.jar,spring-beans-5.0.2.RELEASE.jar,spring-core-5.0.2.RELEASE.jar

    spring-beans-4.3.xsd

    资源配置Sprng.xml的重要文件 看到网上资源很少 就给大家分享一下

    SpringBoot二维码和条形码生成工具包

    在IT行业中,生成二维码和条形码是常见的数据表示与传输方式,特别是在移动支付、物流追踪、产品标识等领域。SpringBoot作为一个轻量级的Java框架,使得开发人员能够快速构建微服务应用。本资源包专注于在SpringBoot...

    Flex+Blazed+J2EE,特效、树、表格、图片滚动等控件封装,基础教程注释。

    Flex+Blazed+J2EE 框架塔建,基本链接方式模板,封装flex代码,显示mxml与as剥离。flex代码分为3层,组件、控制、显示。包含大量注释,案例,帮助你10分钟理解felx开发,熟悉Flex+Blazed+J2EE框架。...

    SpringCloud消息总线Bus配置中心实现过程解析

    **SpringCloud消息总线Bus配置中心实现过程解析** 在分布式系统中,配置管理是一个重要的环节。SpringCloud提供了配置中心的功能,使得系统中的各个微服务能够共享配置,并且可以在配置发生改变时实时同步更新。...

    j2ee通用权限管理系统

    包含源代码,发布文档和系统说明文档 开发环境:1、struts2+sprng+hibernate+ajax+html 2、 将所有sql写在了配置文件来代替dao层,简化了开发,增加了可维护性。

    通用权限管理系统

    作用: 1、可以将几个系统的权限都由该系统管理(用户只能管理用户所属组内的角色和权限) 2、可以在此系统框架上开发其他业务逻辑 3、struts2+sprng+hibernate+ajax+html+mysql

Global site tag (gtag.js) - Google Analytics