您的位置:首页 > 其它

servlet简单使用

2015-12-12 23:18 387 查看
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> 

此时可以正常运行!

(3)This is classcom.sunyanxiong.servlet.MyServlet, using the GET method

表明项目没有部署成功。

(4)字符集问题:

 (5)注册功能

1)PreparedStatement(预处理执行语句)相比其父类Statement主要有以下几个优点.
1.可以防止SQL注入.  
2.在特定的驱动数据库下相对效率要高(不绝对)
3.不需要频繁编译.因为已经预加载了
 
2)?和下面的数字对应
String sql =
"INSERTINTO login_servlet(username,password,sex,question,answer,email) "
              +"VALUES (?, ?, ?, ?, ?, ?)";
              PreparedStatementps =
conn.prepareStatement(sql);   

             
// 动态赋值
              ps.setString(1,
username);
              ps.setString(2,
password);
              ps.setString(3,sex);
              ps.setString(4,
question);
              ps.setString(5,
answer);
              ps.setString(6,
email);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  servlet