当前位置: 首页 > 编程日记 > 正文

Spring MVC配置

为什么80%的码农都做不了架构师?>>>   hot3.png

一、传统方式配置Spring MVC

(1)导入jar包

需要导入如下的jar包

junit-3.8.1.jar
        spring-core-3.0.5.RELEASE.jar
        commons-logging-1.1.1.jar
        spring-context-3.0.5.RELEASE.jar
        spring-expression-3.0.5.RELEASE.jar
        spring-context-support-3.0.5.RELEASE.jar
        spring-aop-3.0.5.RELEASE.jar
        aopalliance-1.0.jar
        spring-tx-3.0.5.RELEASE.jar
        spring-asm-3.0.5.RELEASE.jar
        spring-beans-3.0.5.RELEASE.jar
        spring-web-3.0.5.RELEASE.jar
        spring-webmvc-3.0.5.RELEASE.jar
        jstl-1.2.jar
        servlet-api-2.5.jar
        jsp-api-2.1.jar

(2)配置web.xml

web.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" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"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>Spring3mvc</display-name><!-- 添加spring3控制器及映射规则 --><servlet><servlet-name>springMVC</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>springMVC</servlet-name><url-pattern>/</url-pattern></servlet-mapping><!-- 指定Spring Bean的配置文件所在目录。默认配置在WEB-INF目录下 --><context-param><param-name>contextConfigLocation</param-name><param-value>/WEB-INF/applicationContext.xml</param-value></context-param><!-- 默认跳转到根目录下的页面,在这里为index.jsp --><welcome-file-list><welcome-file>index.jsp</welcome-file></welcome-file-list>
</web-app>

配置介绍:

    1. 关于<servlet-name>springMVC</servlet-name>

      此项配置用于配置对应的Servlet的配置文件的名称,具体规则为“servlet-name的标签值-servlet.xml”,如本示例会对应一个“springMVC-servlet.xml”的配置文件。

      如果想打破这种默认约定,可以参照如代码段进行配置:

      <!-- 添加spring3控制器及映射规则 -->
      <servlet>
        <servlet-name>springMVC</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

      <init-param>
                  <param-name>contextConfigLocation</param-name>
                  <param-value>classpath:springservlet-config.xml</param-value>
      </init-param>
       <load-on-startup>1</load-on-startup>
      </servlet>

      其中,“classpath:”代表根路径是类路径。

    2. 关于<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

      此项配置用于配置前置控制器,默认由前置控制器接收所有的请求,然后调用相应的Controller和Action,解析和渲染指定的视图并返回相应。

    3. 关于<load-on-startup>1</load-on-startup>

      此项配置用于配置启动顺序,正常的取值范围是:负整数、0-5。

      当为正数时,数值越小,优先级越高。

      1代表让这个Servlet随Servletp容器一起启动。

    4. 关于<url-pattern>/</url-pattern>

      此项配置用于配置servlet路径请求映射。

      “/”:代表servlet路径是请求URL去掉context路径,且路径信息为null。

      “/xxx”:代表以“/xxx结尾的路径映射”。

      “*.xxx”:代表以“xxx”结尾的扩展名映射。如*.do、*.jsp、*.html。如果配置为多项,可以用英文逗号隔开。

      “”:用于指定精确映射应用程序contextroot的URL模式。如:http://ip:port/contextroot/

    5. <param-value>/WEB-INF/applicationContext.xml</param-value>

      applicationContext.xml是spring的配置文件,常用“applicationContext+名称.xml”的方式来进行命名。

      此项配置用于配置applicationContext.xml的路径。

    6. 关于存放路径的问题

      常见的存放路径有两个,一个是类路径,一个是WEB-INF目录下。

      类路径的示例:<param-value>classpath:springservlet-config.xml</param-value>

      WEB-INF路径示例:<param-value>/WEB-INF/springservlet-config.xml</param-value>

在有些情况下,xml文件默认是存放在WEB-INF中,所以在配置中可以省略"/WEB-INF/"。

(3)配置springMVC-servlet.xml

spring-servlet.xml这个名字是因为上面web.xml中<servlet-name>标签配的值为spring

<servlet-name>spring</servlet-name>

命名规则为:<servlet-name>的标签值-servlet.xml

如果改为如下:

<servlet-name>springmvc</servlet-name>

则对应的文件名则为springmvc-servlet.xml。

spring-servlet.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:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context"xmlns:util="http://www.springframework.org/schema/util"xmlns:mvc="http://www.springframework.org/schema/mvc"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/utilhttp://www.springframework.org/schema/util/spring-util.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsdhttp://www.springframework.org/schema/mvchttp://www.springframework.org/schema/mvc/spring-mvc.xsd" ><!-- 默认的注解映射的支持 -->  <mvc:annotation-driven/><!-- 静态资源映射 --><mvc:resources mapping="/js/**" location="/WEB-INF/js/" /><mvc:resources mapping="/css/**" location="/WEB-INF/css/" /><mvc:resources mapping="/fonts/**" location="/WEB-INF/fonts/" /><mvc:resources mapping="/plugins/**" location="/WEB-INF/plugins/" /><mvc:resources mapping="images/**" location="/WEB-INF/images/" /><!-- 当上面要访问的静态资源不包括在上面的配置中时,则根据此配置来访问 --><mvc:default-servlet-handler/><!-- 开启controller注解支持 --><!-- use-default-filters="false" 只扫描指定的注解 --><context:component-scan base-package="com.uni2uni.action" use-default-filters="false"><context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/></context:component-scan><!-- 视图解析器 --><bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/><property name="contentType" value="text/html"/>        <property name="prefix" value="/WEB-INF/views/"/><property name="suffix" value=".jsp"/></bean></beans>

配置介绍:

a.关于<mvc:annotation-driven/>

此项配置用于开启默认注解的支持。它等效于如下配置:

<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/>
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/>

b.关于配置静态资源映射

<mvc:default-servlet-handler/>这行代码用于配置静态资源映射,它等效于如下配置:

<mvc:resources mapping="/images/**" location="/images/" cache-period="31556926"/>  
<mvc:resources mapping="/js/**" location="/js/" cache-period="31556926"/>  
<mvc:resources mapping="/css/**" location="/css/" cache-period="31556926"/>

当实际项目中有新增的配置时,就需要根据实际情况进行扩展了。

c.关于配置注解扫描

<context:component-scan></context:component-scan>用于配置扫描指定包中类中声明的注解。

配置注解扫描的配置方式如下所示:

<context:component-scan base-package="要扫描的包的包名" ></context:component-scan>

常用的注解有:

      1. @Controller

        声明Action组件

      2. @Service

        声明Service组件

      3. @Repository

        声明Dao组件

      4. @Component 

        泛指组件。

      5. @RequestMapping("/menu") 

        请求映射

      6. @Resource 

        用于注入,( j2ee提供的 ) 默认按名称装配,@Resource(name="beanName") 

      7. @Autowired

        用于自动化注入,(srping提供的) 默认按类型装配 

      8. @Transactional( rollbackFor={Exception.class})

        事务管理

      9. @ResponseBody

        将HTTP请求正文转换为适合的HttpMessageConverter对象。

      10. @Scope("prototype") 

        设定bean的作用域

如果是多个包名,可以用英文逗号隔开;

可以用*来进行包名的匹配,如com.uni2uni.*;

本例中“use-default-filters”属性默认为true。此时,会扫描指定包下所有的@Component类,并注册成bean。

当不需要扫描这么大粒度的包时,可以将此属性设置为false,并使用<context:exclude-filter>和<context:include-filter>标签指定要排除的或包括的类型。

use-default-filters="false"的情况下,<context:exclude-filter>指定的不扫描,<context:include-filter>指定的扫描。

d.关于配置视图解析

在本例中,设定视图的路径为”WEB-INF/views“,视图文件的后缀名为”.jsp“。

关于配置视图解析及使用了解即可,后续会详细介绍。

二、Maven方式配置Spring MVC

(1)在Maven项目中配置Spring mvc

pom.xml完整代码如下所示:

<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.uni2uni.myapp</groupId><artifactId>testspring</artifactId><packaging>war</packaging><version>0.0.1-SNAPSHOT</version><name>testspring 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>org.springframework</groupId><artifactId>spring-core</artifactId><version>3.0.5.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>3.0.5.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context-support</artifactId><version>3.0.5.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-aop</artifactId><version>3.0.5.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-tx</artifactId><version>3.0.5.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-asm</artifactId><version>3.0.5.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-beans</artifactId><version>3.0.5.RELEASE</version></dependency><!-- end spring 核心依赖包 --><!-- start spring mvc --><dependency><groupId>org.springframework</groupId><artifactId>spring-web</artifactId><version>3.0.5.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>3.0.5.RELEASE</version></dependency><dependency><groupId>javax.servlet</groupId><artifactId>jstl</artifactId><version>1.2</version></dependency><!-- START SERVLET --><dependency><groupId>javax.servlet</groupId><artifactId>servlet-api</artifactId><version>2.5</version><scope>provided</scope></dependency><dependency><groupId>javax.servlet.jsp</groupId><artifactId>jsp-api</artifactId><version>2.1</version><scope>provided</scope></dependency></dependencies><build><finalName>testspring</finalName></build>
</project>

三、知识扩展

(1)重要的接口和类介绍

DispatcherServlet:前置控制器,默认会接收全部请求。

HandlerMapping接口:用于处理请求的映射。

DefaultAnnotationHandlerMapping:HandlerMapping接口的实现,用于把一个URL映射到具体的Controller类上。

HandlerAdapter接口:用于处理请求到Action的映射。

AnnotationMethodHandlerAdapter:HandlerAdapter接口的适配器,用于把一个URL请求映射到对应Controller类的Action上。

ViewResolver接口:用于解析View。

InternalResourceViewResolver:ViewResolver接口的实现,用于把ModelAndView的逻辑视图名解析为具体的View。

(2)Spring MVC的处理流程

172125_7mqh_119360.jpg

转载于:https://my.oschina.net/wlb/blog/286377

相关文章:

主成分分析(PCA)Python代码实现

主成分分析(Principal Components Analysis, PCA)简介可以参考&#xff1a; http://blog.csdn.net/fengbingchun/article/details/78977202 这里是参照 http://sebastianraschka.com/Articles/2014_pca_step_by_step.html 文章中的code整理的Python代码&#xff0c;实现过程为…

AI发展这一年:不断衍生的技术丑闻与抵制声潮

作者 | AI Now学院译者 | Raku编辑 | Jane出品 | AI科技大本营&#xff08;ID: rgznai100&#xff09;【导读】10月2日&#xff0c;纽约大学AI Now学院在纽约大学斯克博剧院&#xff08;Skirball Theatre&#xff09;组织召开了第四届年度AI Now研讨会。研讨会邀请了业内组织者…

Distributed Configuration Management Platform(分布式配置管理平台)

2019独角兽企业重金招聘Python工程师标准>>> 专注于各种 分布式系统配置管理 的通用组件/通用平台, 提供统一的配置管理服务。 主要目标&#xff1a; 部署极其简单&#xff1a;同一个上线包&#xff0c;无须改动配置&#xff0c;即可在 多个环境中(RD/QA/PRODUCTION…

如何利用zendstudio新建 或导入php项目

为什么80%的码农都做不了架构师&#xff1f;>>> 一、利用ZendStudio创建 PHP Project 1. 打开ZendStudio, 选择&#xff1a;File &agrave; New &agrave; PHP Project, 如下图所示: 于是弹出如下界面&#xff1a; 在”Project name”后输入工程名(比如我这里…

一文读懂GoogLeNet神经网络 | CSDN博文精选

作者 | .NY&XX来源 | CSDN博客本文介绍的是著名的网络结构GoogLeNet&#xff0c;目的是试图领会其中结构设计思想。GoogLeNet特点优化网络质量的生物学原理GoogLeNet网络结构的动机GoogLeNet架构细节Inception模块和普通卷积结构的差异辅助分类器GoogLeNet网络架构GoogLeNe…

C++中的函数签名

C中的函数签名(function signature)&#xff1a;包含了一个函数的信息&#xff0c;包括函数名、参数类型、参数个数、顺序以及它所在的类和命名空间。普通函数签名并不包含函数返回值部分&#xff0c;如果两个函数仅仅只有函数返回值不同&#xff0c;那么系统是无法区分这两个函…

MyEclipse断点调试

2019独角兽企业重金招聘Python工程师标准>>> 1、在编辑的程序的左边&#xff0c;你会看到一条浅浅的灰色编带&#xff0c;在这里设置断点。 2、设置断点的方法有很多 方法&#xff1a;1&#xff09;、双击 &#xff1b; 2&#xff09;、右键&#xff0c;选择“Toggl…

C primer plus 练习题 第三章

5. 1 #include <stdio.h>2 3 int main()4 {5 float you_sec;6 printf("请输入你的年龄:");7 scanf("%f", &you_sec);8 printf("年龄合计:%e 秒!\n", you_sec * 3.156e7);9 getchar(); 10 return 0; 11 }

Echache整合Spring缓存实例讲解

2019独角兽企业重金招聘Python工程师标准>>> 摘要&#xff1a;本文主要介绍了EhCache&#xff0c;并通过整合Spring给出了一个使用实例。 一、EhCache 介绍 EhCache 是一个纯Java的进程内缓存框架&#xff0c;具有快速、精干等特点&#xff0c;是Hibernate中默认的C…

灰度图像直方图均衡化公式及实现

图像的直方图&#xff1a;直方图是图像中像素强度分布的图形表达方式。它统计了每一个强度值所具有的像素个数。直方图均衡化&#xff1a;是通过拉伸像素强度分布范围来增强图像对比度的一种方法。是图像处理领域中利用图像直方图对对比度进行调整的方法。均衡化指的是把一个分…

超越最新无监督域自适应方法,研究人员提轻量CNN新架构OSNet

作者 | Kaiyang Zhou, Xiatian Zhu, Yongxin Yang, Andrea Cavallaro, and Tao Xiang 译者 | TroyChang 编辑 | Jane 出品 | AI科技大本营&#xff08;ID&#xff1a;rgznai100&#xff09; CNN新架构OSNet 【导读】今天推荐论文《Learning Generalisable Omni-Scale Repre…

在一台机器上搭建多个redis实例

2019独角兽企业重金招聘Python工程师标准>>> 默认Redis程序安装在/usr/local/redis目录下&#xff1b; 配置文件&#xff1a;/usr/local/redis/redis.conf&#xff0c;该配置文件中配置的端口为默认端口&#xff1a;6379&#xff1b; Redis的启动命令路径&#xff1…

使用kaptcha生成验证码

2019独角兽企业重金招聘Python工程师标准>>> kaptcha是一个简单好用的验证码生成工具&#xff0c;通过配置&#xff0c;可以自己定义验证码大小、颜色、显示的字符等等。下面就来讲一下如何使用kaptcha生成验证码以及在服务器端取出验证码进行校验。 一、搭建测试环…

主成分分析(PCA) C++ 实现

主成分分析(Principal Components Analysis, PCA)简介可以参考&#xff1a; http://blog.csdn.net/fengbingchun/article/details/78977202以下是PCA的C实现&#xff0c;参考OpenCV 3.3中的cv::PCA类。使用ORL Faces Database作为测试图像。关于ORL Faces Database的介绍可以参…

为何Google、微软、华为将亿级源代码放一个仓库?从全球最大代码管理库说起...

作者 | 夕颜编辑 | Just出品 | AI 科技大本营&#xff08;ID:rgznai100&#xff09;【导读】2017 年&#xff0c;在当时微软的一篇官方博客中&#xff0c;时任微软云开发服务副总裁的 Brian Harry 表示微软内部代码开始向 Git 迁移&#xff0c;宣布推出针对大规模 repo 的“Git…

jquery mobie导致超链接不可用

在a标签中添加rel"external"即可转载于:https://blog.51cto.com/here2142/1435434

编译器GCC与Clang的异同

GCC&#xff1a;GNU(Gnus Not Unix)编译器套装(GNU Compiler Collection&#xff0c;GCC)&#xff0c;指一套编程语言编译器&#xff0c;以GPL及LGPL许可证所发行的自由软件&#xff0c;也是GNU项目的关键部分&#xff0c;也是GNU工具链的主要组成部分之一。GCC(特别是其中的C语…

如何正确选择聚类算法? | CSDN博文精选

作者 | Josh Thompson翻译 | 张睿毅校对 | 王雨桐来源 | 数据派THU&#xff08;ID:DatapiTHU&#xff09;本文将介绍四种基本的聚类算法—层次聚类、基于质心的聚类、最大期望算法和基于密度的聚类算法&#xff0c;并讨论不同算法的优缺点。聚类算法十分容易上手&#xff0c;但…

Python工具 | 9个用来爬取网络站点的 Python 库

1️⃣Scrapy 一个开源和协作框架&#xff0c;用于从网站中提取所需的数据。 以快速&#xff0c;简单&#xff0c;可扩展的方式。 官网2️⃣cola 一个分布式爬虫框架。 GitHub3️⃣Demiurge 基于 PyQuery 的爬虫微型框架。 官网4️⃣feedparser 通用 feed 解析器。 官网5️⃣Gra…

Python并发编程实例教程

有关Python中的并发编程实例,主要是对Threading模块的应用,文中自定义了一个Threading类库。 一、简介  我们将一个正在运行的程序称为进程。每个进程都有它自己的系统状态&#xff0c;包含内存状态、打开文件列表、追踪指令执行情况的程序指针以及一个保存局部变量的调用栈。…

Nginx负载均衡之TCP端口高可用(二)

在前面我们实现了基本的HTTP反向代理&#xff0c;从互联网过来的请求已经可以分发到后端多台网站服务器上&#xff0c;但不是所有的业务都是网络类型的&#xff0c;此篇文章我们主要讨论的是TCP 端口的负载均衡做法&#xff0c;昨天也有小伙伴提到了&#xff0c;在HTTP反向代理…

语音识别大牛Daniel Povey为何加入小米?“手机+AIoT”强大生态,开源战略是关键...

整理 | 夕颜出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;10 月 17 日&#xff0c;语音识别开源工具 Kaldi 创始人&#xff0c;语音和 AI 领域大牛 Daniel Povey 在10 月 19 日&#xff0c;小米集团副总裁、集团技术委员会主席崔宝秋发布微博&#xff0c;欢迎 Dani…

Python运维项目中用到的redis经验及数据类型

先感叹下&#xff0c;学东西一定要活学活用&#xff01; 我用redis也有几年的历史了&#xff0c;今个才想到把集合可以当python list用。 最近做了几个项目都掺杂了redis&#xff0c; 遇到了一些个问题和开发中提高性能的方法&#xff0c;这都分享出来&#xff0c;共同学习。…

图像边缘检测之拉普拉斯(Laplacian)C++实现

拉普拉斯算子(Laplacian)可应用到图像边缘检测中。在OpenCV中当kernel大小为3*3时&#xff0c;支持两种kernel算子&#xff0c;分别为&#xff1a;在OpenCV中默认的计算方式如下&#xff0c;假设有一个5*5的小图像&#xff0c;原始值依次为1,2,…25,如下图红色部分&#xff0c;…

从0到1,Airbnb的深度学习实践经验总结

作者 | Haldar译者 | 陆离出品 | AI科技大本营&#xff08;ID: rgznai100&#xff09;此前&#xff0c;AI科技大本营发布了关于希望通过介绍的研究成果为读者提供一些有用的帮助和指引。模型中的生态系统本文要讨论的机器学习现实应用&#xff0c;是关于根据用户预约的可能性来…

高并发大流量专题---8、动态语言的并发处理

高并发大流量专题---8、动态语言的并发处理 一、总结 一句话总结&#xff1a; 和本科毕业论文连起来了&#xff1a;基于消息中间件Rocket MQ的研究&#xff1b;用于并发处理的消息队列 1、什么是进程、线程、协程&#xff1f; 进程&#xff08;Process&#xff09;是计算机中的…

1. 文件系统——磁盘分区、各目录功能、硬盘

一、磁盘分区及文件访问入口在前文中介绍过&#xff0c;Linux的整个文件系统像一棵倒置的数&#xff0c;最顶层的是根文件系统&#xff0c;其下有很多一级子目录&#xff0c;一级子目录下面是二级子目录&#xff0c;依此类推&#xff1a;/&#xff1a;根目录/bin&#xff0c;/s…

吴恩达老师深度学习视频课笔记:逻辑回归公式推导及C++实现

逻辑回归(Logistic Regression)是一个二分分类算法。逻辑回归的目标是最小化其预测与训练数据之间的误差。为了训练逻辑回归模型中的参数w和b&#xff0c;需要定义一个成本函数(cost function)。成本函数(cost function)&#xff1a;它是针对整个训练集的。衡量参数w和b在整个训…

网络运行时间提高100倍,Google使用的AI视频理解架构有多强?

译者 | 刘畅出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;视频理解是一个很有挑战性的问题。由于视频包含时空数据&#xff0c;因此图像的特征表示需要同时提取图像和运动信息。这不仅对自动理解视频语义内容有重要性&#xff0c;还对机器人的感知和学习也至关重要…

iOS学习笔记(十三)——获取手机信息(UIDevice、NSBundle、NSLocale)

2019独角兽企业重金招聘Python工程师标准>>> iOS的APP的应用开发的过程中&#xff0c;有时为了bug跟踪或者获取用反馈的需要自动收集用户设备、系统信息、应用信息等等&#xff0c;这些信息方便开发者诊断问题&#xff0c;当然这些信息是用户的非隐私信息&#xff0…