Spring MVC 请求映射

2023-12-29

我正处于学习使用 Spring MVC 的早期阶段。我创建了一个控制器并应用了RequestMapping对其进行注释。当我运行该项目时,索引页面按预期显示index.htm,但是当我导航到应该指向我的控制器的 URI 时,我收到 404 错误,即使控制器似乎已被 Spring 检测到并启动。请帮助我理解我在这里未能理解的内容:

这是我的 web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param>
<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<servlet>
    <servlet-name>dispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>2</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>dispatcher</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>
<session-config>
    <session-timeout>
        30
    </session-timeout>
</session-config>
<welcome-file-list>
    <welcome-file>redirect.jsp</welcome-file>
</welcome-file-list>

这是我的 applicationContext.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:p="http://www.springframework.org/schema/p"
   xmlns:aop="http://www.springframework.org/schema/aop"
   xmlns:tx="http://www.springframework.org/schema/tx"
   xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
   http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd  
   http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.1.xsd
   http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.1.xsd>

    <context:spring-configured/>

<context:component-scan base-package="org.blah.blah"/>

这是我的dispatcher-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:context="http://www.springframework.org/schema/context" 
   xmlns:p="http://www.springframework.org/schema/p"
   xmlns:aop="http://www.springframework.org/schema/aop"
   xmlns:tx="http://www.springframework.org/schema/tx"
   xmlns:mvc="http://www.springframework.org/schema/mvc"
   xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
                       http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd  
                       http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd        
                       http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.1.xsd
                       http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.1.xsd">

<mvc:annotation-driven/>
<bean class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping"/>

<bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
    <property name="mappings">
        <props>
            <prop key="index.htm">indexController</prop>
        </props>
    </property>
</bean>

<bean id="viewResolver"
      class="org.springframework.web.servlet.view.InternalResourceViewResolver"
      p:prefix="/WEB-INF/jsp/"
      p:suffix=".jsp" />

<bean name="indexController"
      class="org.springframework.web.servlet.mvc.ParameterizableViewController"
      p:viewName="index" />

最后,这是我的控制器。

@Controller
@RequestMapping(value = "/hello")
public class Ctrl {

    @RequestMapping(method = RequestMethod.GET)
    @ResponseBody
    public String hello(){
    return "hello!";
    }

}

EDIT: This is what my browser displays: enter image description here


我在评论中错了一半重力计划的回答 https://stackoverflow.com/a/21842858/438154.

当您指定一个<mvc:annotation-driven />在你的servlet配置中,Spring注册了一个RequestMappingHandlerMappingbean 旨在收集和映射您的所有@Controller处理程序方法,即。那些注释有@RequestMapping.

它通过查看所有豆子来做到这一点current语境。请记住,当您加载上下文时DispatcherServlet,如果上下文是由 a 加载的,则将其称为 servlet 上下文ContextLoaderListener,称之为根上下文,根上下文被做成parentservlet 上下文。默认情况下, the RequestMappingHandlerMappingbean 不查看根上下文,它是 servlet 上下文的父级。

就你而言,@Controllerbeans 是在根上下文(你的 applicationContext.xml)中隐式声明的,因为<context:component-scan/>它扫描带有注释的类@Component或其任何专业(@Controller例如)并为它们创建bean。所以这些bean被注册在根上下文中,其中RequestMappingHandlerMapping找不到他们。

相反,如果您声明<context:component-scan />在 servlet 上下文中,那么@Controller(和其他)bean 是在 servlet 上下文中创建的,它们可供RequestMappingHandlerMapping然后可以注册它们来处理请求。

注意<context:component-scan />它本身不会对 MVC 堆栈做任何事情。它需要进一步配置,例如<mvc:annotation-driven />。您的目标应该是指定包含 servlet 上下文中的 servlet 特定 Bean 和根上下文中的应用程序范围 Bean 的包。

这里有一些文献:

  • Spring MVC 中 ApplicationContext 和 WebApplicationContext 有什么区别? https://stackoverflow.com/questions/11708967/what-is-the-difference-between-applicationcontext-and-webapplicationcontext-in-s
  • Spring框架中applicationContext.xml和spring-servlet.xml之间的区别 https://stackoverflow.com/questions/3652090/difference-between-applicationcontext-xml-and-spring-servlet-xml-in-spring
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring MVC 请求映射 的相关文章

  • 在Windows上安装Java 11 OpenJDK(系统路径问题)

    Java 11 最近发布了 众所周知 这个版本没有安装文件 当然 要在没有安装程序的情况下安装 Java 我将系统设置 PATH 和 JAVA HOME 设置为解压缩 Java 11 的文件夹的地址 根据对类似问题的已接受回复建议 唯一的事
  • 线程自动利用多个CPU核心?

    假设我的应用程序运行 2 个线程 例如渲染线程和游戏更新线程 如果它在具有多核 CPU 当今典型 的移动设备上运行 我是否可以期望线程在可能的情况下自动分配给不同的核心 我知道底层操作系统内核 Android linux内核 决定调度 我的
  • manifest.mf 文件的附加内容的约定?

    Java JAR 中的 MANIFEST MF 文件是否有任何超出 MANIFEST MF 约定的约定 JAR规范 http download oracle com javase 1 4 2 docs guide jar jar html
  • IntelliJ IDEA 创建的 JAR 文件无法运行

    我在 IntelliJ 中编写了一个跨越几个类的程序 当我在 IDE 中测试它时它运行良好 但是 每当我按照教程将项目制作成 jar 可执行文件时 它就不会运行 双击 out 文件夹中的文件时 该文件不会运行 并显示 无法启动 Java J
  • 使用 ANTLR 为 java 源代码生成抽象语法树

    如何使用 ANTLR 从 java src 代码生成 AST 有什么帮助吗 好的 步骤如下 前往ANTLR站点 http www antlr org 并下载最新版本 下载Java g和JavaTreeParser g文件来自here htt
  • 如何在 Java 中禁用 System.out 以提高速度

    我正在用 Java 编写一个模拟重力的程序 其中有一堆日志语句 到 System out 我的程序运行速度非常慢 我认为日志记录可能是部分原因 有什么方法可以禁用 System out 以便我的程序在打印时不会变慢 或者我是否必须手动检查并
  • Spring引导@Transactional

    spring boot会自动在controller层添加 Transactional注解吗 我尝试将 Transactional 放在服务层 但似乎控制器层覆盖了注释 我有这个配置
  • 无法理解 Java 地图条目集

    我正在看一个 java 刽子手游戏 https github com leleah EvilHangman blob master EvilHangman java https github com leleah EvilHangman b
  • 在具有相同属性名称的不同数据类型上使用 ModelMapper

    我有两节课说Animal AnimalDto我想用ModelMapper将 Entity 转换为 DTO 反之亦然 但是对于具有相似名称的一些属性 这些类应该具有不同的数据类型 我该如何实现这一目标 动物 java public class
  • 从 android 简单上传到 S3

    我在网上搜索了从 android 上传简单文件到 s3 的方法 但找不到任何有效的方法 我认为这是因为缺乏具体步骤 1 https mobile awsblog com post Tx1V588RKX5XPQB TransferManage
  • Spring Data 与 Spring Data JPA 与 JdbcTemplate

    我有信心Spring Data and Spring Data JPA指的是相同的 但后来我在 youtube 上观看了一个关于他正在使用JdbcTemplate在那篇教程中 所以我在那里感到困惑 我想澄清一下两者之间有什么区别Spring
  • org.jdesktop.application 包不存在

    几天以来我一直在构建一个 Java 桌面应用程序 一切都很顺利 但是今天 当我打开Netbeans并编译文件时 出现以下编译错误 Compiling 9 source files to C Documents and Settings Ad
  • 将多模块 Maven 项目导入 Eclipse 时出现问题 (STS 2.5.2)

    我刚刚花了最后一个小时查看 Stackoverflow com 上的线程 尝试将 Maven 项目导入到 Spring ToolSuite 2 5 2 中 Maven 项目有多个模块 当我使用 STS 中的 Import 向导导入项目时 所
  • 当单元格内的 JComboBox 中有 ItemEvent 时,如何获取 CellRow

    我有一个 JTable 其中有一列包含 JComboBox 我有一个附加到 JComboBox 的 ItemListener 它会根据任何更改进行操作 但是 ItemListener 没有获取更改的 ComboBox 所在行的方法 当组合框
  • 运行 Jar 文件时出现问题

    我已将 java 项目编译成 Jar 文件 但运行它时遇到问题 当我跑步时 java jar myJar jar 我收到以下错误 Could not find the main class myClass 类文件不在 jar 的根目录中 因
  • Keycloak - 自定义 SPI 未出现在列表中

    我为我的 keycloak 服务器制作了一个自定义 SPI 现在我必须在管理控制台上配置它 我将 SPI 添加为模块 并手动安装 因此我将其放在 module package name main 中 并包含 module xml 我还将其放
  • 如何测试 spring-security-oauth2 资源服务器安全性?

    随着 Spring Security 4 的发布改进了对测试的支持 http docs spring io spring security site docs 4 0 x reference htmlsingle test我想更新我当前的
  • 如何修复“sessionFactory”或“hibernateTemplate”是必需的问题

    我正在使用 Spring Boot JPA WEB 和 MYSQL 创建我的 Web 应用程序 它总是说 sessionFactory or hibernateTemplate是必需的 我该如何修复它 我已经尝试过的东西 删除了本地 Mav
  • JAVA - 如何从扫描仪读取文件中检测到“\n”字符

    第一次海报 我在读取文本文件的扫描仪中读取返回字符时遇到问题 正在读取的文本文件如下所示 test txt start 2 0 30 30 1 1 90 30 0 test txt end 第一行 2 表示两个点 第二行 位置索引 0 xp
  • java8 Collectors.toMap() 限制?

    我正在尝试使用java8Collectors toMap on a Stream of ZipEntry 这可能不是最好的想法 因为在处理过程中可能会发生异常 但我想这应该是可能的 我现在收到一个我不明白的编译错误 我猜是类型推理引擎 这是

随机推荐

  • 使用类路径参数运行 jar

    我可能错过了一些愚蠢的东西 但仍然如此 我创建了一个具有以下内部结构的 jar 文件 folder1 folder2 META INF 资源 其中folder1和folder2包含 class文件 而resources包含txt和png文件
  • 来自主 Gui 模块外部的 PyQt5 中断关闭事件

    我使用 Qt Designer 构建 GUI 并使用 pyuic5 将它们转换为 py 文件 我的最终目标是当变量 1 时中断用户关闭程序并向他们显示 您确定要关闭吗 类型对话框 如果所述变量 0 则正常关闭程序 我见过很多关于如何执行此操
  • C# 访问字段语法

    如果我只有要访问的变量的名称 我将如何访问对象的变量值 在 C 中 假设我有一个变量名称列表 表示为数组中的字符串 例如 我如何循环访问它们 我可以在 Actionscript 中执行类似以下操作 var arrayOfVariableNa
  • 如何从我的 makefile 中调用特定目标?

    a echo 1 b echo 2 c if d somefolder then how do I invoke target b here fi 我如何调用目标b内部目标c 根据我的情况 有点像antcall 如果你熟悉 ant 的话 说
  • 如何在 MiUi pre - Marshmallow 中请求权限?

    int permissionCheck ContextCompat checkSelfPermission mActivity Manifest permission RECEIVE SMS ActivityCompat requestPe
  • 如何确定应用程序中使用了哪些 JAR

    现有应用程序的类路径中有大量 JAR 文件 为了确定起见 最初必须有人添加所有 JAR 有些 JAR 显然没有被使用 我们已经删除了其中一些不需要的 JAR 没有造成任何问题 如何确定哪些 JAR 正在使用 哪些 JAR 不需要 除了试错法
  • Django 性能测试套件将报告指标(数据库查询等)

    我有一个复杂的 Django Web 应用程序 其中投入了很多人年的工作 有时可能需要优化 我可以使用 例如 django 的测试客户端编写几个常见的操作 流程的脚本 是否有一些程序 给定这样的 python 脚本 然后将运行 并报告各种
  • C++ 投掷类成员

    我有以下 C 代码 template
  • 查找数组中的重复元素?

    我看到一个面试题是这样的 数组中有一个数字重复 找到它 简单的解决方案如下 for int i 0 i
  • REST API 的试运行策略

    我正在寻找 REST API 的 试运行 操作的一些最佳实践 假设我有一个端点将资金从账户 A 转账到账户 B 我可以像这样发起转账 POST transactions amount 1000 how much to transfer so
  • jQuery 数据绑定 - 现在流行的插件是什么?

    我需要某种类型的 JS MVC DataBinding 解决方案 与实施 GMAIL Web 应用程序类似 消息索引和消息显示 在消息显示的位置 如果您修改消息 它会自动在消息索引中更新 我应该学习什么插件才能在不使用大量 jQuery 的
  • Tensorflow 中的入队和增量变量

    如何使张量流图将递 增的数字推送到队列 我这样做只是为了学习目的 所以我希望您保持它与我正在做的事情相似 并纠正我做错的事情 这是我的代码 import tensorflow as tf create queue queue tf Rand
  • 通过 attr_accessor 对模型对象进行排序

    当我必须对对象列表进行排序时 我认为 attr accessor 具有与另一个相同的行为 但似乎有所不同 dataRecords MyData where day Time now yesterday strftime Y m d to i
  • 仅禁用自动生成的表单上的特定“绿色加号”图标

    如何在自动生成的表单中禁用特定 manytomany 或 foreignkey 字段上的绿色图标 使用CSS如下 add another display none 禁用所有我不想要的 一个例子是工作日模型 存储从星期一到星期日的天数 指向该
  • Python 的多处理和内存

    我在用multiprocessing imap unordered对值列表执行计算 def process parallel fnc some list pool multiprocessing Pool for result in poo
  • 来自 Cordova iOS 插件的后续回调不会触发

    我在从 cordova 插件 iOS 插件 立即触发后续回调时遇到麻烦 在 XCode 调试器中 我清楚地看到它跳过了 self commandDelegate sendPluginResult pluginResult callbackI
  • ORA-01036: 通过 C# 运行查询时非法变量名称/编号

    我正在尝试使用ALTER USER在以下代码中 使用 C 中的 OracleCommand 查询 Oracle 数据库 如果用户名和密码的值不是空字符串 它将创建查询 但我收到一个错误 ORA 01036 illegal variable
  • 与带有分隔符的 String.Split 相反 (.net)

    有没有办法做相反的事情String Split在 Net 中 也就是说 用给定的分隔符组合数组的所有元素 Taking a b c 和给予 a b c 带有分隔符 UPDATE 我自己找到了答案 它是String Join method 找
  • 从 MS Excel 访问 Redis?

    我想使用 Redis 从命令行 脚本 Web 和电子表格中查询数据 除了电子表格之外 我可以找到很好的例子 不过 我不太知道从哪里开始访问 MS Excel 电子表格 谷歌让我失望了 请让我知道您建议如何执行此操作 谢谢 附注对于那些不熟悉
  • Spring MVC 请求映射

    我正处于学习使用 Spring MVC 的早期阶段 我创建了一个控制器并应用了RequestMapping对其进行注释 当我运行该项目时 索引页面按预期显示index htm 但是当我导航到应该指向我的控制器的 URI 时 我收到 404