1.Servelet是什么

sevlet是Server与Applet 的缩写,即服务端小程序。Sun公司提供的开发动态web资源的技术。

servelet本质是java类,但遵循Servlet规范,没有main方法,创建、使用、销毁都在Servlet容器,如:Tomcat, Jetty, resin, Oracle Application server, WebLogic Server, Glassfish, Websphere, JBoss等

Servlet是和HTTP协议是紧密联系的,其可以处理HTTP协议相关的所有内容。

java applet,java应用小程序,运行在客户端Java程序组件,运行于特定“容器”。

Java Servlet是运行在Web服务器或应用服务器上的程序。它是Web浏览器或其他http请求与服务器上数据库、应用程序的中间层。

应用:使用servlet,可以收集网页表单的用户输入,呈现数据库或其他数据源的记录,还支持动态创建网页,架构图如下所示:

Servlet主要任务

  • 读取客户端发送的显式数据,包括网页上Html表单、applet或自定义的客户端程序表单;
  • 读取客户端发送的隐式数据,包括cookies、媒体类型和浏览器理解的压缩格式。
  • 处理数据,包括访问db、执行RMI或CORBA调用、调用Web服务,或者直接计算得到响应;
  • 发送显式数据(文档)到客户端,包括文本文件html xml、二进制文件gif、excel等;
  • 发送隐式数据到客户端,包括文档类型、设置cookies和缓存参数等

生命周期

  • init() 初始化
  • service() 方法来处理客户端的请求
  • destroy() 方法终止(结束)
  • Servlet是由 JVM 的垃圾回收器进行垃圾回收

如下图,请求到达服务器后被委派给Servlet容器,容器加载Servlet实例并调用service()方法,容器处理多个请求线程,每个线程执行单一servlet实例的service方法。

Servlet创建于用户第一次调用,但也可指定在服务器启动时加载;当用户调用一个servlet,对应产生一个servlet实例,每个用户请求产生一个线程。 

init():创建和加载的数据,存在于servlet整个生命周期

service() :实际执行任务的方法。容器调用service(),该方法检查HTTP类型并调对应方法(doPost, doGet, doPut, doDelete);

destroy():仅在 Servlet 生命周期结束时被调用。destroy()方法可以让您的 Servlet关闭数据库连接、停止后台线程、把 Cookie列表或点击计数器写入到磁盘,并执行其他类似的清理活动。

2 Servlet Demo

javac 编译生成HelloWorld.class文件

Servlet部署:

Servlet应用程序位于路径 <Tomcat-installation-directory>/webapps/ROOT下,且类文件放在 <Tomcat-installation-directory>/webapps/ROOT/WEB-INF/classes中,并在<Tomcat-installation-directory>/webapps/ROOT/WEB-INF/ 的 web.xml 文件中创建以下

<web-app>
<servlet>
<servlet-name>HelloWorld</servlet-name>
<servlet-class>HelloWorld</servlet-class>
</servlet> <servlet-mapping>
<servlet-name>HelloWorld</servlet-name>
<url-pattern>/HelloWorld</url-pattern>
</servlet-mapping>
</web-app>

Get demo代码:

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*; public class HelloWorld extends HttpServlet { private String message; @Override
public void init() throws ServletException
{
message = "Hello World, Nice to meet you: " + System.currentTimeMillis();
System.out.println("servlet init ...");
super.init();
} @Override
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException
{
response.setContentType("text/html"); PrintWriter out = response.getWriter();
out.println("<h1>" + message + "</h1>");
destroy();
} @Override
public void destroy()
{
System.out.println("servlet destroy ...");
super.destroy();
}
}

启动tomcat,在浏览器查看结果如下,分析可知 servlet 销毁后,并没有立即回收,再次请求时,并没有立即初始化。

3.Servlet Form Data

常常需要从浏览器给web服务器(后端程序)传递信息,浏览器使用POST和GET方法。

GET方法:请求字符串限制1024 字符,信息使用QUERY_STRING 头传递,并可通过环境变量QUERY_STRING 获取;一般不传递密码等敏感信息。

http://www.test.com/hello?key1=value1&key2=value2

POST方法: Post是更可靠的方法,Post会把信息作为单独消息,以标准形式传给后台,不会像Get那样全部拼接在请求字符串中。

Get方法demo

下面是一个简单的 URL,将使用 GET 方法向 HelloForm 程序传递两个值。

http://localhost:8080/TomcatTest/HelloForm?name=leeyanseven&url= leeyanseven.github.io
package com.runoob.test;

import java.io.IOException;
import java.io.PrintWriter; import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; /**
* Servlet implementation class HelloForm
*/
@WebServlet("/HelloForm")
public class HelloForm extends HttpServlet {
private static final long serialVersionUID = 1L; /**
* @see HttpServlet#HttpServlet()
*/
public HelloForm() {
super();
// TODO Auto-generated constructor stub
} /**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 设置响应内容类型
response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter();
String title = "使用 GET 方法读取表单数据";
// 处理中文
String name =new String(request.getParameter("name").getBytes("ISO8859-1"),"UTF-8");
String docType = "<!DOCTYPE html> \n";
out.println(docType +
"<html>\n" +
"<head><title>" + title + "</title></head>\n" +
"<body bgcolor=\"#f0f0f0\">\n" +
"<h1 align=\"center\">" + title + "</h1>\n" +
"<ul>\n" +
" <li><b>站点名</b>:"
+ name + "\n" +
" <li><b>网址</b>:"
+ request.getParameter("url") + "\n" +
"</ul>\n" +
"</body></html>");
} // 处理 POST 方法请求的方法
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}

编程基础-servlet1的更多相关文章

  1. 第二章 Matlab面向对象编程基础

    DeepLab是一款基于Matlab面向对象编程的深度学习工具箱,所以了解Matlab面向对象编程的特点是必要的.笔者在做Matlab面向对象编程的时候发现无论是互联网上还是书店里卖的各式Matlab ...

  2. [.net 面向对象编程基础] (1) 开篇

    [.net 面向对象编程基础] (1)开篇 使用.net进行面向对象编程也有好长一段时间了,整天都忙于赶项目,完成项目任务之中.最近偶有闲暇,看了项目组中的同学写的代码,感慨颇深.感觉除了定义个类,就 ...

  3. Android开发4: Notification编程基础、Broadcast的使用及其静态注册、动态注册方式

    前言 啦啦啦~(博主每次开篇都要卖个萌,大家是不是都厌倦了呢~) 本篇博文希望帮助大家掌握 Broadcast 编程基础,实现动态注册 Broadcast 和静态注册 Broadcast 的方式以及学 ...

  4. T-Sql编程基础

    T-sql编程 入门小游戏 T-sql编程基础,包括声明变量,if判断,while循环,以及使用一些基本函数. 记得在学校的时候,写过一个二人对打的文字输出游戏. 上代码 alter proc usp ...

  5. [Java入门笔记] 面向对象编程基础(二):方法详解

    什么是方法? 简介 在上一篇的blog中,我们知道了方法是类中的一个组成部分,是类或对象的行为特征的抽象. 无论是从语法和功能上来看,方法都有点类似与函数.但是,方法与传统的函数还是有着不同之处: 在 ...

  6. 如何夯实(Java)编程基础,并深入学习和提高

    如何夯实(Java)编程基础,并深入学习和提高? 240赞同反对,不会显示你的姓名 匿名用户 240 人赞同 多学习...网上自学的学习网站很多,见以下榜单~一.汇总榜单: 公开课_学习网站导航 收录 ...

  7. Web编程基础--HTML、CSS、JavaScript 学习之课程作业“仿360极速浏览器新标签页”

    Web编程基础--HTML.CSS.JavaScript 学习之课程作业"仿360极速浏览器新标签页" 背景: 作为一个中专网站建设出身,之前总是做静态的HTML+CSS+DIV没 ...

  8. LINQ to XML 编程基础

    1.LINQ to XML类 以下的代码演示了如何使用LINQ to XML来快速创建一个xml: 隐藏行号 复制代码 ?创建 XML public static void CreateDocumen ...

  9. [.net 面向对象编程基础] (2) 关于面向对象编程

    [.net 面向对象编程基础]  (2)  关于面向对象编程 首先是,面向对象编程英文 Object-Oriented Programming 简称 OOP 通俗来说,就是 针对对象编程的意思 那么问 ...

随机推荐

  1. opencv+python实时人脸检测、磨皮

    import numpy as np import cv2 cap = cv2.VideoCapture(0) face_cascade = cv2.CascadeClassifier("d ...

  2. 吴裕雄 Bootstrap 前端框架开发——Bootstrap 字体图标(Glyphicons):glyphicon glyphicon-font

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name ...

  3. ConcurrentHashMap核心源码浅析

    1.引子 并发编程中使用HashMap可能导致程序死循环.因为多线程会put方法添加键值对时将导致HashMap的Entry链表形成环形数据结构,一旦形成环形数据结构,Entry的next节点永远不为 ...

  4. POJ - 3349 Snowflake Snow Snowflakes (哈希)

    题意:给定n(0 < n ≤ 100000)个雪花,每个雪花有6个花瓣(花瓣具有一定的长度),问是否存在两个相同的雪花.若两个雪花以某个花瓣为起点顺时针或逆时针各花瓣长度依次相同,则认为两花瓣相 ...

  5. 个人微信开发API协议(转)

    安卓微信的api,个人微信开发API协议,微信 ipad sdk,微信ipad协议,微信web版接口api,微信网页版接口,微信电脑版sdk,微信开发sdk,微信开发API,微信协议,微信接口文档sd ...

  6. redis--主从复制(读写分离)

    应用程序对服务器大量的读写,服务器很可能会宕机,导致数据丢失.为了解决这一问题就有了主从复制. 作用: 1:防止数据丢失 2:提高系统的吞吐量 主从复制:从服务器复制主服务器中的数据. 读写分离:应用 ...

  7. CSS样式实现两个图片平分三角

    <div class='pageOption'> <a href='#' class='option' > <img src='http://imgsrc.hubbles ...

  8. linux 安装禅道 和 CentOS 7 开放防火墙端口 命令

    linux 安装禅道链接:  https://www.cnblogs.com/maohuidong/p/9750202.html CentOS 7 开放防火墙端口 命令 链接:https://www. ...

  9. 期末项目之 Json文件

    Github上的json文件: https://raw.githubusercontent.com/color-me/first/master/b

  10. NFS工作原理简述

    1.首先用户访问网站程序,由程序在NFS客户端发出存取NFS文件的请求,NFS客户端上的RPC服务通过网络向NFS服务器的RPC服务的111端口发出NFS文件存取的询问请求. 2.NFS服务器的RPC ...