【Java Web问题解决】Tomcat报错javax.servlet.ServletException: Error instantiating servlet class.报错404

Tomcat报错:javax.servlet.ServletException: Error instantiating servlet class.

报错404:The origin server did not find a current representation for the target resource or is not willing to disclose that one exists.

本菜鸟目前正在学习Java Web编程

于是,就准备做一个注册,提交信息并进行信息显示的例子

满心欢喜地写好register.html文件以及DoRegister.java(Servlet文件)

一运行,果不其然

报错了!!!

在这里插入图片描述
在这里插入图片描述
报错是:404未找到The origin server did not find a current representation for the target resource or is not willing to disclose that one exists.

看到这个报错我内心是绝望的,因为我已经在Servlet中用@WebServlet注解设置了Servlet的映射了

然鹅,它还是不给面子报错

在这里插入图片描述
绝望归绝望,问题还是得解决

作为初学者,报错很正常,关键在学会怎么解决问题

于是我就在网上找各种方法

在Servlet中设置了映射却还是报错找不到,有如下几种原因:

  • Servlet访问路径错误:html中表单提交的action的值和你的Servlet映射访问名不一致,导致404找不到Servlet文件

  • JDK或Tomcat版本过低:支持注解必须是JDK5.0以后以及Tomcat7.0以上

  • Servlet版本过低:支持注解进行配置的必须是Servlet 3.0及以上版本

然鹅
在这里插入图片描述
我的Servlet版本3.1,是支持注解配置的,再找原因

  • web.xml中设置了注解无效:matadata-complete属性值设置为“true”则表示不能通过注解进行配置,只能通过web.xml文件进行配置,如下图
    在这里插入图片描述
    要想通过注解进行配置则应设置matadata-complete值为“false”或直接删除matadata-complete属性

也可以试着不用注解配置,在web.xml中配置映射路径

 7     <servlet>
 8         <!--自定义,一般为类名-->
 9         <servlet-name>servletDemo1</servlet-name>
10         <!--一定是package + .类名-->
11         <servlet-class>day08_servlet.ServletDemo1</servlet-class>
12     </servlet>
13     <!--给Servlet提供(映射)一个可供客户端访问的URI-->
14     <servlet-mapping>
15         <!--和servlet中的name必须相同-->
16         <servlet-name>servletDemo1</servlet-name>
17         <!-- servlet的映射路径 -->
18         <url-pattern>/servlet</url-pattern>
19     </servlet-mapping>

很多问题到这里就得到解决了

然鹅,我就是没有matadata-complete属性

所以,也不是这个问题

在这里插入图片描述
再继续找原因

网上有说是Servlet的编译生成的.class文件没有放在目录下,要创建带包名的文件夹,再把.class文件复制过去

于是我就把com.demo包直接给复制过去了,再运行

依旧报错
在这里插入图片描述
时间已是凌晨2.00

我。。。。。。
在这里插入图片描述
不过我觉得稍稍前进了一点,报错500,表示服务器错误,我觉得这样会更好解决一点,比直接404一头雾水要好

看看报错原因:javax.servlet.ServletException: Error instantiating servlet class.[com.demo.DoRegister]

意思是我定义的com.demo包中的DoRegister出错了

我的项目中WEB-INF中没有class文件!!!

在哪儿呢?

在这里插入图片描述

再看了一下项目的WEB-INF文件夹中的确没有Servlet文件编译生成的.class文件

这样就会报错

终于找到问题所在了

在这里插入图片描述
解决办法如下:

右击项目–>配置(properties)–>java构建路径(java build path)–>源码(source)–>[项目名]/src–>将缺省时输出文件夹(Default output folder)设置为[项目名]/WebContent/WEB-INF/classes–>点击应用或OK

具体如下图所示:
在这里插入图片描述
这时,在项目文件夹的WEB-INF中会看到有

在这里插入图片描述
再运行项目
register.html中输入信息进行注册:
在这里插入图片描述
点击“提交”显示注册信息:
在这里插入图片描述
信息就正常显示啦啦啦

在这里插入图片描述
问题成功解决后心中还是有一丝激动的

后来又研究了一下

之前也有Servlet的编译生成的文件,只不过在build文件夹中

这是在新建项目时就设置好的

在这里插入图片描述
但是,项目的WEB-INF文件夹下没有生成的.class文件的话就会报错

所以,下次在新建项目的时候就应该设置好

从昨晚到现在的问题终于完美解决

Bingo!!!
在这里插入图片描述

相关技术文章:
【比较】什么是“服务器端跳转”“客户端跳转”,二者有什么区别?
【总结】表单提交的get和post有什么不同?
【总结】Java Web 中的4种属性范围(page、request、session、application)
【问题解决】Tomcat启动时控制台出现中文乱码的问题解决方法
【示例项目】java实现通过身份证号码判断籍贯所在地区

  • 17
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值