友点企业网站管理系统模板,上海诚杰华建设工程咨询有限公司网站,中国建设银行网上银行登录,广西上林建设局网站Servlet技术
Servlet是用Java语言编写应用到Web服务器端的扩展技术。它先于JSP产生#xff0c;可以方便的对Web应用中的HTTP请求进行处理。在Java Web程序开发中#xff0c;Servlet主要用于处理业务逻辑#xff0c;它比JSP更具有业务逻辑层的意思。而且Servlet的安全性、扩…Servlet技术
Servlet是用Java语言编写应用到Web服务器端的扩展技术。它先于JSP产生可以方便的对Web应用中的HTTP请求进行处理。在Java Web程序开发中Servlet主要用于处理业务逻辑它比JSP更具有业务逻辑层的意思。而且Servlet的安全性、扩展性以及性能方面十分优秀。在Java Web程序开发及MVC模式的应用方面起到了十分重要的作用。
Servlet基础
1.Servlet结构体系 如图所示Servlet、ServletConfig与Serializable都是接口。其中Serializable是java.io包中的序列化接口,Servlet和ServletConfig是javax.servlet包中的接口。GenericServlet是一个抽象类它分别实现了上述的三个接口。GenericServlet为Servlet和ServletConfig提供了部分实现但是它没有对HTTP请求中的GETPOST等类型提供具体的操作方法。一般情况下我们所编写的Servlet对象都继承自HttpServlet在开发中所使用的具体Servlet对象就是HttpServlet对象因为HttpServlet是Servlet的实现类并提供了HTTP请求的处理方法。 2.Servlet技术的特点
功能强大
Servlet采用Java编写它可以调用Java API中的对象及方法。此外Servlet对Web应用进行了封装提供了Servlet对Web应用的编程接口还可以对HTTP请求进行相应的处理。 可移植性强
Java语言是可以跨平台的由于Servlet是用Java编写因此Servlet继承了Java的优点。 性能高效
Servlet对象在Servlet容器启动时被初始化当第一次请求时Servlet容器将其实例化此时它贮存于内存中。如果存在多个请求Servlet不会再被实例化仍然由此Servlet对其进行处理。每个请求都是一个线程而不是进程因为Servlet十分高效 安全性高
Servlet使用了Java的安全框架同时Servlet容器还可以为Servlet提供额外的功能因此安全性很高。 可扩展性
Java语言是面向对象的语言 Servlet是由Java编写它继承了Java的面向对象的特点在业务逻辑处理中可以通过封装继承等来扩展实际的业务需求扩展性很强。 3.Servlet与JSP的区别
角色不同
JSP可以存在Java代码和HTML代码并存的情况。Servlet需要承担客户请求与业务处理的中间角色只有调用固定的方法才能将动态的内容输出为静态的HTML代码。所以JSP更具有显示层的角色。 编程方法不同
Servlet与JSP在编程方法上区别很大。使用Servlet开发Web需要遵循Java的标准而JSP需要遵循一定的脚本语言规范。在Servlet代码中需要调用Servlet提供的相关API接口方法才可以对HTTP请求及业务进行处理对于处理业务逻辑方面的处理能力更加强大些。在JSP页面中通过HTML代码与JSP内置对象实现对HTTP请求及页面的处理其显示界面的功能更加强大些。 Servlet需要编译后运行
Servlet需要在Java编译器编译后才可以运行如果Servlet编写完成或修改完成后没有被重新编译则不能运行在Web容器中。JSP则与之相反JSP由JSP Container对其进行管理他的编译过程也是由JSP Container对其进行编译所以无论JSP文件被创建或是修改都不需要对其编译即可执行。 速度不同
由于JSP页面由JSP Container对其进行管理在每次执行不同内容的动态JSP页面时JSP Container都要对其进行编译所以他的效率低于Servlet的效率。而Servlet在编译完后将不再需要进行编译可以直接获取及输出动态内容。在JSP页面中的内容没有变化的情况下JSP编译完成后JSP Container不会再次对其进行编译。 4.Servlet代码结构
在Java中通常所说的Servlet指的是HttpServlet对象。在声明一个对象为Servlet时需要继承HttpServlet类。HttpServlet类是Servlet接口的一个实现类继承该类后可以重写HttpServlet类中的 方法对HTTP请求进行处理。其代码结构如下
范例
创建一个名为TestServlet的Servlet。
package com.zgy.servlet; import java.io.IOException; import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; public class TestServlet extends HttpServlet {
// 初始化方法
public void init() throws ServletException { } // 处理HTTP Get请求
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { } // 处理HTTP Post请求
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { } //处理HTTP Put请求
public void doPut(HttpServletRequest request,HttpServletResponse response)
throws ServletException,IOException{ } //处理HTTP Delete请求
public void doDelete(HttpServletRequest request,HttpServletResponse response)
throws ServletException,IOException{ } //销毁方法
public void destroy(){
super.destroy();
} } 以上代码显示了一个Servlet对象的代码结构。TestServlet类通过继承HttpServlet类被声明为一个Servlet对象。该类中包含了6个方法其中init()方法和destroy()方法为Servlet初始化与生命周期结束所调用的方法。其余4个方法为Servlet针对不同的HTTP请求类型所提供的方法。 Servlet API编程常用接口和类
1.Servlet接口
在Servlet开发中任何一个Servlet对象都要直接或间接地实现javax.servlet.Servlet接口。在该接口中包含了5个方法其功能分别如下 方法 说明 public void init(ServletConfig config) Servlet实例化后Servlet容器调用该方法来完成初始化工作 public void service(ServletRequest request,ServletResponse response) 处理客户端请求 public void destroy() 当Servlet对象从Servlet容器中移除时容器调用该方法以释放资源 public ServletConfig getConfig() 用于获取Servlet对象的配置信息反悔ServletConfig对象 public String getServletInfo() 返回有关Servlet的信息他是纯文本格式的字符串 范例
创建一个Servlet实现向客户端输出字符串
package com.zgy.servlet; import java.io.IOException;
import java.io.PrintWriter; import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse; public class StringServlet implements Servlet { Override
public void destroy() {
// TODO Auto-generated method stub } Override
public ServletConfig getServletConfig() {
// TODO Auto-generated method stub
return null;
} Override
public String getServletInfo() {
// TODO Auto-generated method stub
return null;
} Override
public void init(ServletConfig arg0) throws ServletException {
// TODO Auto-generated method stub } Override
public void service(ServletRequest request, ServletResponse response)
throws ServletException, IOException {
// TODO Auto-generated method stub
PrintWriter pw response.getWriter();
pw.write(hello world);
pw.close();
} }
在Servlet中主要的方法是service()方法当客户端请求来到时Servlet容器将调用Service()方法对请求进行处理。本例中在service()方法中首先通过ServletResponse类的getWriter()方法得到一个PrintWriter()类型的输出流然后使用该输出流向客户端输出字符串。 2.ServletConfig接口 ServletConfig接口位于javax.servlet包中他封装了Servlet的配置信息在Servlet初始化期间传递。每一个Servlet都有且仅有ServletConfig对象。该对象定义的4个方法如下 方法 说明 public String getInitParameter(String name) 返回String类型的名称为name的初始化参数的值 pubic Enumeration getInitParameterNames() 获取所有初始化参数的枚举集合 public ServletContext getServletContext() 用于获取Servlet上下文 public String getServletName() 返回Servlet对象的实例名 3.HttpServletRequest接口
HttpServletRequest接口位于javax.servlet.http包中继承了javax.servlet.ServletRequest接口是Servlet中的重要对象。在开发过程中较为常见。其方法说明如下 方法 说明 public String getContextPath() 返回请求的上下文路径次路径以“/”开头 public Cookies[] getCookies() 返回请求中发送的所有cookie对象返回值为cookie数组 public String getMethod() 返回请求所使用的HTTP类型 public String getQueryString() 返回请求中参数的字符串形式如请求MyServlet?usernamemr,则返回usernamemr public String getRequestURI() 返回主机名到请求参数之间的字符串形式 public StringBuffer getRequestURL() 返回请求URL此请求参数不包含请求参数 public String getServletPath() 返回请求URI中的Servlet路径的字符串不包含请求中参数信息 public HttpSession getSession() 返回与请求关联的HttpSession对象 4.HttpServletResponse接口
HttpServletResponse接口位于javax.servlet.http包中他继承了javax.servlet.ServletResponse接口同样是一个非常重要的方法。方法说明如下 方法 说明 public void addCookie(Cookie cookie) 向客户端写入cookie信息 public void setError(int sc) 发送一个错误码为sc的错误响应到客户端 public void setError(int sc,String msg) 发送一个包含错误码及错误信息的响应到客户端参数sc为错误码参数msg为错误信息 public void sendRedirect(String location) 使用客户端重定向到新的URL参数location为新的地址
5.GenericServlet类
在创建一个Servlet对象时必须实现javax.servlet.Servlet接口此接口中包含5个方法也就是说创建一个Servlet对象要实现这5个方法这样的操作实在不便javax.servlet.GenericServlet类简化了此操作实现了Servlet接口。
public abstract class GenericServlet extends Object implements Servlet,ServletConfig,Serializable
该类实现了出service()之外的所有方法在创建Servlet对象时可以通过继承GenericServlet类来简化程序中的代码但要实现service()方法。
6.HttpServlet类
虽然GenericServlet为程序开发提供了方便但是在实际开发中大多数应用的是Servlet处理HTTP请求并对请求做出相应。所以在开发中使用GenericServlet类仍然还是不方便。javax.servlet.http.HttpServlet类对GenericServlet类进行了扩展为HTTP请求的处理提供了灵活的方法
Public abstract class HttpServlet extends GenericServlet implements Serializable
HttpServlet仍然是一个抽象类实现了service()方法并针对HTTP1.1中定义的7中请求类型提供了响应的方法。分别为doGet()方法doPost()方法doPut()方法doDelete()方法doHead()方法doTrace()方法doOptions()方法。在这7个方法中只对doTrace()和doOption()方法进行了实现其他方法都没有实现需要开发人员在使用中根据实际需要对其进行重写。