Web部署一(目录机构以及Url-pattern)

本文介绍了Web应用的基本目录结构及如何将应用打包为WAR文件。详细解释了URL模式匹配的三种方式及其优先级,包括全匹配、文件夹匹配和后缀名匹配。

Web部署一(目录机构以及Url-pattern)

一个web目录部署到服务器上的时候通常是这样的一个结构



1.MyTestApp 表示了web应用的名字
2.wen-inf下面的文件都不能直接访问
3.jar 一般会放在lib (当然你也可以放在tomcat下lib中,这样tomcat部署的所有的应用都会使用到这些lib)
4.classes 的目录机构和我们的src的目录结构是一样的,只不过classes是编译后 的class文件
5.tags 一般存放,我们自定义的TLD文件
6.这就是一个最基本的webapp的目录结构

有的时候我们会把我们的应用打包为一个war 文件。这其实是一个压缩文件,在tomcat启动的时候会自动的解压这个文件,war文件名就是webapp的名字


Url-pattern访问的规则

在我们配置serlvet的时候我们通常会配置servlet和servlet-mapping 两个标签 
	<servlet>
		<servlet-name>mappingone</servlet-name>
		<servlet-class>com.urlMapping.UrlMappingOne</servlet-class>
	</servlet>
	
	<servlet-mapping>
		<servlet-name>mappingone</servlet-name>
		<url-pattern>/urlMapping/urlOne</url-pattern>
	</servlet-mapping>

 如上面的代码:servlet-name 只是一个内部标示,class 标示用来处理这个请求的class,url-pattern表示的是我们在地址栏中访问的路径

/urlMapping/urlOne 这只是一个逻辑的访问地址,而真实的处理的地址是在servlet-class 中说明的

url-pattern 的规则
1.全匹配的方式
2.文件夹匹配的方式
3.后缀名匹配的方式

不管我们是通过重定向或者是服务器转发的方式到一个页面或者是一个serlvet,那么他都会按照上面的顺序进行一个计算,首先是全匹配优先级最高,然后是文件夹匹配,最后是后缀名匹配的方式。如果中间有一个匹配成功了那么就立即返回到servlet-class中去处理

全匹配的格式:/urlMapping/urlOne 
文件夹匹配:/urlMapping/urlOne/*
后缀名匹配:*.html

如果请求的地址是

localhost:8080/servlet/urlMapping/urlOne   那么请求的就是“全匹配”

localhost:8080/servlet/urlMapping/urlOne/  请求的是文件夹匹配

localhost:8080/servlet/urlMapping/urlOne/hello  请求的是文件夹匹配

localhost:8080/servlet/urlMapping/urlOne/hello.html 请求的是后缀名的匹配

注意如果是有多个文件夹匹配的方式,那么首先是匹配最长的哪一个比如下面的例子

urlMapping/urlOne/* 和 urlMapping/urlOne/inner/* 两个文件夹匹配 如果我们访问的地址是 urlMapping/urlOne/inner/hhh.html 那么他就是匹配urlMapping/urlOne/inner/*  


在设置匹配的时候我们要注意,不要配成循环的请求了。因为“不管我们是通过重定向或者是服务器转发的方式到一个页面或者是一个serlvet,那么他都会按照上面的顺序进行一个计算”   
如果是我们请求的地址后面加上了“/”,那么就是一个文件夹的匹配方式了。

 








在Servlet中,`url-pattern`映射失败通常由以下几个原因导致: ### 配置问题 如果`url-pattern`配置不正确,请求将无法正确映射到对应的Servlet类。例如,在`web.xml`中配置了错误的`url-pattern`或未正确指定`<servlet-name>`,可能导致请求路径与实际配置的路径不匹配。检查`web.xml`中的`<servlet>`和`<servlet-mapping>`部分是否正确关联了Servlet类和URL路径[^2]。 ### 注解配置与XML配置冲突 如果使用了注解方式(如`@WebServlet`)声明Servlet,同时也在`web.xml`中定义了相同的URL路径,则可能导致冲突。例如,使用`@WebServlet("/test")`声明了个Servlet,但在`web.xml`中又定义了相同的URL路径,这会导致容器不知道应该优先使用哪种配置。确保注解和XML配置不冲突,或者根据容器的优先级规则进行调整[^1]。 ### 路径格式问题 `url-pattern`支持多种格式,包括精确匹配、通配符匹配和后缀匹配。例如: - 精确匹配:`/test` - 通配符匹配:`/*` - 后缀匹配:`*.do` 如果配置了错误的路径格式,例如使用了`*.do`但实际请求路径是`/test`,则会导致映射失败。确保路径格式与实际请求路径致[^2]。 ### 应用上下文路径影响 当应用部署在服务器上时,其上下文路径会影响最终的URL结构。例如,如果应用名为`myApp`,并且配置了`url-pattern`为`/test`,则完整的URL应为`http://localhost:8080/myApp/test`。如果忽略了上下文路径,可能会导致请求无法正确到达目标Servlet[^1]。 ### 容器启动问题 有时候,Servlet容器(如Tomcat)可能没有正确加载应用或Servlet类。检查服务器日志是否有启动错误或类加载失败的信息。确保Servlet类位于正确的包中,并且编译后的`.class`文件已正确部署到`WEB-INF/classes`目录下。 ### 示例代码 以下是个简单的Servlet配置示例,展示了如何在`web.xml`中配置`<servlet>`和`<servlet-mapping>`: ```xml <servlet> <servlet-name>TestServlet</servlet-name> <servlet-class>com.example.TestServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>TestServlet</servlet-name> <url-pattern>/test</url-pattern> </servlet-mapping> ``` ### 注解方式配置 如果使用注解方式配置Servlet,确保类上有`@WebServlet`注解,并且路径正确: ```java @WebServlet("/test") public class TestServlet extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException { response.getWriter().write("Test"); } } ``` ### 检查点 1. **确认`web.xml`配置**:确保`<servlet>`和`<servlet-mapping>`中的`<servlet-name>`致。 2. **检查URL路径**:确保请求的URL与配置的`url-pattern`匹配。 3. **查看服务器日志**:检查是否有启动错误或类加载失败的信息。 4. **清除缓存**:有时候旧的配置可能仍然生效,尝试清理服务器缓存并重新部署应用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值