设置form action相对路径和Tomcat deployment application context 实现对多模块的访问

本文介绍了在IDEA中创建多模块SpringMVC项目时,如何为每个模块设置独立的访问路径。主要步骤包括:在index.jsp中通过form action设置模块名作为相对路径;在服务器的Edit Configuration -> Deployment -> Application Context中同样设置该路径。无需修改web.xml中的路径匹配和controller中的@RequestMapping。示例中展示了以模块PackagingPoJoEncapsulation为例的配置过程。

问题源于 一点教程 Spring MVC快速入门(他用Eclipse, 我这里用IDEA)
当一个Project创建多个module,每个module的访问路径势必要加以区分,本文演示对于Web application(Servlet, web.xml, index.jsp)结构如何添加访问路径
简单说只有两步
1 index.jsp中, form action 添加相对访问路径, 如/模块名称
2 服务器Edit Configuration-Deployment-Application context中也设置 第1步中同样的相对访问路径
注意另外两个地方不需要改动:
1 web.xml中还是*.do 路径匹配和扩展名匹配无法同时设置
2 controller中不用在类上添加@RequestMapping(其路径作用是区分同一个module中不同的Controller类), 也不用在方法的@RequestMapping中添加相对路径(其路径是为了区分同一个Controller类中不同的方法)

示例
IDEA创建module, Project template 采用Web application(Servlet, web.xml, index.jsp)
以模块PackagingPoJoEncapsulation为例,模块结构如图所示:
在这里插入图片描述
第1步 index.jsp中, form action 添加/PackagingPoJoEncapsulation

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>包装Pojo类型参数封装</title>
</head>
<body>
<h2>包装Pojo类型参数封装</h2>
<%这里添加了相对路径%>
<form action="/PackagingPoJoEncapsulation/param.do" method="post">
    用户名:<input type="text" name="username"><br>
    年龄:<input type="text" name="age"><br>
    省份:<input type="text" name="address.province"><br>
    城市:<input type="text" name="address.city"><br>
    <input type="submit" value="提交">
</form>
</body>
</html>

第2步 服务器部署设置
在这里插入图片描述

<think>好的,我现在需要解决用户在Tomcat中提交HTML表单时遇到的404错误。首先,根据用户提供的引用内容,404错误通常与路径配置有关。让我先回顾一下用户提到的引用内容,看看有哪些可能的原因解决方法。 引用[1]提到,配置Tomcat时如果设置了默认路径,可能会导致表单提交后的URL路径不正确。例如,用户原本的路径可能是http://localhost:8080/spring-03/e/t,但因为默认路径的问题,中间的部分被省略了,导致404。解决方法是确保表单的action属性使用了绝对路径,比如使用${pageContext.request.contextPath}来动态获取上下文路径。 引用[2]指出在web.xml中配置Servlet路径时,必须使用绝对路径。例如,如果Servlet映射的URL模式是/add,而应用上下文路径是/web,那么完整的URL应该是/web/add。如果只写了/add,就会导致404错误。用户可能需要检查web.xml中的配置是否正确,是否包含了应用上下文路径。 引用[3]涉及部署问题,用户将WAR包部署到Tomcat的ROOT目录下,可能需要确保应用上下文路径正确。如果应用部署在ROOT下,上下文路径应该为空,但如果有其他配置,可能需要调整表单中的URL。 引用[4]强调了Servlet在web.xml中的正确配置,包括声明映射。如果Servlet没有正确配置或映射的URL与表单提交的路径不匹配,就会导致404错误。用户需要检查web.xml中的<servlet><servlet-mapping>配置,确保名称一致且URL模式正确。 引用[5]提到了HTML表单的输入问题,比如禁用回车提交,但主要问题还是路径错误导致的404。此外,项目中的jar包错误也可能导致应用无法正常运行,需要检查项目的构建路径。 接下来,我需要将这些可能的点整理成解决方案,分步骤帮助用户排查解决问题。 第一步,检查表单的action属性是否正确。确保使用了绝对路径,动态获取上下文路径,避免硬编码路径导致的问题。例如,使用JSP的${pageContext.request.contextPath}来生成正确的URL。 第二步,确认web.xml中的Servlet配置是否正确。包括Servlet的声明映射,确保URL模式与应用上下文路径结合后的完整路径与表单提交的路径一致。比如,如果应用上下文是/myapp,Servlet映射为/process,则表单的action应为/myapp/process。 第三步,检查Tomcat的部署配置。确认应用是否正确部署,上下文路径是否与预期一致。如果应用部署在ROOT目录下,上下文路径为空,否则需要包含在URL中。 第四步,验证项目结构依赖。确保web.xml文件位于WEB-INF目录下,且没有jar包冲突或缺失,这可能导致Servlet无法正常处理请求。 第五步,检查服务器日志。Tomcat的日志中通常会有更详细的错误信息,帮助定位问题所在,比如类找不到、Servlet未映射等。 最后,给出示例代码配置,帮助用户具体实施这些步骤,比如展示正确的表单写法、web.xml配置部署方式。</think>### Tomcat中HTML表单提交404错误解决方案 #### 一、路径配置问题排查(最常见原因) 1. **表单`action`属性必须使用绝对路径** ```html <!-- 错误示例:相对路径 --> <form action="/e/t" method="post"> <!-- 正确示例:动态获取上下文路径 --> <form action="${pageContext.request.contextPath}/e/t" method="post"> ``` 若使用纯HTML文件(非JSP),需手动添加应用上下文路径: ```html <!-- 假设应用部署在 http://localhost:8080/myapp --> <form action="/myapp/e/t" method="post"> ``` [^1][^2] 2. **检查`web.xml`中的Servlet映射配置** 确保`<url-pattern>`与应用上下文路径组合后匹配表单提交路径: ```xml <!-- web.xml配置示例 --> <servlet> <servlet-name>FormServlet</servlet-name> <servlet-class>com.example.FormServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>FormServlet</servlet-name> <url-pattern>/e/t</url-pattern> <!-- 不要以/开头 --> </servlet-mapping> ``` 错误配置示例:`<url-pattern>/e/t</url-pattern>`会导致实际路径变成`/myapp//e/t`[^4] #### 二、部署环境验证 1. **确认应用上下文路径** - 部署为ROOT应用时访问路径:`http://localhost:8080/` - 部署为`myapp.war`时访问路径:`http://localhost:8080/myapp/` - 检查Tomcat的`server.xml`中`<Context>`配置: ```xml <Context docBase="myapp" path="/myapp" reloadable="true"/> ``` [^3] 2. **检查WAR包结构** 正确项目结构: ``` myapp/ ├─ WEB-INF/ │ ├─ web.xml │ ├─ classes/ │ └─ lib/ ├─ index.html └─ form.html ``` #### 三、常见特殊场景解决方案 1. **SpringMVC项目需检查** - `@Controller`注解是否启用组件扫描 - `DispatcherServlet`映射配置: ```xml <!-- 应配置为 / 而非 /* --> <servlet-mapping> <servlet-name>dispatcher</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> ``` 2. **IDEA开发环境特定问题** - 检查`Edit Configurations`中的`Application context` - 确保`Deployment`选项卡已添加项目工件 - Tomcat输出目录验证: ```shell # 查看编译结果是否输出到 %TOMCAT_HOME%/webapps/myapp/WEB-INF/classes ``` #### 四、调试方法 1. **查看Tomcat日志** ``` tail -f %TOMCAT_HOME%/logs/catalina.out ``` 常见错误日志: - `WARNING: No mapping found for HTTP request with URI [...]`:路径映射错误 - `java.lang.ClassNotFoundException`:依赖缺失 2. **使用curl测试接口** ```shell curl -X POST http://localhost:8080/myapp/e/t -d "name=test" ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值