本菜鸟目前正在学习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中配置映射路径
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包直接给复制过去了,再运行
我。。。。。。
不过我觉得稍稍前进了一点,报错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文件的话就会报错
所以,下次在新建项目的时候就应该设置好
从昨晚到现在的问题终于完美解决
相关技术文章:
【比较】什么是“服务器端跳转”“客户端跳转”,二者有什么区别?
【总结】表单提交的get和post有什么不同?
【总结】Java Web 中的4种属性范围(page、request、session、application)
【问题解决】Tomcat启动时控制台出现中文乱码的问题解决方法
【示例项目】java实现通过身份证号码判断籍贯所在地区