文章目录
1. 复现错误
曾记得,当初使用
idea
来写
Java web
项目时,常常因为
Tomcat
配置导致如下错误:
即
The requested resource [/] is not available
问题。
2. 分析错误
正赶上最近
ChatGPT
很火,于是借助
ChatGPT
来解决我的问题,如下所示:
The requested resource is not available
The requested resource may be unavailable due to a variety of reasons.It may have been removed, changed names, or moved to a different location. Please try searching for the resource again or contact the website’s administrator to find out more information.
可惜的是,
ChatGPT
给出英文的回复,我们不妨翻译成中文:
请求的资源不可用
由于各种原因,请求的资源可能不可用。它可能已被删除、更改名称或移动到其他位置。请尝试再次搜索资源或联系网站管理员以了解更多信息。
从翻译结果可以清楚地看到:
请求的资源不可用
,即网上说的
404
的问题。
3. 解决错误
既然说请求资源不可用,那我进行如下修改,以保证请求资源的可用性。
以下,基于本地项目和线上项目来修改。
3.1 本地项目
- 我们先找到
tomcat
的下载目录,我的是在D:\Software\tomcat8.5
,进入bin
目录下,如下图所示:
- 找到并双击
startup.bat
文件,启动tomcat
,如下图所示:
**【备注】如果你使用的是
linux
系统(比如
Ubuntu
,苹果电脑等),在
terminal
中进入到
bin
目录后,输入
sh startup.sh
即可启动
tomcat
。**
Tomcat
启动成功后,能否看到它的如下默认界面:
如果出现这个界面,说明
tomcat
没有任何问题。
- 点击右上角下拉框,选择
Edit configuration
,新建一个Tomcat local server
,如下图所示:
- 接着点击
Deployment
。
点击后,大概啥也没有,点右侧的
+
可以弹出一个这样的对话框。
找到你的
Tomcat
的安装目录,在
webapps
文件夹下面有一个
ROOT
文件夹,如下图所示:
选中
ROOT
即可,点击
ok
即可,如此
Deployment
就配置完成。
- 最后点
Tomcat
运行
如果正常跳转到默认页面,就说明你的基本配置,外部依赖啥的是没有问题的 **(Tomcat安装正确,Java,Maven依赖正确)**。
网上说是这个
URL
的路径乱改之类会报
404
的错误,也有说是
deployment
的路径必须和
URL
的路径一致之类的。
如果你上面的配置都没问题,可以自行验证一下,看哪种情况会报
404
的错误。
我先说一下观察后的结论:
如果你要去改,不要改
URL
,而是修改
deployment
下的
Application context
的路径,如下所示:
改它的话,
URL
会自动改的。最终他们两个路径后面的名称会保持一致,只要保持一致就可以。
不要先去改
URL
,如果先改
URL
,那后面对应的
Application context
不会更改,这样很容易就会出现
404
错误。
3.2 线上项目
如果你测试本地项目没问题,如下就可以测试你的实际项目了。
此刻,你应该知道写
Application context
时,应该注意什么了。
若不是上面的配置问题,就是你项目代码中的路径配置有问题。
如果你用
Maven
新建一个
Java Web
,很有可能会是这样一个路径结构:
一般是这个
web.xml
配置出错导致
404
错误。
首先用
Tomcat
启动服务器,看看项目首页是否正常显示:
- 若不能正常显示,看你的
web.xml
的首页地址是否写正确。 - 若首页正常显示,但是跳转页面没有办法正常显示,很有可能是你的
form
路径配置出错了。
我举个简单的例子,比如在
index.jsp
中,你想做一个表单提交和跳转,如下所示:
如果跳转到静态页面,看你的
action
路径配置的是否正确。
若是动态页面,比如,你想将某一个表单结果提交到
servlet
,就不要按照相对路径去写了。
这时,需要在
web.xml
进行相应的
url_pattern
和
mapping
的配置,但这样的配置很有可能会出一些错,导致你遇到
404
的问题。
所以,我这里强烈推荐大家使用注解的方式进行配置,而不要使用在
web.xml
配置
url_pattern
和
mapping
。
假设,我对这个
LoginServlet
进行配置,只需要在
LoginServlet
中添加
@WebServlet
注解就可以,如下代码所示:
@WebServlet(urlPatterns ="/LoginServlet")publicclassLoginServletextendsHttpServlet{@OverrideprotectedvoiddoGet(HttpServletRequest req,HttpServletResponse resp)throwsServletException,IOException{String username = req.getParameter("username");System.out.println(username);}@OverrideprotectedvoiddoPost(HttpServletRequest req,HttpServletResponse resp)throwsServletException,IOException{doGet(req, resp);}}
如此配置,上述
form
表单就会正常提交和跳转,不会出现
404
的错误。
如果以上方法无法解决你的问题,可以参考如下方法去解决你的问题。
4. 此错误的其他解决方法
- 目录不能被引用。
可以在
Eclipse
的
包资源管理器(Package Explorer)
检查文件存放的位置。
由于
META-INF
和
WEB-INF
文件夹下的内容不对外发布,如果你引用了带这两个目录的文件,肯定是不允许,如下URL地址就是错误的:
http://localhost:8081/testProject/WEB-INF/index.html
URL
输入错误,如下为排错方法:- 先查看URL
的IP
地址和端口号是否书写正确。- 其次查看上下文路径是否正确,比如Project -> Properties -> MyElipse -> Web -> Web Context-root
,检查这个路径名称是否书写正确。- 最后检查一下文件名称是否书写正确。- 未部署
Web
应用 Tomcat
器中web.xml
中的问题
假如,你的
web
应用程序有多个
jsp
页面,当你点击
web
应用程序的虚拟根目录时,可能会出现
404错误
。
此时,你只需要修改
Tomcat
服务器中
web.xml
,如下代码所示:
<!-- 将false修改为true --><init-param><param-name>list</param-name><param-value>false</param-value></init-param>
如果在
6.0.18
版本
error
:
The requested resource () is not available.
总是无法访问
/myapp/*.jsp
文件,可以将
/ROOT
中
build.xml
文件
copy
一份到
myapp
。
**【注意】把里面所有的
ROOT
用
myapp
代替, 应该就OK。**
WEB-INF
下面必须要有几个固定的文件夹和文件-web.xml
该web app
的配置文件-lib
该web app
用到的库文件-classes
存放编译好的servlet
请注意这些名字,我曾经把
classes
写成
class
,查错查了半宿还没解决。
所以,写这些时千万要仔细,要不会浪费更多的精力去查错。
- 如果运行的是
servlet(.class)
文件,而非.jsp
文件,需在web.xml
中加上以下字段:
<servlet><servlet-name>TestServlet</servlet-name><servlet-class>TestServlet</servlet-class></servlet><servlet-mapping><servlet-name>TestServlet</servlet-name><url-pattern>/TestServlet</url-pattern></servlet-mapping>
其中,
TestServlet
改为你要运行的文件名。
**【注意】
web.xml
是
WEB-INF
下面的。**
struts.xml
配置错误
可能是你的
Action
值写错,或者链接
URL
写错。
比如
commons-lang3-3.1.jar
文件到
WEB-INF/lib
目录下,
struts2
最新的
web
开发包如下:
当然,如果你的是
maven
项目,直接在
pom.xml
中引入
jar
包即可,如下所示:
<!--apache配置开始--><dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId><version>3.7</version></dependency><!--apache配置结束-->
- 检查同一个项目,是否启动了多个
java
服务
有时,后台没有关闭之前的服务,你又重新启动,可能会报错
404
。
版权归原作者 super先生 所有, 如有侵权,请联系我们删除。