初学者学习servlet常见错误总结(超详细)
初学者在学习servlet有很多容易犯的小错误,造成控制器无法跳转的情况,servlet404错误,servlet500错误。按照步骤彻底解决控制器无法跳转问题!!!
解决问题:
1.问题排除:Tomcat是否可以正常运行
如果不能正常运行需要先排除这个错误
2.问题排除:jsp页面或者html可以直接访问到吗?
如果访问不到说明jsp和html的页面位置有问题,需要调整路径。
** jsp和html的页面要放在webapp目录下 **
如果放在WEB-INF下将不能访问到jsp和html的页面
web项目不使用maven框架的情况下需要在WEB-INF–>lib下放jar包
2.问题排除:查看控制器地址是否一致
表单的跳转地址:
控制器地址:
检查跳转地址是否正确,跳转路径是否正确
另外需要注意的是:我描述的是idea的web骨架方式创建的项目,如果你的项目servlet放的位置和页面放的位置不在同级的话,需要按照实际情况进行修改,建议按照Idea的web骨架创建项目,如果你不会创建javaweb项目可以参考:
问题排除3:在确定配置正常,路由地址正确的情况下,可能是你犯了以下错误:
1.首先看图
在你是初学者编写代码的情况下很可能地址配置正确的情况下导错了相同的WebServlet包,在这里要使用正确的包下的才可以访问到。
需要使用javax.servlet.annotation.WebServlet下的WebServlet才可以正常运行,这里才展示下使用错误后的界面,以便大家排除问题
页面加载正常
点击按钮后出现异常
HTTP状态 404 – 未找到
类型 状态报告
消息 请求的资源[/account]不可用
描述 源服务器未能找到目标资源的表示或者是不愿公开一个已经存在的资源表示。
Apache Tomcat/8.5.85
2.在httpservlet的继承中也可能出现错误,你中招了吗?看图:
在你是初学者编写代码的情况下很可能地址配置正确的情况下,在继承HttpServlet时导错了相同的HtppServlet包,在这里要使用正确的包下的才可以访问到。
错误示例
当你用错的情况下,继承错类依旧可以找到doGet和doPost方法,相信这也是大多数初学者发现不了这个错误的原因。
运行后的错误示例
页面加载正常
点击按钮后出现异常
HTTP状态 500 – 内部服务器错误
类型 异常报告
消息 实例化Servlet类[com.yb.mybatis_demo06.web.AccountServlet]异常
描述 服务器遇到一个意外的情况,阻止它完成请求。
例外情况
javax.servlet.ServletException: 实例化Servlet类[com.yb.mybatis_demo06.web.AccountServlet]异常
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:543)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:698)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:367)
org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:639)
org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
org.apache.coyote.AbstractProtocol
C
o
n
n
e
c
t
i
o
n
H
a
n
d
l
e
r
.
p
r
o
c
e
s
s
(
A
b
s
t
r
a
c
t
P
r
o
t
o
c
o
l
.
j
a
v
a
:
885
)
o
r
g
.
a
p
a
c
h
e
.
t
o
m
c
a
t
.
u
t
i
l
.
n
e
t
.
N
i
o
E
n
d
p
o
i
n
t
ConnectionHandler.process(AbstractProtocol.java:885) org.apache.tomcat.util.net.NioEndpoint
C
o
nn
ec
t
i
o
n
H
an
d
l
er
.
p
rocess
(
A
b
s
t
r
a
c
tP
ro
t
oco
l
.
ja
v
a
:
885
)
or
g
.
a
p
a
c
h
e
.
t
o
m
c
a
t
.
u
t
i
l
.
n
e
t
.
N
i
o
E
n
d
p
o
in
t
SocketProcessor.doRun(NioEndpoint.java:1688)
org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191)
org.apache.tomcat.util.threads.ThreadPoolExecutor
W
o
r
k
e
r
.
r
u
n
(
T
h
r
e
a
d
P
o
o
l
E
x
e
c
u
t
o
r
.
j
a
v
a
:
659
)
o
r
g
.
a
p
a
c
h
e
.
t
o
m
c
a
t
.
u
t
i
l
.
t
h
r
e
a
d
s
.
T
a
s
k
T
h
r
e
a
d
Worker.run(ThreadPoolExecutor.java:659) org.apache.tomcat.util.threads.TaskThread
W
or
k
er
.
r
u
n
(
T
h
re
a
d
P
oo
lE
x
ec
u
t
or
.
ja
v
a
:
659
)
or
g
.
a
p
a
c
h
e
.
t
o
m
c
a
t
.
u
t
i
l
.
t
h
re
a
d
s
.
T
a
s
k
T
h
re
a
d
WrappingRunnable.run(TaskThread.java:61)
java.base/java.lang.Thread.run(Thread.java:833)
根本原因。
java.lang.NoClassDefFoundError: jakarta/servlet/http/HttpServlet
java.base/java.lang.ClassLoader.defineClass1(Native Method)
java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1012)
java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:150)
org.apache.catalina.loader.WebappClassLoaderBase.findClassInternal(WebappClassLoaderBase.java:2478)
org.apache.catalina.loader.WebappClassLoaderBase.findClass(WebappClassLoaderBase.java:881)
org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1384)
org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1228)
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:543)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:698)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:367)
org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:639)
org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
org.apache.coyote.AbstractProtocol
C
o
n
n
e
c
t
i
o
n
H
a
n
d
l
e
r
.
p
r
o
c
e
s
s
(
A
b
s
t
r
a
c
t
P
r
o
t
o
c
o
l
.
j
a
v
a
:
885
)
o
r
g
.
a
p
a
c
h
e
.
t
o
m
c
a
t
.
u
t
i
l
.
n
e
t
.
N
i
o
E
n
d
p
o
i
n
t
ConnectionHandler.process(AbstractProtocol.java:885) org.apache.tomcat.util.net.NioEndpoint
C
o
nn
ec
t
i
o
n
H
an
d
l
er
.
p
rocess
(
A
b
s
t
r
a
c
tP
ro
t
oco
l
.
ja
v
a
:
885
)
or
g
.
a
p
a
c
h
e
.
t
o
m
c
a
t
.
u
t
i
l
.
n
e
t
.
N
i
o
E
n
d
p
o
in
t
SocketProcessor.doRun(NioEndpoint.java:1688)
org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191)
org.apache.tomcat.util.threads.ThreadPoolExecutor
W
o
r
k
e
r
.
r
u
n
(
T
h
r
e
a
d
P
o
o
l
E
x
e
c
u
t
o
r
.
j
a
v
a
:
659
)
o
r
g
.
a
p
a
c
h
e
.
t
o
m
c
a
t
.
u
t
i
l
.
t
h
r
e
a
d
s
.
T
a
s
k
T
h
r
e
a
d
Worker.run(ThreadPoolExecutor.java:659) org.apache.tomcat.util.threads.TaskThread
W
or
k
er
.
r
u
n
(
T
h
re
a
d
P
oo
lE
x
ec
u
t
or
.
ja
v
a
:
659
)
or
g
.
a
p
a
c
h
e
.
t
o
m
c
a
t
.
u
t
i
l
.
t
h
re
a
d
s
.
T
a
s
k
T
h
re
a
d
WrappingRunnable.run(TaskThread.java:61)
java.base/java.lang.Thread.run(Thread.java:833)
根本原因。
java.lang.ClassNotFoundException: jakarta.servlet.http.HttpServlet
org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1420)
org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1228)
java.base/java.lang.ClassLoader.defineClass1(Native Method)
java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1012)
java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:150)
org.apache.catalina.loader.WebappClassLoaderBase.findClassInternal(WebappClassLoaderBase.java:2478)
org.apache.catalina.loader.WebappClassLoaderBase.findClass(WebappClassLoaderBase.java:881)
org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1384)
org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1228)
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:543)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:698)org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:367)
org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:639)
org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
org.apache.coyote.AbstractProtocol
C
o
n
n
e
c
t
i
o
n
H
a
n
d
l
e
r
.
p
r
o
c
e
s
s
(
A
b
s
t
r
a
c
t
P
r
o
t
o
c
o
l
.
j
a
v
a
:
885
)
o
r
g
.
a
p
a
c
h
e
.
t
o
m
c
a
t
.
u
t
i
l
.
n
e
t
.
N
i
o
E
n
d
p
o
i
n
t
ConnectionHandler.process(AbstractProtocol.java:885) org.apache.tomcat.util.net.NioEndpoint
C
o
nn
ec
t
i
o
n
H
an
d
l
er
.
p
rocess
(
A
b
s
t
r
a
c
tP
ro
t
oco
l
.
ja
v
a
:
885
)
or
g
.
a
p
a
c
h
e
.
t
o
m
c
a
t
.
u
t
i
l
.
n
e
t
.
N
i
o
E
n
d
p
o
in
t
SocketProcessor.doRun(NioEndpoint.java:1688)
org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191)
org.apache.tomcat.util.threads.ThreadPoolExecutor
W
o
r
k
e
r
.
r
u
n
(
T
h
r
e
a
d
P
o
o
l
E
x
e
c
u
t
o
r
.
j
a
v
a
:
659
)
o
r
g
.
a
p
a
c
h
e
.
t
o
m
c
a
t
.
u
t
i
l
.
t
h
r
e
a
d
s
.
T
a
s
k
T
h
r
e
a
d
Worker.run(ThreadPoolExecutor.java:659) org.apache.tomcat.util.threads.TaskThread
W
or
k
er
.
r
u
n
(
T
h
re
a
d
P
oo
lE
x
ec
u
t
or
.
ja
v
a
:
659
)
or
g
.
a
p
a
c
h
e
.
t
o
m
c
a
t
.
u
t
i
l
.
t
h
re
a
d
s
.
T
a
s
k
T
h
re
a
d
WrappingRunnable.run(TaskThread.java:61)
java.base/java.lang.Thread.run(Thread.java:833)
):注意 主要问题的全部 stack 信息可以在 server logs 里查看
总结:讲到这里,已经分析了几个初学者出血比较可能犯的错误,希望对你有用,祝各位帅哥美女代码无BUG。