SpringMVC(一)—环境搭建和实现静态资源的访问

本文介绍了SpringMVC的基础环境搭建,包括所需的jar包、web.xml和springmvc.xml配置,以及如何创建控制器。文章还详细讲解了如何访问静态资源和理解SpringMVC的核心组件与工作流程。
摘要由CSDN通过智能技术生成

Spring MVC属于SpringFrameWork的产品,应用在web层(表现层),和struts2一样,都采用MVC架构。

环境搭建

需要导入的jar包

这里写图片描述

web.xml(WEB-INF下)

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
  <display-name>ssm0523</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>

  <!-- springmvc前端控制器 -->
  <servlet>
    <servlet-name>springMvc</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <!-- 在src目录下创建配置文件:springmvc.xml -->
        <param-value>classpath:springmvc.xml</param-value>
    </init-param>
    <!-- 在tomcat启动的时候就加载这个servlet -->
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>springMvc</servlet-name>
    <url-pattern>*.action</url-pattern>
  </servlet-mapping>


<servlet-mapping>
      <servlet-name>default</servlet-name>
      <url-pattern>*.gif</url-pattern>
</servlet-mapping>

<servlet-mapping>
    <servlet-name>default</servlet-name>
     <url-pattern>*.jpg</url-pattern>
</servlet-mapping>

<servlet-mapping>
    <servlet-name>default</servlet-name>
     <url-pattern>*.png</url-pattern>
</servlet-mapping>

<servlet-mapping>
     <servlet-name>default</servlet-name>
     <url-pattern>*.js</url-pattern>
</servlet-mapping>

<servlet-mapping>
      <servlet-name>default</servlet-name>
      <url-pattern>*.html</url-pattern>
</servlet-mapping>

  <!-- 配置Post请求乱码 -->
  <filter>
        <filter-name>CharacterEncodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>utf-8</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>CharacterEncodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

</web-app>

“classpath:springmvc.xml”用于配置spring mvc的配置文件的位置和名称,这里说明会新建一个springmvc.xml的配置文件
springmvc.xml创建在src目录下
servlet-mapping表示拦截的模式,这里拦截.action, .jpg, .png等
最后配置一个filter用于解决post请求的乱码,采用utf-8编码
Springmvc的核心控制器是DispatcherServlet。

springmvc.xml(src目录下)

<?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-4.0.xsd
        http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd">


        <!-- 配置自动扫描的包 -->
        <context:component-scan base-package="com.mq"></context:component-scan>

        <!-- 配置视图解析器 如何把handler 方法返回值解析为实际的物理视图 -->
         <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
            <property name = "prefix" value="/"></property>
            <property name = "suffix" value = ".jsp"></property>
        </bean> 
</beans>

prefix的值是“/”,表示监听范围,这里表示监听WebContent下的所有文件
suffix的值是“.jsp”,表示监听后缀名为.jsp的文件
两个合起来,就是监听WebContent目录下的.jsp文件
base-package表示要扫描的包结构。这里表示扫描com.mq包下的所有文件

只要确定了文件名称,就可以访问该资源了。

创建控制器

@Controller
public class HelloWorld {

    /**
     * RequestMapping表示请求路径的匹配。当页面中访问helloworld时,该方法就会接收到请求。
     * @return 返回资源名称,根据springmvc.xml中的配置,如果能找到对应的资源,则跳转到该资源,这里跳转到success.jsp页面
     */
    @RequestMapping("/helloworld")
    public String hello(){
        //处理请求逻辑
        System.out.println("hello world");
        return "success";
    }
}

@Controller表示该类是一个控制器。这个注解必须有
@RequestMapping表示请求路径的匹配。当页面中访问helloworld时,对应的方法就会接收到请求进行处理。
如果访问http://localhost:8080/mySpringmvc1/helloworld.action,则会跳转到success.jsp。

index.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>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<a href="helloworld.action">hello world</a><br>
</body>
</html>

success.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>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<h4>Success Page</h4>
</body>
</html>

结果截图:
这里写图片描述

窄化映射

@Controller
@RequestMapping("/haha")
public class HelloWorld {

    /**
     * RequestMapping表示请求路径的匹配
     * @return 返回资源名称,根据springmvc.xml中的配置,如果能找到对应的资源,则跳转到该资源,这里跳转到success.jsp页面
     */
    @RequestMapping("/helloworld")
    public String hello(){
        //处理请求逻辑
        System.out.println("hello world");
        return "success";
    }

}

访问路径为:

<a href="haha/helloworld.action">hello world</a><br>

在class上添加@RequestMapping(url)指定通用请求前缀, 限制此类下的所有方法请求url必须以请求前缀开头,通过此方法对url进行分类管理。

访问静态资源

在WebContent目录下创建img子目录,然后放入一张图片。图片名称为xiazai.jpg.
这里写图片描述

控制器
@Controller
@RequestMapping("/haha")
public class HelloWorld {

    /**
     * RequestMapping表示请求路径的匹配
     * @return 返回资源名称,根据springmvc.xml中的配置,如果能找到对应的资源,则跳转到该资源,这里跳转到success.jsp页面
     */
    @RequestMapping("/helloworld")
    public String hello(){
        //处理请求逻辑
        System.out.println("hello world");
        return "success";
    }


    @RequestMapping("/picture")
    public String picture(){
        System.out.println("这是一张图片");
        return "xiazai";
      }
}
修改springmvc.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"
    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-4.0.xsd
        http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd">


        <!-- 配置自动扫描的包 -->
        <context:component-scan base-package="com.mq"></context:component-scan>

        <!-- 配置视图解析器 如何把handler 方法返回值解析为实际的物理视图 -->
        <!--  <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
            <property name = "prefix" value="/"></property>
            <property name = "suffix" value = ".jsp"></property>
        </bean>  -->

         <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
            <property name = "prefix" value="/img/"></property>
            <property name = "suffix" value = ".jpg"></property>
        </bean> 
</beans>
访问路径
<a href="haha/picture.action">这是一幅图片</a><br>
访问后的截图

这里写图片描述

SpringMVC的一些概念

架构流程

1、 用户发送请求至前端控制器DispatcherServlet
2、 DispatcherServlet收到请求调用HandlerMapping处理器映射器。
3、 处理器映射器根据请求url找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet。
4、 DispatcherServlet通过HandlerAdapter处理器适配器调用处理器
5、 执行处理器(Controller,也叫后端控制器)。
6、 Controller执行完成返回ModelAndView
7、 HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet
8、 DispatcherServlet将ModelAndView传给ViewReslover视图解析器
9、 ViewReslover解析后返回具体View
10、 DispatcherServlet对View进行渲染视图(即将模型数据填充至视图中)。
11、 DispatcherServlet响应用户

组件说明

DispatcherServlet:前端控制器
用户请求到达前端控制器,它就相当于mvc模式中的c,dispatcherServlet是整个流程控制的中心,由它调用其它组件处理用户的请求,dispatcherServlet的存在降低了组件之间的耦合性。
HandlerMapping:处理器映射器
HandlerMapping负责根据用户请求找到Handler即处理器,springmvc提供了不同的映射器实现不同的映射方式,例如:配置文件方式,实现接口方式,注解方式等。
Handler:处理器
Handler 是继DispatcherServlet前端控制器的后端控制器,在DispatcherServlet的控制下Handler对具体的用户请求进行处理。
由于Handler涉及到具体的用户业务请求,所以一般情况需要程序员根据业务需求开发Handler。
HandlAdapter:处理器适配器
通过HandlerAdapter对处理器进行执行,这是适配器模式的应用,通过扩展适配器可以对更多类型的处理器进行执行。
View Resolver:视图解析器
View Resolver负责将处理结果生成View视图,View Resolver首先根据逻辑视图名解析成物理视图名即具体的页面地址,再生成View视图对象,最后对View进行渲染将处理结果通过页面展示给用户。
View:视图
springmvc框架提供了很多的View视图类型的支持,包括:jstlView、freemarkerView、pdfView等。我们最常用的视图就是jsp。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值