servlet(简单应用,500和404错误)
Servlet是位于web服务器端内部的服务器端的java应用程序,可以对web浏览器和其它http客户端程序发送数据进行处理。1. 生命周期(1)在web容器启动或者客户端第一次请求服务器时,容器加载servlet类并将其放到实例池中;(2)实例化后调用init()进行初始化操作;(3)容器通过service()方法处理不同的http请求,并做出响应;(4)关闭web容器时,容器调用destro
第二部分 servlet技术
Servlet是位于web服务器端内部的服务器端的java应用程序,可以对web浏览器和其它http客户端程序发送数据进行处理。
1. 生命周期
(1) 在web容器启动或者客户端第一次请求服务器时,容器加载servlet类并将其放到实例池中;
(2) 实例化后调用init()进行初始化操作;
(3) 容器通过service()方法处理不同的http请求,并做出响应;
(4) 关闭web容器时,容器调用destroy()方法进行资源释放,在这之后servlet对象会被当作垃圾被回收器回收。
2. 区别
3. 配置servlet类(web.xml)
4.Servlet运行出错
(1)首次运行错误为:
HTTP Status 500 - Error instantiating servlet class test.Test
具体错误为:
type Exception report
message Error instantiating servlet class test.Test
description The server encountered an internal error that prevented it from fulfilling this request.
exception
javax.servlet.ServletException: Error instantiating servlet class test.Test
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1041)org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:603)org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.doRun(AprEndpoint.java:243
org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:241java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)java.lang.Thread.run(Thread.java:744)
root cause
java.lang.InstantiationExceptionsun.reflect.InstantiationExceptionConstructorAccessorImpl.newInstance(InstantiationExceptionConstructorAccessorImpl.java:48)
java.lang.reflect.Constructor.newInstance(Constructor.java:526)
java.lang.Class.newInstance(Class.java:374)org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1041)
org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:603)org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.doRun(AprEndpoint.java:2430
org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:2419
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
java.lang.Thread.run(Thread.java:744)
note The full stack trace of the root cause is available in the Apache Tomcat/7.0.47 logs.
解决方法:
在书写servlet类时要系列化,即private static final longserialVersionUID = 1L;
解释:serialVersionUID 用来表明类的不同版本间的兼容性。如果你修改了此类, 要修改此值。否则以前用老版本的类序列化的类恢复时会出错。为了在反序列化时,确保类版本的兼容性,最好在每个要序列化的类中加入private static final long serialVersionUID这个属性,具体数值自己定义。用来作为Java对象序列化中的版本标示之用;
如果一个序列化类没有声明这样一个static final的产量,JVM会根据各种参数为这个类计算一个;
对于同样一个类,不同版本的JDK可能会得出不同的serivalVersionUID;
(2)再次运行出错
解决方法:
去掉web.xml文件中的
<welcome-file-list>
<welcome-file>index.html </welcome-file>
<welcome-file>index.htm </welcome-file>
<welcome-file>index.jsp </welcome-file>
</welcome-file-list>
此时可以正常运行!
更多推荐
所有评论(0)