在JavaWeb中,Servlet是一个重要的概念,然而之前只知道如何大致的使用,面试的时候才发现自己对Servlet的概念很模糊,导致在回答面试官“对Servlet的理解”时回答的很含糊。接着这篇博客,来对Servlet的概念做一下总结。
前言:Servlet是运行在Web服务器端的Java程序,可以生成动态的Web页面,属于客户与服务器响应的中间层。实际上,jsp在底层就是一个Servlet。
认识Servlet:在运行jsp时,服务器底层将jsp会编译成一个java类,这个类就是Servlet。可以说,jsp就是Servlet,两者可以实现同样的页面效果,不过编写两者相比,jsp成本低的多。那么既然这样,Servlet还有什么学习的价值?Servlet属于jsp的底层,学习它有助于了解底层细节;另外,Servlet毕竟是一个java类,适合纯编程,如果是纯编程的话,比将java代码混合在HTML中的jsp要好的多。
编写Servlet:
1.首先,建立Servlet
这个过程需要让建立的Servlet类继承自javax.servlet.http.HttpServlet,重写HttpServlet的doGet()方法,在web.xml中配置Servlet,部署Servlet,最后测试Servlet
2.Servlet运行机制
给一个Servlet增加了一个构造函数,并在doGet函数中也打印一个标记。
第一次访问运行了构造函数和doGet函数,而第二次访问仅运行了doGet函数,这说明两次访问总共只创建一个对象
虽然只创建了一个对象,很多个用户同时访问的时候也不会造成等待。因为Servlet是采用的多线程机制,每一次请求,系统就会分配一个线程来运行doGet函数。但是这样也会带来线程安全问题,一般来说不要在Servlet内定义成员变量,除非这些成员变量是所有用户公用的。
Servlet生命周期
Servlet内的方法有以下几个:
init()方法,
doGet()/doPost()/service(),
destroy()方法
Servlet与jsp内置对象
①获得out对象
PrintWriter out=response.getWriter();
②③获得request对象和response对象
request和response对象只需将doGet或doPost方法中的参数当成对象使用即可
④获得session对象
HttpSession session=request.getSession();
⑤获得application对象
ServletContext application=this.getServletContext();
在Servlet中读取参数
1.设置参数
有些和系统有关的信息,如系统中的字符编码,或者数据库连接的信息,最好保存在配置文件中,在使用这些配置时,从配置文件中读取。web.xml文件设置参数,提供了好的方法。
①.设置全局参数,该参数所有的Servlet都可以访问
<context-param>
<param-name>参数名(encoding)</param-name>
<param-value>参数值(utf-8)</param-value>
</context-param>
②.设置局部参数,该参数只有相应的Servlet可以访问
<servlet>
<servlet-name>Servlet名称(InitServlet)</servlet-name>
<servlet-class>Servlet类路径(servlets.InitServlet)</servlet-class>
<init-param>
<param-name>参数名(driverClassName)</param-name>
<param-value>参数值(sun.jdbc.odbc.JdbcOdbcDriver)</param-value>
</init-param>
</servlet>
2.获取参数
获取全局参数的方法:
ServletContext application=this.getServletContext();
application.getInitParameter("参数名称");
获取局部参数的方法:
this.getInitParameter("参数名称");