zoukankan      html  css  js  c++  java
  • 06SpringMVC入门

    SpringMVC

    SpringMVC是一种基于Java的实现MVC设计模式的请求驱动类型的轻量级web框架,属于SpringFrameWork的后续产品,已经融合在Spring Web Flow中。Spring3.0已经优于Struts2,通过一套注解,让一个类处理请求的控制器,而无需实现任何servlet接口。同时还支持RESTful编程风格的请求。

    快速入门

    servlet编写麻烦,可以分为两部分,共有和特有代码,共有代码可以使用springMVC的前端控制器代替,特有代码编写POJO。所以,springMVC开发步骤

    1. 导入坐标(spring-webmvc)

    2. 配置servlet(共有代码,SpringMVC核心控制器DispathcerServlet)

    3. 编写Controller类(POJO)和视图View(jsp页面)

    4. 将Controller使用注解配置到Spring容器中(@Component, @Controller)

    5. 配置spring-mvc.xml配置文件(填写组件扫描)

    6. 客户端发起请求进行测试

    具体代码:

    1. 导入spring-webmvc spring-context坐标、tomcat插件

      <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>5.0.2.RELEASE</version>
      </dependency>
      <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>5.0.2.RELEASE</version>
      </dependency>
      
      <plugin>
        <groupId>org.apache.tomcat.maven</groupId>
        <artifactId>tomcat7-maven-plugin</artifactId>
        <version>2.2</version>
        <configuration>
          <port>8080</port>
          <uriEncoding>UTF-8</uriEncoding>
        </configuration>
      </plugin>
      
    2. 在web.xml中配置springMVC前端控制器DispathcerServlet

      <!--  配置springMVC前端控制器-->
        <servlet>
          <servlet-name>DispatcherServlet</servlet-name>
          <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
      <!--    第5步时的代码:加载配置文件-->
          <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:spring-mvc.xml</param-value>
          </init-param>
      <!--    服务器启动时加载-->
          <load-on-startup>1</load-on-startup>
        </servlet>
        
        <servlet-mapping>
          <servlet-name>DispatcherServlet</servlet-name>
          <!--所有资源都经过这里-->
          <url-pattern>/</url-pattern>
        </servlet-mapping>
      
    3. 编写Controller和视图(sucess.jsp 略)

      @Controller
      public class UserController {
          @RequestMapping("/test")
          public String save() {
              System.out.println("userController");
              return "success.jsp";
          }
      }
      
    4. 给Controller添加注解(其中RequesMapping表示业务方法的映射地址)

    5. 新建spring-mvc.xml配置文件,添加组件扫描(并将配置文件在web.xml中配置启动时加载)

      <?xml version="1.0" encoding="UTF-8"?>
      <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"
             xsi:schemaLocation="http://www.springframework.org/schema/beans
              https://www.springframework.org/schema/beans/spring-beans.xsd
              http://www.springframework.org/schema/context
              https://www.springframework.org/schema/context/spring-context.xsd" >
      <!--    Controller组件扫描-->
          <context:component-scan base-package="com.controller"/>
      </beans> 
      
    6. 启动服务器,并用浏览器访问测试tomcat7:run

    注解解析

    @RequestMapping("xxx")

    作用:注解在类或方法上,用于建立请求URL和业务Controller之间的对象关系。

    参数:

    • value:请求路径,一个参数时默认
    • method:请求方式,默认GET
    • params:指定限定请求参数。如params={"username"},请求时必须有username参数

    配置文件

    Controller中返回的地址包含默认的前缀:

    • 默认前缀是forward: 转发(地址不改变)
    • 也可以改成redirect: 重定向(地址改变)

    还可以自定义内部资源解析器,如下。这样Controller在返回时,不用写复杂的路径。(但是不能重定向)

    <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/jsp"/>
        <property name="suffix" value=".jsp"/>
    </bean>
    

    组件解析

    SpringMVC的相关组件:

    • 前端控制器:DispatcherServlet, 调用其他组件
    • 处理器映射器:HandlerMapping, 地址解析,上面前后缀等就是它处理的。
    • 处理器适配器:HandlerAdapter, 调用处理器
    • 处理器:Handler, 可以理解为我们定义的Controller, 最后返回ModelAndView
    • 视图解析器:ViewResolver, 解析View
    • 视图:View
  • 相关阅读:
    js处理json数据,java处理json数据
    sqlmap中##和$$的区别
    tar.gz和bin,以及rpm,deb等linux后缀的文件的区别
    ibatis内置类型
    1099端口被占问题
    动态代理与静态代理的区别
    条款36:绝不重新定义继承而来的non-virtual函数(Never redefine an inherited non-virtual function)
    条款35:考虑virtual函数以外的其他选择(Consider alternative to virtual functions)
    条款34:区分接口继承和实现继承(Different between inheritance of interface and inheritance of implemenation)
    工作好习惯(18之后)
  • 原文地址:https://www.cnblogs.com/mingriyingying/p/13639530.html
Copyright © 2011-2022 走看看