有没有专门做线下活动的网站,本地安装网站无法连接数据库,网页设计职业,广州免费网站建设从网络的早期阶段开始#xff0c;人们就希望他们的网络服务器不仅能够显示静态文档#xff0c;通用网关接口(CGI) 扩展了服务器的能力#xff0c;但其代价是增加了额外的处理进程。FastCGI则把外部CGI 处理进程同网络服务器更紧密地集成在一起#xff0c;另外#xff0c;对…从网络的早期阶段开始人们就希望他们的网络服务器不仅能够显示静态文档通用网关接口(CGI) 扩展了服务器的能力但其代价是增加了额外的处理进程。FastCGI则把外部CGI 处理进程同网络服务器更紧密地集成在一起另外对于专有的诸如NSAPI 和ISAPI 这样的服务器API它们直接把外部进程以服务器插件的形式集成到服务器中。现在有了Java servlets它们的功能强大可以快速替代你现有的CGI程序。 什么是servlets 就象applet扩充了网络浏览器的能力一样servlets这个Java部件扩充了网络服务器的能力。对于任何种类的服务器端的处理Servlets可以作为server-side includes使用或者作为CGI程序(在JavaSoft的Java Web server中可以作为插件)执行。 Servlets可以移植不象CGI和专有的API模块你可以利用Java的“编写一次到处运行”的机制在你的企业中配置网络应用程序。Servlets的运行也很稳固在 servlet 中你创建了一个数据库连接下一次你访问servlet时连接仍然存在这同CGI 程序不一样。Servlets也具有扩展性所以你可以使用面向对象的程序设计方法来减少开发时间。Servlets可以运行在任何支持servlet的网络服务器上。目前servlet SDK除了支持JavaSoft的Java Web server还支持Netscape Apache 和IIS以及大量第三方的网络服务器。 JSDK导游 为了创建servlets你需要Java servlet SDK (JSDK)它可以从JavaSoft网站下载。JSDK包含诸如javax.servletjavax.servlet.http等包其中包含有你自己创建servlets时所需要的类和接口。对于sun.servlet 包来说其中包含了网络服务器用来运行servlets所需要的类。 (对Servlet的支持通常是通过服务器插件的形式)。一旦你有了JSDK你只要创建GenericServlet类的子类并且重载若干方法。GenericServlet 定义了你应该重载的三种主要方法 init() service()和destroy()。 init() 初始化你的servlet诸如打开数据库连接。 destroy()在applet运行结束后清除servlet 自身。 service()每次调用servlet时就调用service()方法。有两个对象 ServletRequest和ServletResponse需要传送给servlet用于处理客户请求。 为了帮助处理基于Web 的事务JSDK 在 javax.servlet.http包中有个HttpServlet类。HttpServlet是从GenericServlet中派生出来的它提供了service()的一个实现该实现用于自动处理GET HEAD和POST的请求。 HttpServlet类中的方法有doGet()和doPost()。一个典型的CGI servlet只需要实现doGet()和doPost()方法。 doGet()和doPost()的参数为HttpServletRequest和HttpServletResponse。 HttpServletRequest是个接口该接口提供了从客户的请求获取信息的一些方法。例如 getParameter()方法返回在客户请求中的关键字/值对(或者从请求串中取得或者从POSTed数据中取得)。 HttpServletResponse提供了输出流使得servlet把HTML格式的输出返回给客户。 基本Servlet代码 代替你的CGI 下面为一段可以取代CGI程序的基本的servlet代码。Servlet完成如下的简单事情列出由HTML表单搜集的关键字/值对key/value。 BasicCGIServlet处理POST也用同样处理GET。所以doPost()和doGet()都调用doService()。doService()可以在子类中重载以实现更多特定的功能。 import javax.servlet.*; import javax.servlet.http.*; import java.io.*; import java.util.*; public class BasicCGIServlet extends HttpServlet { public BasicCGIServlet () { super(); } public void doPost (HttpServletRequest req HttpServletResponse resp) throws ServletException IOException { doService(req resp); } public void doGet (HttpServletRequest req HttpServletResponse resp) throws ServletException IOException { doService(req resp); } protected synchronized void doService (HttpServletRequest req HttpServletResponse resp) throws ServletException IOException { // get an output stream to write to ServletOutputStream out resp.getOutputStream(); // set the content type for the response resp.setContentType (\\text/html\\); // optionally you should also set any special content-encoding // and content length response headers and return status codes // write out the response! out.println (\\body bgcolor\\\\white\\\\\\); out.println (\\ \\); out.println (\\ \\); for (Enumeration e req.getParameterNames(); e.hasMoreElements(); ) { String key (String) e.nextElement(); out.println (\\ \\); } out.println (\\ KeyValue\\ key \\\\ req.getParameter(key) \\ \\); } } 当调用req.getParameterNames()时servlet请求对象读入表单数据并且把它解码为关键字/值对事实上一旦第一次调用getParameterNames()或者getParameterValues()或者getParameter() 时就进行解码)。 getParameterNames()返回所有关键字的列举。getParameter()返回同特定关键字相对应的值。当servlet请求被解析成关键字/值对时每个关键字的值保存在String数组中以便可以处理一个关键字有多个值的情况。调用getParameterValues()返回的是String数组而调用 getParameter()后则仅返回String数组中的第一个元素。 你也许会注意到doService()是个同步化的方法。这是因为servlets 通常是在多线程环境下运行的。因为网络服务器创建的servlet对象只有一个实例所以servlet必须能够对同时发生的请求提供服务。因此Servlets需要确保这些请求在访问共享资源时保持同步。这些共享资源包括实例变量数据库连接和文件流等。 运行你的servlet 一旦编写好servlet并且编译成功之后你可以把它放到网络服务器中servlet别名目录中。就同服务器中的cgi-bin别名目录的作用一样任何放在servlet 目录中的文件一旦被作为url的一部分被请求时将被作为servlets执行。例如BasicCGIServlet可以通过如下的url调用: http://mycompany.com/servlet/BasicCGIServlet。你既可以直接调用该url (并且传送给servlet一个请求关键字/值对的串)也可以通过HTML表单中的一个动作来调用。要了解更多的支持servlet的网络服务器的信息请参阅JSDK中的有关文档信息。 进一步的用法 GenericServlet和 HttpServlet提供了一个构建servlets的固定的基类。通过重载service()方法你可以在它们的基础上进行构建。例如你可以加入对响应缓存的支持请参见HttpServlet 中的getLastModified()也可以加入对HTTP 1.1方法的支持等等。你甚至可以构建一个扩展的模板引擎。有谁真的喜欢在他们的程序中内置HTML代码呢 另外一个用法是对JSDK进行扩展使之除了支持标准的application/x-www-form-urlencoded mime 类型之外还支持其他类型的表单编码。例如你可以加入对multipart/form-data mime类型的支持用于处理通过HTTP上载文件。接口方法getParameterNames() getParameterValues()等等都是在sun.servlet包中实现的所以你需要配置JSDK 以便加入这些支持。还有一种变通的方法你可以自己实现有关方法但那样做就需要复制代码或者改变JSDK的语义。上面的这些方法都是可行的但是没有哪一种是完美无缺的。 结论 现在你应该会自己创建Java servlets了它们可以用来代替传统的Perl和C/C CGI程序。 Java的面向对象的特性和“编写一次到处运行”的机制使得Java servlets的编写很简单。Servlet的稳固性可以解决有关状态管理问题而这些都是只用一次的CGI程序解决实际问题时通常会遇到的难题。 Servlets可以利用Java语言的所有功能包括JDBC和RMI。由于大多数网络服务器都加入了对servlet的支持Java将迅速成为开发企业级应用程序的一种可选语言。转载于:https://www.cnblogs.com/liangxiaofeng/p/4910979.html