本文共 3324 字,大约阅读时间需要 11 分钟。
一 简介
Servlet是一种服务器端的Java应用程序,具有独立于平台和协议的特性,可以生成动态的Web页面。 它担当客户请求(Web浏览器或其他HTTP客户程序)与服务器响应(HTTP服务器上的数据库或应用程序)的中间层。 Servlet是位于Web 服务器内部的服务器端的Java应用程序,与传统的从命令行启动的Java应用程序不同,Servlet由Web服务器进行加载(如TOMCAT),该Web服务器必须包含支持Servlet的Java虚拟机。
Servlet替代了传统CGI程序。
Servlet可以访问几乎所有JDK API 使用HTTP协议与客户端进行通信。
servlet用特定的Java解决方案替代了其他Web服务器端编程模式(如CGI),servlet继承了Java 所有特性 比如跨平台 多线程 面向对象。
JSP技术实际是Servlet技术的拓展,用于支持HTML和xml,JSP页面在首次运行时将被Web服务器转换为Servlet程序,然后在WEB服务器中运行
Servlet | Applet |
运行在服务器 | 运行在客户端 |
装载在Web服务器上执行 | 装载在Web浏览器上执行 |
客户端请求→服务器→Servlet
当启动Web服务器或客户端第一次请求服务的时候,自动载入servlet。直到web服务器关闭结束。
1.返回包含处理结果的HTML片段或整个页面。
2.读取用户发来的隐藏/显式数据。
3.与其他服务器资源通信。
4.通过状态代码和响应头向客户端发送隐藏数据。
三 生命周期
始于被装入Web服务器内存,在服务器终止时结束。经历4个阶段:装入 初始化 调用 销毁
1.初始化
servlet容器完成加载servlet类和实例化serlvet对象后 init()开始执行完成初始化功能,这个动作在生命周期中仅有一次。
2.调用
收到客户端请求→ 服务器创建针对于该请求的servletRequest类型的对象和servletResponse类型的响应对象。调用service()方法进行处理。若自定义的servlet类重写了doGet()或者doPost()方法 ,那么service()不必重写,因为它会默认调用这两个方法。
3.销毁
servlet被销毁前会调用一次destroy()方法。
JAVA servlet API
servlet提供了两个基本软件包 javax.servlet 和 javax.servlet.http
未完待续
写一个servlet的例子:
第一步 把这段java文件放到src里面
package servlet;import java.io.IOException;import java.io.PrintWriter;import java.util.Enumeration;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class CircleServlet extends HttpServlet { //这里是响应get提交方式 public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html; charset=utf-8");// 返回html PrintWriter out = response.getWriter(); double r = Double.parseDouble(request.getParameter("r")); out.println("面积:" + Math.PI * r * r); out.close(); } //这里是响应post提交方式 public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html; charset=utf-8");// 返回html PrintWriter out = response.getWriter(); // double r = Double.parseDouble(request.getParameter("r")); Enumeration paras = request.getParameterNames(); while (paras.hasMoreElements()) { String name = paras.nextElement().toString(); out.println("提交的参数名是" + name +"你提交的参数是:" + request.getParameter(name)); } // double r = 1; // out.println("面积:" + Math.PI * r * r); out.close(); }}对于不同的提交方式(get post)会有不同的响应。
第二步
在WEB-INF的web.xml里配置,如果用MyEclipse的话会有界面化的配置选项,首先在servlet里面ADD, servlet -Name写类名 servlet-class写包名+类型 比如:servlet.CircleServlet。这里就添加了一个servlet,然后还要添加在访问什么url的时候调用这个servlet,在 servlet Mappings里面 ADD, servlet -Name跟上面一样,URL可以写/area。
如图
第三步:
写调用serlvet的JSP:
<%@ page language="java" import="java.util.*" pageEncoding="gbk"%>注意action里写的URL,方法选择的是get,运行后结果如图:
在init方法中可以读取一些东西哦
比如读取网站实际物理途径
String path = null; public void init(ServletConfig config) throws ServletException { super.init(config); path = config.getServletContext().getRealPath("/"); }web.xml里可以放一些键值对作为全局变量,比如在web.xml里添加context param: name:myName value:风吹草地屁屁凉
然后init这么写
String path = null; public void init(ServletConfig config) throws ServletException { super.init(config); path = config.getServletContext().getInitParameter("myName"); System.out.println(path); //注意这里,这句是显示到启动tomcat的dos界面里,而且是当第一次访问servlet时显示,证明了当用户第一次访问servlet时它才被初始化并调入内存. }
转载地址:http://lgyvb.baihongyu.com/