idea部署web项目,能访问jsp,访问Servlet却出现404错误的解决方法汇总,亲测有效

 


  近期在跟着打一个javaweb项目的时候,自己搭建Tomcat环境之后,访问jsp页面之后跳转访问Servlet资源时却出现404错误,如下图:

idea部署web项目,能访问jsp,访问Servlet却出现404错误的解决方法汇总,亲测有效

  通常的话出现404错误肯定是先检查自己的访问路径有没有写对,我检查后我这个路径是没有错的,代码逻辑也是没问题的(因为是照着培训视频打的,同时也有把培训视频的代码替换我的代码也是运行不了),于是我就开始在网上搜索解决方案了,以下是我在网上搜到的解决方案以及自己的一点片面见解,因为别人实力较菜,写这篇文章也只是想着分享一下自己的解决方法,在说的过程中如果有错误的话,欢迎大家指出来,以免我误导别人O(∩_∩)


 

一.servlet版本与tomcat版本不对应

  这个问题真的很致命,因为我自己问题就是出现在这(我承认自己是有点弱智...),我用的Tomcat版本是8.5.x,然后一直用的是4.0的Servlet版本(版本得对应上,不过我之前没对应上的时候好像也可以运行Servlet),这一次做的项目用到了EL表达式,终于在这一次出现问题了,在网上找了那么多方案,兜兜转转原来是出现在这里,于是我重新创建了JavaEE7的项目,选择了3.1版本(我这个项目采用的是注解配置),后来重新布置了下环境,就能运行了

    idea部署web项目,能访问jsp,访问Servlet却出现404错误的解决方法汇总,亲测有效

 

  这里我也给出我在网上搜到的Servlet和Tomcat对应版本的表

 

ervlet Spec JSP Spec EL Spec WebSocket Spec JASPIC Spec Apache Tomcat version Actual release revision Supported Java Versions
4.0 TBD (2.4?) TBD (3.1?) TBD (1.2?) 1.1 9.0.x 9.0.0.M9 (alpha) 8 and later
3.1 2.3 3.0 1.1 1.1 8.5.x 8.5.4 7 and later
3.1 2.3 3.0 1.1 N/A 8.0.x (superseded) 8.0.35 (superseded) 7 and later
3.0 2.2 2.2 1.1 N/A 7.0.x 7.0.70 6 and later
(7 and later for WebSocket)
2.5 2.1 2.1 N/A N/A 6.0.x 6.0.45 5 and later
2.4 2.0 N/A N/A N/A 5.5.x (archived) 5.5.36 (archived) 1.4 and later
2.3 1.2 N/A N/A N/A 4.1.x (archived) 4.1.40 (archived) 1.3 and later
2.2 1.1 N/A N/A N/A 3.3.x (archived) 3.3.2 (archived) 1.1 and later

(表格来源于https://blog.csdn.net/zzy7075/article/details/61918776?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.nonecase


 

二.注解方式的WebServlet配置错误

  这个错误也是很多新人比较容易犯的错误了,采用注解配置的话,idea自动生动的Servlet的模板是

  @WebServlet( name="类名")

  但其实这样并没有配置好路径,我们可以将其改为以下两种方式

  ①@WebServlet( name="类名",urlPatterns="/路径")

  举例:@WebServlet( name="UserListSerlvet",urlPatterns="/userListServlet")

  ②@WebServlet( value="/路径")  ,此处value要是只有一个可以省略

  举例:@WebServlet( "/userListServlet")

  上面的斜杠千万不能落下


  这里开始就说我在网上看到别人出现这个错误,几个比较有代表性的解决方法

三.未能正确部署Web项目到Tomcat上

  (解决方法来源于https://blog.csdn.net/eaphyy/article/details/72513914

  1首先,右击项目,点击 open module settings  

    idea部署web项目,能访问jsp,访问Servlet却出现404错误的解决方法汇总,亲测有效

  2.配置 project,主要是本地 jdk 的安装路径,还有项目编译输出的路径

  idea部署web项目,能访问jsp,访问Servlet却出现404错误的解决方法汇总,亲测有效

 

  3.配置 modules ,其中 paths 定位到 web-inf/classes ;dependencies 加入jdk和项目 web-inf/lib(其实这里默认选择就可以)

   idea部署web项目,能访问jsp,访问Servlet却出现404错误的解决方法汇总,亲测有效   idea部署web项目,能访问jsp,访问Servlet却出现404错误的解决方法汇总,亲测有效

 

 

 

 

 

  4.配置 libraries ,点击 + 号,选择 java ,然后还是选择你项目的 web-inf/lib

  idea部署web项目,能访问jsp,访问Servlet却出现404错误的解决方法汇总,亲测有效

 

 

   5.配置 facets ,此步很重要,配置 web resource directories ,路径配错,就会报 404 ,一定要定位到项目根目录,也就是下面有整个项目源码的地方(这里的话我一开始也有犯了这个错误,因为在项目里面新建个模板,然后也不知道为什么路径会定位到别的地方,所幸最后改过来)

    idea部署web项目,能访问jsp,访问Servlet却出现404错误的解决方法汇总,亲测有效

 

  下图是我引用的博主他犯的错误

  博主原话:“本人就是定位到了另一个地方,导致 404,本来应该到 webroot,结定位到了 web”

  idea部署web项目,能访问jsp,访问Servlet却出现404错误的解决方法汇总,亲测有效

 

   6.配置 artifacts ,此步选择第二个,选择你的项目即可

  idea部署web项目,能访问jsp,访问Servlet却出现404错误的解决方法汇总,亲测有效

 

 

  7、部署到 tomcat,“Run”中的“Edit Configurations...”

    idea部署web项目,能访问jsp,访问Servlet却出现404错误的解决方法汇总,亲测有效

    idea部署web项目,能访问jsp,访问Servlet却出现404错误的解决方法汇总,亲测有效    

    idea部署web项目,能访问jsp,访问Servlet却出现404错误的解决方法汇总,亲测有效

 

 

  (这里其实设置了Deployment的时候前面基本会默认帮我们修改)

 

 


 

 

 四.文件放置到错误位置(非idea)

  博文链接:https://blog.csdn.net/eickandy/article/details/78202047?utm_medium=distribute.pc_relevant.none-task-blog-baidujs-1

  在网上搜索的时候看到了这篇文章,我觉得也应该是比较有效的解决方法,下面的评价都还不错,但看他里面说的那些文件夹的名字好像是用eclipse编辑才会产生的文件名,因为我用的是idea,所以这里就不多阐述,用eclipse的朋友可以去看一下(不过因为这篇文章已经过了两年多了,效果我也不太敢保证,就是在我看到的那一些文章中比较有代表性的吧)。


 

五.未能正确的配置web.xml文件

  这里的话针对的是用web.xml配置访问目录的,这里的话其实要是知道怎么配置基本不会出现这个问题,不过要是编辑错的话确实会出现404错误,这里就稍微提一下

 

1 <servlet>   
2     <servlet-name>HWS</servlet-name>       <!--给serverlet取名字,可任意-->
3     <servlet-class>com.web.servlet.HelloWorldServlet</servlet-class>   <!--指明servlet路径包名+类名,也就是全类名-->
4 </servlet>    
5 <servlet-mapping>   
6     <servlet-name>HWS</servlet-name>       <!--对应上面的名字-->
7     <url-pattern>/hws</url-pattern>   <!--这是在浏览器中输入访问这个servlet的资源定位符,可任意,注意斜杆-->
8 </servlet-mapping> 

 

  这里最后也给出Servlet的一些规范吧

 

  JAVA servlet 2.x规范:
    项目目录结构必须要有WEB-INF,web.xml等文件夹和文件
    在web.xml中配置servlet,filter,listener,以web.xml为java web项目的统一入口


  JAVA servlet 3.x规范:
    项目中可以不需要WEB-INF,web.xml等文件夹和文件
    在没有web.xml文件的情况下,通过注解实现servlet,filter, listener的声明,例如
    @WebServlet, @WebFilter,@WebListener,当使用注解时,容器自动进行扫描。

(原文链接:https://blog.csdn.net/m0_38059795/article/details/78694177


 

   Servlet3.1规范:https://www.cnblogs.com/heartstage/archive/2013/10/10/3362138.html

   Servlet4.0规范:https://www.ibm.com/developerworks/cn/java/j-javaee8-servlet4/index.html?ca=drs-&utm_source=tuicool&utm_medium=referral


 

 

  这篇文章是我花了比较多时间整理出来的吧,原创内容也不多,主要也是说想分享出来给那些同样出现这个问题的朋友参考下,当然可能不一定能解决您的疑惑╮(╯▽╰)╭,最后也再啰嗦一句,因为本人实力较菜,所以如果这篇文章里面有说得不对的地方,也希望大家能指出来,我也不想误导大家。

 

上一篇:关于使用Nacos集群遇到问题 -- code:503 msg: server is STARTING now, please try again later!


下一篇:Android 判断设备 是否使用代理上网