【Spring MVC学习笔记】1:从一个简易的例子认识Spring MVC

以前学习框架总是用Eclipse,现在都用IDEA了,以后也直接在IDEA上学习框架了。Spring MVC是需要Spring支持的,其实包含在Spring里面,但我们说Spring都是指其AOP和IoC而已。

从IDEA创建Spring和Spring MVC项目

Spring

学习IDEA搭建Spring环境,注意文中创建Spring项目时应当勾选Create empty spring-config.xml,原文没有指出,这样就可以在src目录下看到这个默认配置文件了。

Spring MVC

学习IDEA创建spring MVC项目,这篇博文里博主将lib/目录直接复制到了web/lib/,然后添加了关于这个目录的依赖,其实可以直接剪切掉这个目录,然后F4在library里删除掉已经失效的Spring和Spring MVC路径,添加这个新的lib/目录进去。然后在F4的Modules里面就可以直接使用它了:
这里写图片描述
这样所有的JAR包都混杂在这个目录下,实际上区分不开,要区分的话还是用Maven之类的构建工具。

一个简易的Spring MVC例子

/WEB-INF/web.xml

和前面学S2SH时候一样,Web容器总是会在启动时先加载web.xml中的配置,先<context-param><listener>然后<filter>最终<servlet>的顺序,相同元素会按顺序加载,全部加载完成后才启动项目。

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
    <!--[1]Spring的配置-->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <!--这里指明要装入的Spring配置文件,可以用正则-->
        <param-value>/WEB-INF/applicationContext.xml</param-value>
    </context-param>
    <!--这个监听器用来在Web容器启动时,自动装配前面的Spring配置文件-->
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>


    <!--[2]Spring MVC的配置-->
    <!--DispatcherServlet是统一访问点,用来接收用户请求,然后给其它处理器处理-->
    <servlet>
        <servlet-name>dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <!--load-on-startup表示启动容器时要初始化这个Servlet-->
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <!--这里url-patern设置为/,即将所有请求都交给Spring MVC处理-->
        <!--所有URL请求都将被Spring MVC的DispatcherServlet截获,其中包含动态请求和静态资源请求-->
        <url-pattern>/</url-pattern>
    </servlet-mapping>
</web-app>

这里DTD上的版本4.0会报警告,估计是Tomcat版本不够高,这个以后再说。

/WEB-INF/dispatcher-servlet.xml

这是Spring MVC的配置文件,它的文件名不一定是dispatcher-servlet.xml,这里的dispatcher是来自于前面web.xml中配置Spring MVC的<servlet-name>的值。

<?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"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd">
    <!--Spring会自动去级联扫描base-package指明的包下面的Java文件-->
    <!--如果扫描到有@Component,@Controller,@Service等这些注解的类,则把这些类注册为bean-->
    <context:component-scan base-package="org.test"/>
    <!--在Spring MVC上下文中定义一个org.springframework.web.servlet.resource.DefaultServletHttpRequestHandler-->
    <!--对进入DispatcherServlet的URL进行筛查,如果发现是静态资源的请求,就将该请求转由Web应用服务器默认的Servlet处理-->
    <!--如果不是静态资源的请求,才由DispatcherServlet继续处理-->
    <!--一般Web应用服务器默认的Servlet名称是"default",因此DefaultServletHttpRequestHandler可以找到它-->
    <!--如果不是"default",则需要通过default-servlet-name属性显示指定-->
    <mvc:default-servlet-handler/>
    <!--自动注册DefaultAnnotationHandlerMapping与AnnotationMethodHandlerAdapter这两个bean-->
    <!--即解决了@Controller注解使用的前提配置,另外还提供了一些其它支持-->
    <!--这是一种简写形式,代表了一些默认配置,它们也可以可以手动配置-->
    <mvc:annotation-driven/>
    <!--在Controller返回的时候进行解析视图,可以看下Controller返回的字符串-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="internalResourceViewResolver">
        <!--指明前缀-->
        <property name="prefix" value="/WEB-INF/jsp/"/>
        <!--指明后缀-->
        <property name="suffix" value=".jsp"/>
    </bean>
</beans>

/WEB-INF/jsp/hello.jsp

昨天才知道WEB-INF/目录下的任何文件或子目录都受保护,无法通过浏览器直接访问,但控制器依然可以转发请求到这些页面,所以页面才一直是要放到它下面。有些重要的配置文件亦然。

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Spring MVC</title>
</head>
<body>
<h1>Hello Spring MVCCCCC</h1>
</body>
</html>

这只是一个普通的JSP页面,注意/WEB-INF/jsp/hello.jsp的前缀是/WEB-INF/jsp/,后缀是.jsp,中间是hello。前缀和后缀都是配置在了前面的/WEB-INF/dispatcher-servlet.xml文件下,而中间的内容,也就是标识这个资源的部分则是在后面的控制器中函数的返回值。

src/org/test/HelloWorldController.java

注意这个包org.test在前面的/WEB-INF/dispatcher-servlet.xml文件中有配置,这个类下的Java文件才能被扫描并注册。

package org.test;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

//使用@Controller注解,在对应的方法上,视图解析器可以解析return的jsp/html页面,并跳转到相应页面
@Controller
//@RequestMapping是一个用来处理请求地址映射的注解
//用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径
@RequestMapping("/mvc")
public class HelloWorldController {

    //用于方法上,指明访问什么路径时要调用该方法
    @RequestMapping("/hello")
    public String sayHello() {
        //根据dispatcher-servlet.xml的配置,这个字符串将被解析成视图/WEB-INF/jsp/hello.jsp
        return "hello";
    }
}

注意这里的注解配置和返回值。@RequestMapping实际是Spring MVC对RESTful风格应用的支持。

运行

这里写图片描述

猜你喜欢

转载自blog.csdn.net/shu15121856/article/details/80924277
今日推荐