• S MVC 搭建简单框架


    第一个Spring MVC程序

    这里使用的Spring版本是5.0.4,使用该版本的话,需要jdk8+的版本,即你的jdk版本在8以上。

    第一步:
    创建一个项目,这里我们来创建一个maven的项目,通过maven来帮我们管理相关的jar文件,当然你也可以创建一个web项目,不过这样的话,就需要你手动的去下载Spring MVC相关的jar包了。

    第二步:
    导入相关Jar包,这里使用maven来帮我们管理,下面是pom.xml文件中的内容,目前只是写了一个非常简单的Spring MVC,所以只使用maven导入了spring-webmvc相关的包即可:

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <groupId>com.monkey1024</groupId>
        <artifactId>01-first</artifactId>
        <packaging>war</packaging>
        <version>0.0.1-SNAPSHOT</version>
        <name>01-first Maven Webapp</name>
        <url>http://maven.apache.org</url>
        <dependencies>
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>3.8.1</version>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>javax.servlet</groupId>
                <artifactId>javax.servlet-api</artifactId>
                <version>3.1.0</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-webmvc</artifactId>
                <version>5.0.4.RELEASE</version>
            </dependency>
    
        </dependencies>
        <build>
            <finalName>01-first</finalName>
            <plugins>
                <!-- 编译插件,指定编译用的的jdk版本 -->
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <configuration>
                        <!-- jdk的版本号 -->
                        <source>1.8</source>
                        <target>1.8</target>
                        <encoding>UTF-8</encoding>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    </project>

    第三步:
    注册Spring MVC的中央控制器DispatcherServlet,打开web.xml文件,在里面加入下面内容:

    <!-- 注册spring MVC中央控制器 -->
    <servlet>
        <servlet-name>springMVC</servlet-name>
        <!-- spring MVC中的核心控制器 -->
        <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>
        <url-pattern>*.do</url-pattern>
    </servlet-mapping>

     我们在web.xml文件中配置DispatcherServlet的时候,将url-pattern配置为*.do的方式,其实除了这种方式之外你还可以配置为其他方式(还有哪种方式不重要,重要的是下面这种方式)

    *如果将url-pattern设置为 / 之后,只要是在web.xml文件中找不到匹配的URL,它们的访问请求都将交给DispatcherServlet处理,静态资源:css文件,js文件,图片也会被拦截并交给DispatcherServlet处理。
    该配置方式不会拦截.jsp文件和.jspx文件,因为这个在tomcat中的conf目录里面的web.xml文件中已经添加的相应的处理方式了,他会交给org.apache.jasper.servlet.JspServlet来处理。即我们可以正常访问系统中的jsp文件。
    现在restful风格的URL越来越流行,这种 / 的配置方式使用的也越来越多了。

    在spring mvc中提供了mvc:resources标签用来解决静态资源无法访问的问题,只需要在springmvc.xml的配置文件中添加下面内容即可,这样会交给spring mvc的ResourceHttpRequestHandler类来处理:

    <mvc:resources mapping="/images/**" location="/images/" />
    <mvc:resources mapping="/jsp/**" location="/jsp/" />
    <mvc:resources mapping="/css/**" location="/css/" />
    ... ...

    其中:

    • mapping 表示对该资源的请求。注意,后面是两个星号**。
    • location 表示静态资源所在目录,在我的项目中就在webapp下创建一个images文件夹,我会将所有的图片放到这个文件夹下。

    第四步:
    maven项目中有个src/main/resources目录,在该目录下创建Spring MVC配置文件springmvc.xml,该xml配置文件可以任意命名,需要跟第三步中的init-param中的param-value保持一致即可。

    第五步:

    创建一个类去实现org.springframework.web.servlet.mvc.Controller接口,通常我们称这样的类为Controller,它的作用有些类似之前学习的servlet,或者可以认为在Spring MVC里面,就是使用了Controller来代替了servlet,它提供了比servlet更加丰富的功能。

    package com.monkey1024.controller;
    
    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 HelloSpringMVC implements Controller{
    
        @Override
        public ModelAndView handleRequest(HttpServletRequest arg0, HttpServletResponse arg1) throws Exception {
            ModelAndView mv = new ModelAndView();
            mv.addObject("hello", "hello first spring mvc");
            mv.setViewName("/WEB-INF/jsp/first.jsp");//(使用配置视图解析器后可简写代码)
            return mv;
        }
    }

    配置视图解析器

    在controller中我们在ModelAndView中的setViewName方法里面传入要跳转的jsp的路径和名字,如果有多个controller的话,需要在每个里面都编写路径和jsp的名字,这样的话比较繁琐,这时可以通过使用Spring MVC给我们提供的一个视图解析器来解决这个问题。
    打开springmvc.xml的配置文件,在里面添加一个视图解析器:

    <!-- 视图解释类 -->
    <bean
        class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/jsp/" />
    <!-- prefix表示前缀,即你的jsp所在的路径。 -->
    <!-- suffix表示后缀,即文件的后缀名。 -->
    
    
     <property name="suffix" value=".jsp" /> </bean>

    在springmvc.xml文件中已经配置了文件路径和后缀名了,所以修改为:

    mv.setViewName("first");

    第六步:
    在springmvc.xml配置文件中注册第五步创建的Controller,添加下面内容:

    <bean id="/hello.do" class="com.monkey1024.controller.HelloSpringMVC" />

    在实际开发中,我们会创建很多Controller来满足业务方面的需求,这样就会导致一个问题,需要在springmvc.xml配置文件中配置大量的bean导致该配置文件变的臃肿起来,为了解决这个问题,spring MVC提供了一系列的注解,通过设置注解,可以使springmvc.xml配置文件变的简洁。

    使用注解编写spring MVC程序整体的步骤跟之前的差不多(不要忘记在web.xml文件中添加中央控制器DispatherServlet),只不过有一些地方需要修改,在之前的spring MVC程序中添加下面内容。

    1、注册扫描器
    在配置文件中我们只需要注册一个组件扫描器即可,其中base-package写上你的包名即可,下面这种写法表示会扫描com.monkey1024下的所有包和类,该组件扫描器是spring中的内容,具体内容在spring中。

    <!-- 注册组件扫描器 -->
    <context:component-scan base-package="com.monkey1024.*"/>
    
    <!-- 视图解析器 -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix" value="/jsp/"/>
    <property name="suffix" value=".jsp"/>
    </bean>

    注意:如果在你的springmvc.xml文件中配置了静态资源即使用了

    mvc:resources

    标签的话,那么需要在你的配置文件中配置注解驱动,添加下面内容:

    <mvc:annotation-driven/>

    如果没有添加注解驱动的话,你访问controller的时候会出现404错误。

    2、定义处理器
    在com.monkey1024.controller包下创建一个TestController类:

    package com.monkey1024.controller;
    
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.servlet.ModelAndView;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    @Controller()
    
    public class TestController {
    
        @RequestMapping("/test/test1.do")
        public ModelAndView test1(HttpServletRequest request, HttpServletResponse response) throws Exception{
    
            ModelAndView mv = new ModelAndView();
            mv.addObject("hello", "test1");
            mv.setViewName("test1");
            return mv;
        }
    
    
        @RequestMapping({"test/test2.do", "test/hello.do"})
        public ModelAndView test2(HttpServletRequest request, HttpServletResponse response) throws Exception{
    
            ModelAndView mv = new ModelAndView();
            mv.addObject("hello", "test2");
            mv.setViewName("test2");
            return mv;
        }
    
    }

    这里jsp的创建就省略了,启动tomcat,spring MVC会根据你输入的url来调用相应的方法。

    处理器中的注解

    在上面的示例中,我们创建了一个TestController类,这类没有实现任何接口,只是在类名和方法上添加了两个注解:

    • @Controller:表示当前类为一个Controller
    • @RequestMapping:表示当前方法为Controller中的方法,该方法要对 value 属性所指定的 URL进行处理与响应,被注解的方法的名称是可以随意命名的。当有多个请求可以匹配该方法时,可以写上一个String类型的数组,如上示例中的test2方法。
      @RequestMapping注解还可以定义在类上面,在上面的示例中,test1方法和test2方法中的url路径中都包含了/test,此时我们把这些相同的url抽取出来,放到类上的注解@RequestMapping中,此时可以称之为命名空间。
    package com.monkey1024.controller;
    
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.servlet.ModelAndView;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    @Controller()
    @RequestMapping("/test")//类名上的注解,命名空间namespace
    public class TestController02 {
    
        @RequestMapping("/test1.do")
        public ModelAndView test1(HttpServletRequest request, HttpServletResponse response) throws Exception{
    
            ModelAndView mv = new ModelAndView();
            mv.addObject("hello", "test1");
            mv.setViewName("test1");
            return mv;
        }
    
    
        @RequestMapping({"/test2.do", "/hello.do"})
        public ModelAndView test2(HttpServletRequest request, HttpServletResponse response) throws Exception{
    
            ModelAndView mv = new ModelAndView();
            mv.addObject("hello", "test2");
            mv.setViewName("test2");
            return mv;
        }
    
    }

    RequestMapping中常用的属性

    通配符 @RequestMapping("/test*.do")

    请求的提交方式 @RequestMapping(value="/test.do",method = RequestMethod.POST)

    请求中携带的参数 @RequestMapping(value="/test.do" , params={"name" , "age"})

    详情请参考原文链接.

     第七步:
    在WEB-INF目录中创建一个目录jsp,在这个jsp目录下创建一个first.jsp的文件。

    <%@ page language="java" contentType="text/html; charset=utf-8"
        pageEncoding="utf-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <title>Insert title here</title>
    </head>
    <body>
    ${hello}
    </body>
    </html>

     第八步:

    启动tomcat,然后在浏览器地址栏中输入:http://localhost:8080/01-first/hello.do
    如果你看到网页中显示hello first spring mvc,那就说明第一个Spring MVC程序编写成功啦。

  • 相关阅读:
    AVCODEC_MAX_AUDIO_FRAME_SIZE 未定义标识符
    ffmpeg -使用总结
    ubuntu 编译安装ffmpeg
    转-查看Linux CPU个数,核心,线程数
    fpga是什么
    div自适应水平垂直居中的方法
    css百分比问题——`top`、`left`、'translate'的百分比参照谁?
    经典面试题:二分查找/折半查找
    JavaScript预解析
    React--组件
  • 原文地址:https://www.cnblogs.com/lucky1024/p/11118875.html
Copyright © 2020-2023  润新知