SpringMVC之web.xml,了解必要配置项

简介: 版权声明:欢迎转载,请注明沉默王二原创。 https://blog.csdn.net/qing_gee/article/details/50965562 现代Web应用程序广泛使用MVC(model、view、controller)模式,那么SpringMVC就恰好可以轻松帮我们搭建一个Web开发环境。
版权声明:欢迎转载,请注明沉默王二原创。 https://blog.csdn.net/qing_gee/article/details/50965562

现代Web应用程序广泛使用MVC(model、view、controller)模式,那么SpringMVC就恰好可以轻松帮我们搭建一个Web开发环境。而要搭好开发环境,熟知SpringMVC的三个XML(web.xml、application-context.xml、context-dispatcher.xml)就显得必不可少。而我呢,虽然前前后后左左右右也大见过三次Web框架,但每次都纠结的要了老命,那么痛定思痛,我决定下功夫把三个XML给搞得有条理些。

不过呢,作为一个软件开发的全栈工程师(自黑不是自夸,身为创业团队的负责人,打杂工的角色我就只能勉为其难),对于三个XML的见解只停留在认知的层面,整篇文章的叙述难免有不专业的地方,各位光临的朋友尽管指摘,我将虚心接受。

本篇先来介绍web.xml,了解其中必要的配置项,为以后顺利开发打下坚实基础。

①、xml内容

<?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>ymeng</display-name>

    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:application-context.xml</param-value>
    </context-param>

    <!-- set character encoding spring -->
    <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>
        <init-param>
            <param-name>forceEncoding</param-name>
            <param-value>true</param-value>
        </init-param>
    </filter>

    <filter-mapping>
        <filter-name>characterEncodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    <filter>
        <filter-name>sessionValidate</filter-name>
        <filter-class>
            com.honzh.common.filter.SessionValidateFilter
        </filter-class>
        <init-param>
            <param-name>uri</param-name>
            <param-value>/deal/</param-value>
        </init-param>
        <init-param>
            <param-name>loginUrl</param-name>
            <param-value>/login</param-value>
        </init-param>
        <init-param>
            <param-name>backToUrl</param-name>
            <param-value>/</param-value>
        </init-param>
        <init-param>
            <param-name>debug</param-name>
            <param-value>true</param-value>
        </init-param>
    </filter>
    <!-- 把需要进行check登陆的请求放到此处 -->
    <filter-mapping>
        <filter-name>sessionValidate</filter-name>
        <url-pattern>/deal/*</url-pattern>
    </filter-mapping>

    <listener>
        <listener-class>
            org.springframework.web.context.ContextLoaderListener
        </listener-class>
    </listener>

    <servlet>
        <servlet-name>web-app</servlet-name>
        <servlet-class>
            org.springframework.web.servlet.DispatcherServlet
        </servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:context-dispatcher.xml</param-value>
        </init-param>
        <!-- 使系统在启动时装在servlet而不是第一个servlet被访问 -->
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>web-app</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

    <!-- 配置session过期时间120分钟 -->
    <session-config>  
        <session-timeout>120</session-timeout>  
    </session-config>

    <error-page>
        <error-code>404</error-code>
        <location>/404.jsp</location>
    </error-page>
</web-app>

②、重点内容介绍

1、contextConfigLocation

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:application-context.xml</param-value>
</context-param>

<listener>
    <listener-class>
        org.springframework.web.context.ContextLoaderListener
    </listener-class>
</listener>
  1. 指定web项目从项目的src路径下加载application-context.xml,这是springMVC所必不可少的配置项,classpath前缀指定xml的路径在src下,这是我所喜爱的方式。
  2. 通过ContextLoaderListener自动装配ApplicationContext的配置信息,这里可以参照Spring中的ContextLoaderListener使用

2、characterEncodingFilter

关于字符集过滤器,就无需多言,从xml配置上就可以看得出来,其作用就是为了防止乱码,当然最开始在接触struts2的时候,被中文乱码困扰的心里都有了挫败感,但springMVC轻轻松松搞定了这个烦恼。

配置的方式基本固定如下:

<!-- set character encoding spring -->
<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>
    <init-param>
        <param-name>forceEncoding</param-name>
        <param-value>true</param-value>
    </init-param>
</filter>

<filter-mapping>
    <filter-name>characterEncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

当然了,如果你还有更多的兴趣,可以参照
Spring字符集过滤器CharacterEncodingFilter

3、sessionValidate

sessionValidate的过滤器对于我的项目来说就很关键了,其主要作用就是为了在页面跳转时检查session有没有失效(包含超时、未登陆),然后呢,如果验证失败,可以跳转到首页登陆,登陆完成呢,又可以回到原始的页面(如下图所示,点击我的资源,系统发现我没有登陆,那么弹出登陆窗口,当我登陆完成后,显示我的资源页面)。

这里写图片描述

<filter>
    <filter-name>sessionValidate</filter-name>
    <filter-class>
        com.honzh.common.filter.SessionValidateFilter
    </filter-class>
    <init-param>
        <param-name>uri</param-name>
        <param-value>/deal/</param-value>
    </init-param>
    <init-param>
        <param-name>loginUrl</param-name>
        <param-value>/login</param-value>
    </init-param>
    <init-param>
        <param-name>backToUrl</param-name>
        <param-value>/</param-value>
    </init-param>
    <init-param>
        <param-name>debug</param-name>
        <param-value>true</param-value>
    </init-param>
</filter>
<!-- 把需要进行check登陆的请求放到此处 -->
<filter-mapping>
    <filter-name>sessionValidate</filter-name>
    <url-pattern>/deal/*</url-pattern>
</filter-mapping>

这个配置我稍候会用一整篇的文章来介绍,所以这里只做一个引导。

4、DispatcherServlet

DispatcherServlet是springMVC自带的一个开箱即用的调度员,这个调度员就和context-dispatcher.xml联系起来了。

<servlet>
    <servlet-name>web-app</servlet-name>
    <servlet-class>
        org.springframework.web.servlet.DispatcherServlet
    </servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:context-dispatcher.xml</param-value>
    </init-param>
    <!-- 使系统在启动时装在servlet而不是第一个servlet被访问 -->
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>web-app</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>
  1. load-on-startup参数,按照《SpringMVC学习指南》所说的意思是:“如果它存在,则它将在应用程序启动时状态servlet并调用它的init方法,若不存在,则在该servlet的第一个请求时被加载”。这里我就不多做深究了,说白了,就是我还深究不到什么玩意。
  2. url-pattern参数,这里我使用了”/”。按照《Spring实战》所说,url-pattern的匹配模式通常有“*.html”、“/*”等等,而他们各有各的弊端,而“/”模式声明它会作为默认的servlet并且会处理所有的请求,包括静态资源(关于静态资源,在稍候讲context-dispatcher.xml会详细说明)
  1. *.html 只能响应html格式的请求。
  2. /*模式表示没有映射特定类型的响应,这会在处理图片或者样式css时带来不必要的麻烦。

5、session-timeout

<!-- 配置session过期时间120分钟 -->
<session-config>  
  <session-timeout>120</session-timeout>  
</session-config>

session-timeout就不做详细说明了,很直白,多说无益。有兴趣的话可以继续了解Java Web开发Session超时设置

6、404

<error-page>
    <error-code>404</error-code>
    <location>/404.jsp</location>
</error-page>

通过该配置,当服务端出现404错误时就会跳转到404.jsp页面。

那么首先,我们来看一下普通的404页面写法。

<%@ page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"%><%@ include file="/components/common/taglib.jsp"%>
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv='Refresh' content='3;URL=${ctx}/'>
<title>404 错误</title>
</head>

<body>
<p>此页面正在开发中...</p>
<p>系统将在 <span style="color:red;">3</span> 秒后跳转到首页,或者直接点击 <a href="javascript:history.back()">返回</a></p>
</body>
</html>

当出现404时,首先提示用户页面访问不到,然后手动跳转到首页或者3秒后跳转到首页。

相关文章
|
前端开发 Java 开发者
Spring MVC:构建高效、可维护、可扩展的Web应用程序
Spring MVC:构建高效、可维护、可扩展的Web应用程序
156 0
|
前端开发 Java 测试技术
Java一分钟之Spring MVC:构建Web应用
【5月更文挑战第15天】Spring MVC是Spring框架的Web应用模块,基于MVC模式实现业务、数据和UI解耦。常见问题包括:配置DispatcherServlet、Controller映射错误、视图解析未设置、Model数据传递遗漏、异常处理未配置、依赖注入缺失和忽视单元测试。解决这些问题可提升代码质量和应用性能。注意配置`web.xml`、`@RequestMapping`、`ViewResolver`、`Model`、`@ExceptionHandler`、`@Autowired`,并编写测试用例。
524 3
|
XML Java 应用服务中间件
springMVC01,springMVC的执行流程【第一个springMVC例子(XML配置版本):HelloWorld】
通过一个HelloWorld实例,介绍了SpringMVC的基本概念、执行流程,并详细讲解了如何创建和配置第一个SpringMVC项目(基于XML)。
springMVC01,springMVC的执行流程【第一个springMVC例子(XML配置版本):HelloWorld】
|
设计模式 存储 前端开发
介绍Spring MVC框架,以及如何使用它构建Web应用程序。
Spring MVC 是一个用于构建 Java Web 应用程序的强大框架。它基于经典的 MVC(Model-View-Controller)设计模式,提供了一种结构化的方法来开发可维护和可扩展的 Web 应用程序。在这篇文章中,我们将深入介绍 Spring MVC 框架,包括其核心概念、工作原理以及如何使用它构建 Web 应用程序。
498 0
|
前端开发 安全 Java
技术进阶:使用Spring MVC构建适应未来的响应式Web应用
【9月更文挑战第2天】随着移动设备的普及,响应式设计至关重要。Spring MVC作为强大的Java Web框架,助力开发者创建适应多屏的应用。本文推荐使用Thymeleaf整合视图,通过简洁的HTML代码提高前端灵活性;采用`@ResponseBody`与`Callable`实现异步处理,优化应用响应速度;运用`@ControllerAdvice`统一异常管理,保持代码整洁;借助Jackson简化JSON处理;利用Spring Security增强安全性;并强调测试的重要性。遵循这些实践,将大幅提升开发效率和应用质量。
248 7
|
安全 前端开发 Java
挑战5分钟内基于Springboot+SpringMVC+Mybatis-plus快速构建web后端三层架构
挑战5分钟内基于Springboot+SpringMVC+Mybatis-plus快速构建web后端三层架构
331 1
|
Java 开发者 前端开发
Struts 2、Spring MVC、Play Framework 上演巅峰之战,Web 开发的未来何去何从?
【8月更文挑战第31天】在Web应用开发中,Struts 2框架因强大功能和灵活配置备受青睐,但开发者常遇配置错误、类型转换失败、标签属性设置不当及异常处理等问题。本文通过实例解析常见难题与解决方案,如配置文件中遗漏`result`元素致页面跳转失败、日期格式不匹配需自定义转换器、`&lt;s:checkbox&gt;`标签缺少`label`属性致显示不全及Action中未捕获异常影响用户体验等,助您有效应对挑战。
295 0
|
Java 前端开发 Apache
Apache Wicket与Spring MVC等Java Web框架大PK,究竟谁才是你的最佳拍档?点击揭秘!
【8月更文挑战第31天】在Java Web开发领域,众多框架各具特色。Apache Wicket以组件化开发和易用性脱颖而出,提高了代码的可维护性和可读性。相比之下,Spring MVC拥有强大的生态系统,但学习曲线较陡;JSF与Java EE紧密集成,但在性能和灵活性上略逊一筹;Struts2虽成熟,但在RESTful API支持上不足。选择框架时还需考虑社区支持和文档完善程度。希望本文能帮助开发者找到最适合自己的框架。
307 0
|
XML Java 数据格式
SpringMVC的XML配置解析-spring18
SpringMVC的XML配置解析-spring18
|
JSON 前端开发 Java
Spring MVC响应结合RESTful风格开发,打造具有强大功能和良好体验的Web应用!
Spring MVC响应结合RESTful风格开发,打造具有强大功能和良好体验的Web应用!