首页 > Linux操作系统 > Linux操作系统 > 【原创】Servlet与JSP
熟悉Java的开发人员对Servlet和JSP肯定不陌生。Servlet是可以运行在WEB容器中的Java类,它会接收和处理从客户端发送来的请求,并把处理的结果返回给客户端。在WEB应用的开发中,通过HttpServlet处理客户端(浏览器)的请求。HttpServlet继承于GenericServlet类,实现了Http协议,通常可以通过HttpServlet处理浏览器端的请求,生成动态的WEB页。
JSP(Java Server Page)是可以执行Java代码和Html标记的WEB页面,在JSP中用户还能够调用传统的Java类、标签库和使用Html标记。实际上,JSP在运行的时候是被编译成Servlet运行的,也就是说JSP是Servlet的扩充。
一、Servlet和JSP
对开发人员而言,要响应浏览器发送的Http请求,继承HttpServlet类实现请求处理的方法即可。HttpServlet的类继承关系如图所示:
图 HttpServlet类继承关系
HttpServlet对Http请求提供了非常好的封装,与Servlet生命周期相关的方法有如下一些:
1. init
Init方法在Servlet第一次加载时执行。
2. service
当响应请求时,service方法被新的线程在调用,它将会根据请求的性质把请求分发给doGet、doPost方法等处理,一般情况下不要尝试重新实现service方法。
3. doGet
当客户端发送GET请求后,服务器端调用Servlet的doGet方法,一般需要重新实现此方法,处理Http的GEF请求。
4. doPost
当客户端发送POST请求后,服务器端调用Servlet的doPost方法处理Http的POST请求。一般需要重新实现此方法,处理Http的POST请求。
如果希望处理GET请求的方式和处理POST请求的方式相同,可以在此方法中调用doGet方法,而实际的实现方法在doGet中。
5. doPut, doTrace, doDelete等
处理不是很常用的PUT和TRACE等请求。
6. destroy
当容器销毁Servlet时,将会调用此方法。此方法不会在每响应一个请求后调用。
所有这些方法都不是抽象方法,可以根据实际需求实现某些方法,以处理相应的Http请求。Servlet是基于多线程模式的,而且当处理了一个请求后,Servlet不一定会被销毁,可以想像有一个Servlet的线程池在对Servlet类进行调度,从而提高服务器端的响应效率。
Servlet是通过请求响应的方式与客户端(例如浏览器)通信的,通过HttpServletRequest接收客户端的请求,通过HttpServletResponse返回客户端的请求,如图所示。
HttpServletRequest和HttpServletResponse是Servlet和浏览器之间通信的手段,Servlet可以通过HttpServletRequest读取浏览器端传来的参数,并通过HttpServletResponse把处理的结果返回浏览器。要处理和响应客户器的请求最少要分成两步:
1. 读取浏览器端传递过来的参数。
HttpServletRequest的getParameter和getParameterValues可以接收客户端传递过来的参数,getParameter返回匹配的第一个参数,返回值为String类型的变量,而getParameterValues返回匹配的所有值,返回值为String类型的数组。
2. 返回浏览器可识别的Html标记。
HttpServletRequest的getWriter方法可以得到向浏览器传递信息的一个Writer,通过Writer可以发送信息到浏览器端。类似于System.out.println("message..."),可以把信息输出到显示器。HttpServletRequest的Writer可以把信息输出到浏览器。例如:writer.println(htmlStr),htmlStr变量为包含html页面的String类型的变量。
JSP是Java Server Page的缩写,它是Servlet的扩展,实际运行时,容器通过JVM(Java虚拟机)把JSP重新编译成Servlet运行。JSP中可以由Html标记、Java程序片断(Scriptlet)和标签组成,从而可以实现在JSP页面中操纵数据库、重定向网页以及发送E-mail等功能,实现动态网站的建立。
JSP存在的目的是分离前台逻辑和后台业务,使开发人员的分工更具体,例如美工可以更关注前台页面的设计,程序员更关注后台具体逻辑的实现。
二、Servlet和JSP的实现
在开发WEB应用时,可以简单的把JSP看成是WEB页面,而Servlet是服务器端后台处理的服务程序。下面将通过在JSP页面中输入三个值,在Servlet读取这三个值并输出一个Html页面到浏览器端,JSP代码如下代码所示。
HelloKittyJsp.jsp
在此JSP页面中有三个Input输入框,分别是param1、param2和param3,可以在此输入框中输入相应的值,单击提交按钮向服务器端Servlet发送请求。JSP页面运行结果如图所示。
图 JSP页面运行结果
当单击提交按钮后,JSP页面将会把输入的值kitty1、kitty2和kitty3发送给HelloKittyServlet指定的Servlet处理。Servlet代码如下代码所示。
HttpServlet.java
public class HelloKittyServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter ut = response.getWriter();
String title = "Reading Three Request Parameters";
out.println(""
+ "
HelloKittyServlet首先取得一个Writer,通过Writer生成一个动态的网页,在此页面中显示出上一个JSP页面输入的值,程序运行后浏览器端的显示结果如图所示。
图 HelloKittyServlet的输出结果
HelloKittyJsp 和HelloKittyServlet演示了一个Http请求的响应过程,但在开发过程中还会遇到Cookie、隐含对象的使用、数据的作用范围等等的技术细节,因为篇幅的关系没法一一介绍,开发时候可以参考具体的开发书籍。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/13081368/viewspace-438817/ ,如需转载,请注明出处,否则将追究法律责任。