springmvc的核心过滤器dispatcherservlet有加载配置文件的作用吗

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了springmvc的核心过滤器dispatcherservlet有加载配置文件的作用吗相关的知识,希望对你有一定的参考价值。

参考技术A springmvc的核心过滤器dispatcherservlet有加载配置文件的作用
配置文件名为:project.properties,内容如下:

# 是否开启逻辑删除
del.filter.on=false
domain

修改Spring配置文件
之前代码:

<bean id="propertyConfigurer"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath:dbinfo.properties</value>
</list>
</property>
</bean>

修改后的配置文件

<bean id="propertyConfigurer"
class="com.hisun.core.util.CustomizedPropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath:dbinfo.properties</value>
<value>classpath:project.properties</value>
</list>
</property>
</bean>

加入了classpath:project.properties,其为自定义的配置文件
将PropertyPlaceholderConfigurer类修改为自定义类CustomizedPropertyPlaceholderConfigurer,
PropertyPlaceholderConfigurer类的具体作用可以查资料这块儿不做详细介绍
定义CustomizedPropertyPlaceholderConfigurer类
类的具体内容为下,

import java.util.HashMap;
import java.util.Map;
import java.util.Properties;

import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
import org.springframework.beans.factory.config.PropertyPlaceholderConfigurer;

public class CustomizedPropertyPlaceholderConfigurer extends PropertyPlaceholderConfigurer
private static Map ctxPropertiesMap;本回答被提问者采纳

SpringMVC - dispatcher servler 的 url 模式样式

【中文标题】SpringMVC - dispatcher servler 的 url 模式样式【英文标题】:SpringMVC - dispatcher servler's url pattern style 【发布时间】:2015-06-29 19:44:21 【问题描述】:

我正在尝试使用 springMVC 构建一个宁静风格的 API。

在为 springMVC 的DispatcherServlet 配置 url-pattern 时,似乎有 2 个选择,我需要一些建议。

选择 A: 配置模式为:&lt;url-pattern&gt;*.action&lt;/url-pattern&gt; 和动作使用路径如@RequestMapping("/role/add.action")

选择 B: 配置模式为:&lt;url-pattern&gt;/api/*&lt;/url-pattern&gt; 和动作使用路径如@RequestMapping("/api/role/add")

我更喜欢使用没有后缀的样式,但在这种情况下,我需要添加子路径。

但我不确定哪个更适合在作为后端以提供 RESTful API 的项目中使用,并以浏览器/IOS/Android 作为其客户端。


可能有一个选项 C,但我不确定:

配置模式为:&lt;url-pattern&gt;/*&lt;/url-pattern&gt; 和动作使用路径如@RequestMapping("/role/add")

在这种情况下,内置的 servlet 将被覆盖,例如 jsp 将无法正常工作。 但是我没有jsp,而且像html / js / css / image / document / music / video这样的静态资源都放在nginx服务的另一个端口或服务器上,对tomcat的请求只通过json数据提供ajax服务。 那么在这种情况下使用选项 C 是否合适,或者它有一些不好的副作用?

【问题讨论】:

我推荐使用 Spring Boot,这样就不需要任何此类规范。 @chrylis 你能帮忙解释一下spring boot如何解决这个问题吗?因为根据servlet规范,我找不到既没有后缀也没有子路径的模式,同时可以避免覆盖内置的servlet。 Spring Boot 为您管理整个容器,因此您根本不必指定任何路径。 【参考方案1】:

如果您的目标是 restful api,我的选择是第二个,因为您在 url 中识别资源;说你必须管理一个角色资源,你应该有一些像这样的映射:

@RequestMapping("/api/role" method = RequestMethod.POST)

插入一个新角色(可能是api不允许这样做)

@RequestMapping("/api/role/roleId" method = RequestMethod.PUT)

更新现有角色

@RequestMapping("/api/role/roleId" method = RequestMethod.DELETE)

删除角色

@RequestMapping("/api/role" method = RequestMethod.GET)

检索角色(您可以通过查询字符串实现一些过滤器)

这同样适用于其他资源(用户等),命名架构相同。

我会避免使用选项 C,因为我认为如果您的应用还发布了不使用 api 的 Web 界面,最好为 api 提供专用映射

【讨论】:

【参考方案2】:

对于 RESTful 服务,我将选择 选择 B,考虑使用 REST 执行 CRUD 操作。您可以将url-pattern 映射为,

config pattern as: <url-pattern>/api/*</url-pattern>

所以要执行 add ,您只需确保从页面发布 JSON 对象并具有类似 /api/add 的 url

在删除的情况下,您可以简单地遵循相同的操作。考虑您将使用其 id 从列表中删除 object 。你可以简单地理解为,

/api/delete/$id

并像处理它,

@RequestMapping(value="/id", method=RequestMethod.GET)

【讨论】:

好建议,但是很多api有多个参数,所以我还是需要把参数放在?之后或者http正文中,我猜。 是的,它也取决于 API。为什么不将对象用于多个参数。 我有时会使用对象,但这也仅适用于部分 API,例如,搜索服务可能具有来自多个模型的更多参数。

以上是关于springmvc的核心过滤器dispatcherservlet有加载配置文件的作用吗的主要内容,如果未能解决你的问题,请参考以下文章

SpringMVC源码-执行流程

核心分发器DispatcherServlet

SpringMVC -- 拦截器(作用与过滤器的区别示例拦截器实现登录拦截核心代码)

Spring技术揭幕----DispatcherServlet

SpringMVC - dispatcher servler 的 url 模式样式

面试题:SpringMVC工作原理详解