Spring MVC: 标签之间的区别? [复制]

2024-03-02

前几天开始研究这个Spring Hello World教程:http://viralpatel.net/blogs/spring-3-mvc-create-hello-world-application-spring-3-mvc/ http://viralpatel.net/blogs/spring-3-mvc-create-hello-world-application-spring-3-mvc/

在本教程中,Spring DispatcherServlet 使用以下配置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"

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">

<context:component-scan base-package="net.viralpatel.spring3.controller" />

<bean id="viewResolver"
    class="org.springframework.web.servlet.view.UrlBasedViewResolver">
    <property name="viewClass"
        value="org.springframework.web.servlet.view.JstlView" />
    <property name="prefix" value="/WEB-INF/jsp/" />
    <property name="suffix" value=".jsp" />
</bean>

在此文件中我使用的是上下文:组件扫描标签表示 Spring 必须扫描我的文件来搜索注释,例如,当控制器类发现某个方法被注释为@RequestMapping("/你好")注释知道此方法处理针对以“/hello”结尾的 URL 的 HTTP 请求。这很简单...

现在我的疑问与我可以在 STS\Eclipse 中自动构建的 Spring MVC 模板项目有关。

当我在 STS 中创建一个新的 Spring MVC 项目时,我有调度程序Servlet由名为的文件配置servlet-context.xml其中包含一些与前面的示例文件类似的配置。

在这个文件中,我仍然有组件扫描标签:

<context:component-scan base-package="com.mycompany.maventestwebapp" />

但我还有另一个标签(看起来有类似的任务),这个:

<annotation-driven />

这两个标签有什么区别?
另一个“奇怪”的事情是,前面的示例(不使用注释驱动标签)与 STS 使用 Spring MVC 模板项目创建的项目非常相似,但是如果我从其配置中删除注释驱动标签文件项目不运行并给我以下错误:HTTP 状态 404 -

在堆栈跟踪中我有:

警告:org.springframework.web.servlet.PageNotFound - 在名为“appServlet”的 DispatcherServlet 中未找到带有 URI [/maventestwebapp/] 的 HTTP 请求的映射

但为什么?前面的示例在没有注释驱动标签的情况下运行良好,并且这个控制器类非常相似。事实上,只有一种方法可以处理对“/”路径的HTTP请求

这是我的控制器类的代码:

package com.mycompany.maventestwebapp;

import java.text.DateFormat;
import java.util.Date;
import java.util.Locale;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

/**
 * Handles requests for the application home page.
*/
@Controller
public class HomeController {

private static final Logger logger = LoggerFactory.getLogger(HomeController.class);

/**
 * Simply selects the home view to render by returning its name.
 */
@RequestMapping(value = "/", method = RequestMethod.GET)
public String home(Locale locale, Model model) {
    logger.info("Welcome home! The client locale is {}.", locale);

    Date date = new Date();
    DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG, locale);

    String formattedDate = dateFormat.format(date);

    model.addAttribute("serverTime", formattedDate );

    return "home";
}

有人可以帮助我理解这件事吗?

非常感谢!


<mvc:annotation-driven />意味着您可以定义 spring bean 依赖项,而无需实际在 XML 中指定一堆元素或实现接口或扩展基类。例如@Repository告诉 spring 一个类是一个 Dao,而无需扩展JpaDaoSupport或 DaoSupport 的其他子类。相似地@Controller告诉 spring 指定的类包含处理 Http 请求的方法,而无需实现 Controller 接口或扩展实现控制器的子类。

当 spring 启动时,它会读取其 XML 配置文件并查找<bean如果它看到类似的东西,则其中的元素<bean class="com.example.Foo" />Foo 被标记为@Controller它知道该类是一个控制器并以此对待它。默认情况下,Spring 假定它应该管理的所有类都在 beans.XML 文件中显式定义。

元件扫描<context:component-scan base-package="com.mycompany.maventestwebapp" />告诉 spring 它应该在类路径中搜索 com.mycompany.maventestweapp 下的所有类,并查看每个类以查看它是否有@Controller, or @Repository, or @Service, or @Component如果是这样,那么 Spring 将向 bean 工厂注册该类,就像您输入了<bean class="..." />在 XML 配置文件中。

在典型的 Spring MVC 应用程序中,您会发现有两个 Spring 配置文件,一个配置应用程序上下文的文件通常以 Spring 上下文侦听器开头。

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

Spring MVC 配置文件通常以 Spring 调度程序 servlet 开始。例如。

<servlet>
        <servlet-name>main</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>main</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

Spring 支持分层 bean 工厂,因此在 Spring MVC 的情况下,调度程序 servlet 上下文是主应用程序上下文的子级。如果 servlet 上下文被要求提供一个名为“abc”的 bean,它将首先在 servlet 上下文中查找,如果没有找到它,它将在父上下文(即应用程序上下文)中查找。

数据源、JPA 配置、业务服务等常见 bean 是在应用程序上下文中定义的,而 MVC 特定配置则不是与 servlet 关联的配置文件。

希望这可以帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring MVC: 标签之间的区别? [复制] 的相关文章

  • 什么是内部类的合成反向引用

    我正在寻找应用程序中的内存泄漏 我正在使用的探查器告诉我寻找这些类型的引用 但我不知道我在寻找什么 有人可以解释一下吗 Thanks Elliott 您可以对 OUTER 类进行合成反向引用 但不能对内部类实例进行合成 e g class
  • 我对线程失去了理智

    我想要这个类的对象 public class Chromosome implements Runnable Comparable
  • Java中Gson、JsonElement、String比较

    好吧 我想知道这可能非常简单和愚蠢 但在与这种情况作斗争一段时间后 我不知道发生了什么 我正在使用 Gson 来处理一些 JSON 元素 在我的代码中的某个位置 我将 JsonObject 的 JsonElements 之一作为字符串获取
  • JOOQ 忽略具有默认值的数据库列

    看来JOOQ完全忽略了数据库列的默认值 既不会更新 ActiveRecord 对象 也不会在 INSERT 时跳过此列 相反 它尝试将其设置为 NULL 这在 NOT NULL 列上失败 Example CREATE TABLE bug f
  • 如何向我的 Spring MVC REST 服务添加错误?

    如果用户没有输入我正在编码的两个名称 我如何更改 更新来自 Spring MVC 的以下 REST 调用以返回错误 未找到 RequestMapping value name method RequestMethod GET Respons
  • 在 Spring 中为 @Pathvariable 添加类级别验证

    在发布这个问题之前 我已经做了很多研究并尝试了很多可用的解决方案 这是我陷入的棘手情况 我有一个 Spring 控制器 它有多个请求映射 它们都有 PathVariables 控制器如下所示 Controller EnableWebMvc
  • 为什么在将 String 与 null 进行比较时会出现 NullPointerException?

    我的代码在以下行中出现空指针异常 if stringVariable equals null 在此语句之前 我声明了 stringVariable 并将其设置为数据库字段 在这个声明中 我试图检测该字段是否有null值 但不幸的是它坏了 有
  • 使用 JDBC 连接到 PostgreSql 的本地实例

    我在 Linux 机器上有一个正在运行的 PostgreSql 本地实例 当我使用psql来自 shell 的命令我成功登录 没有任何问题 我需要通过 JDBC 连接到 PostgreSql 但我不知道我到底应该传递什么url参数为Driv
  • 如何使用双重调度来分析图形基元的交集?

    我正在分析图形基元 矩形 直线 圆形等 的交互并计算重叠 相对方向 合并等 这被引用为双重调度的一个主要示例 例如维基百科 http en wikipedia org wiki Double dispatch 自适应碰撞算法通常要求 不同的
  • 无需递归即可对可观察结果进行分页 - RxJava

    我有一个非常标准的 API 分页问题 您可以通过一些简单的递归来处理 这是一个捏造的例子 public Observable
  • 在java程序中使用c++ Dll

    我正在尝试使用System LoadLibrary 使用我用 C 编写的一个简单的 dll UseDllInJava java import com sun jna Library import com sun jna Native imp
  • 从三点求圆心的算法是什么?

    我在圆的圆周上有三个点 pt A A x A y pt B B x B y pt C C x C y 如何计算圆心 在Processing Java 中实现它 我找到了答案并实施了一个可行的解决方案 pt circleCenter pt A
  • 我们如何使用 thymeleaf 绑定对象列表的列表

    我有一个表单 用户可以在其中添加任意数量的内容表对象这也可以包含他想要的列对象 就像在 SQL 中构建表一样 我尝试了下面的代码 但没有任何效果 并且当我尝试绑定两个列表时 表单不再出现 控制器 ModelAttribute page pu
  • 我所有的 java 应用程序现在都会抛出 java.awt.headlessException

    所以几天前我有几个工作Java应用程序使用Swing图书馆 JFrame尤其 他们都工作得很好 现在他们都抛出了这个异常 java awt headlessexception 我不知道是什么改变了也许我的Java版本不小心更新了 谢谢你尽你
  • 用于请求带有临时缓存的远程 Observable 的 RxJava 模式

    用例是这样的 我想暂时缓存最新发出的昂贵的Observable响应 但在它过期后 返回到昂贵的源Observable并再次缓存它 等等 一个非常基本的网络缓存场景 但我真的很难让它工作 private Observable
  • Spring Data Rest 多对多 POST

    首先 让我解释一下我的用例 这非常简单 有一个用户实体和一个服务实体 我使用 UserService 作为连接实体 连接表 在用户和服务之间建立多对多关联最初 会有一些用户集和一些服务集 用户可以在任何时间点订阅任何服务 在这种情况下 将向
  • 在 Java 中通过 D-Bus MPRIS 访问 Clementine 实例

    我使用 Clementine 作为音乐播放器 它可以通过 D Bus 命令进行控制 在命令行上 使用 qdbus 我可以 Start Stop 暂停播放器 强制它跳过播放列表中的歌曲 检查播放列表的长度 检查播放列表中当前播放的曲目及其元数
  • 确定 JavaFX 中是否消耗了事件

    我正在尝试使用 JavaFX 中的事件处理来做一些非滑雪道的事情 我需要能够确定手动触发事件后是否已消耗该事件 在以下示例中 正确接收了合成鼠标事件 但调用 Consumer 不会更新该事件 我对此进行了调试 发现 JavaFX 实际上创建
  • 在会话即将到期之前调用方法

    我的网络应用程序有登录的用户 有一个超时 在会话过期之前 我想执行一个方法来清理一些锁 我已经实现了sessionListener但一旦我到达public void sessionDestroyed HttpSessionEvent eve
  • 关闭扫描仪是否会影响性能

    我正在解决一个竞争问题 在问题中 我正在使用扫描仪获取用户输入 这是 2 个代码段 一个关闭扫描器 一个不关闭扫描器 关闭扫描仪 import java util Scanner public class JImSelection publ

随机推荐

  • 使用 control.begininvoke 后 UI 仍然没有响应

    我制作了一个 C winforms 应用程序 现在我有一个带有很多按钮的表单 这些按钮调用大量的数字运算函数 其输出在文本框中更新 我调用 textbox begininvoke 方法 将委托传递给更新文本框中文本的函数 但是当文本很大时
  • 无法在单用户模式下启动sql server

    我正在尝试恢复我的本地 sql server sa 密码 我读到应该将其置于单用户模式 我就这样做了 我添加了 m 到启动参数 我没有运行 sql 代理 我重新启动了 Sql Server 当我尝试时 sqlmd S sqlexpress
  • Ruby on Rails 中的模型关系

    我正在 Rails 3 中开发一个新应用程序 但我不确定如何建立模型之间的关系 基本上我有一个model User and a model Project 用户可以创建项目 成为项目所有者 但除项目所有者之外的任何其他用户也可以加入该项目
  • 如何检查数组中的非零值(元素)

    我想知道如何编写一个函数来返回是否至少有三个值不等于 0 我搜索过类似的问题 但找不到任何有效的解决方案 为了解释我的问题 这里有一个例子 我有一个包含这些元素的数组 1 0 2 0 4 0 0 3 0 0 我想检查是否至少有 3 个元素不
  • file.read()、file.readline() 和迭代文件对象之间的区别[重复]

    这个问题在这里已经有答案了 我是计算机科学的新手 正在尝试在 python 中创建一个函数来打开我的计算机上的文件 我知道这个函数f readline 将当前行作为字符串抓取 但是这些函数的作用是什么f read and for line
  • Python - 将日期的字符串表示形式转换为 ISO 8601

    在Python中 如何转换这样的字符串 2010 年 12 月 16 日星期四 12 14 05 0000 为 ISO 8601 格式 同时保留时区 请注意 原始日期是字符串 输出也应该是字符串 而不是datetime或类似的东西 不过 我
  • 将 abel 包裹在复合材料中

    I have ScrolledComposite只允许垂直滚动 heighthint 400 在这个 ScrolledComposite 中 我还有另一个CompositeA 滚动高度可能超过 400 来存储所有其他小部件 我有一个很长的标
  • PIL ValueError:图像数据不足?

    当我尝试从 URL 获取图像并将其响应中的字符串转换为Image在 App Engine 内 from google appengine api import urlfetch def fetch img url try result ur
  • ConcurrentQueue 保存对象的引用或值? “内存不足”异常

    排队到 ConcurrentQueue 的对象是被复制到队列还是仅复制到它们的引用 我不明白任何场景 解释 我这样定义了一个 ConcurrentQueue BufferElement is a class I created privat
  • 可观察队列?

    是否有人编写了实现 INotifyCollectionChanged 的 Net 通用队列版本 或者是否已经在 Net 框架深处隐藏了某个版本 快速搜索没有显示任何结果 但接口很简单 扩展 Queue 类并添加对该接口的支持几乎是微不足道的
  • Dropbox SDK 401 错误

    我正在使用 Dropbox SDK 并且已将其设置为应用程序只能访问 Apps MyAPP 文件夹 我正在测试它并在线删除了该文件夹 现在 当我在应用程序中而不是要求重新链接 Dropbox 时 它会给我一个 401 错误 我不知道为什么它
  • Docker 在构建期间不会创建目录

    第一次尝试使用 Docker 在我的 Dockerfile 中执行以下步骤来创建目录 但是当我运行容器时 该目录不存在 FROM ubuntu MAINTAINER AfterWorkGuinness RUN apt get update
  • actix-web 中“扩展”的作用是什么?

    我想弄清楚如何Extension https docs rs actix web 3 3 2 actix web dev struct Extensions htmls 创建于Actix 网络 https crates io crates
  • 无法将焦点设置在 Windows 窗体文本框上

    当选项卡页首次出现时 我似乎无法在文本框中获得输入焦点 我正在使用 Windows 窗体 VB NET 3 5 我在选项卡页的面板上有一个文本框 我希望当选项卡页出现时焦点位于文本框上 我希望用户能够立即开始在聚焦的文本框中键入内容 而无需
  • 如何在 iOS 中更改 ePub 图书的字体颜色和字体样式?

    我创建了支持 pdf 和 ePub 格式的书籍应用程序 在该应用程序中 pdf 仅显示为图像 而 ePub 在 Web 视图中打开 因为 EPUB 只是存储在带有 XML 清单的 zip 文件中的 XHTML 现在 我想改变字体样式 and
  • django 中 settings.py 中的密钥中的“Django-insecure”

    创建新项目后django admin startproject my settings py包含 SECRET KEY django insecure
  • 当 Task.Status 更改为正在运行时,有没有办法收到通知?

    我正在编写一个运行任务并基于通知的类this https msdn microsoft com en us magazine dn605875 aspx 我想不出解决方案的一个问题是如何在 Task Status 离开时发出通知TaskSt
  • 如何在Java、SQL、ORM中使用money数据类型

    在 Java 应用程序中使用货币数据类型的最佳实践是什么 钱应该是双变量吗 四舍五入 货币等又如何呢 有专门的图书馆吗 最流行数据库中的 ORM 和 SQL 又如何呢 据我所知 并非所有 SQL 引擎中都是 Money 数据类型 在这种情况
  • 如果值为负数,如何更改文本颜色?

    我正在开发一个网络应用程序 它可以在整数之间进行加法 我有两个函数叫做num1 and num2 获取两个整数作为用户的输入 如果两个整数之和为负数 我想更改结果输出文本颜色 我如何使用 JavaScript 来做到这一点 我看过很多 jQ
  • Spring MVC: 标签之间的区别? [复制]

    这个问题在这里已经有答案了 前几天开始研究这个Spring Hello World教程 http viralpatel net blogs spring 3 mvc create hello world application spring