编程基础-servlet1
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的更多相关文章
- 第二章 Matlab面向对象编程基础
DeepLab是一款基于Matlab面向对象编程的深度学习工具箱,所以了解Matlab面向对象编程的特点是必要的.笔者在做Matlab面向对象编程的时候发现无论是互联网上还是书店里卖的各式Matlab ...
- [.net 面向对象编程基础] (1) 开篇
[.net 面向对象编程基础] (1)开篇 使用.net进行面向对象编程也有好长一段时间了,整天都忙于赶项目,完成项目任务之中.最近偶有闲暇,看了项目组中的同学写的代码,感慨颇深.感觉除了定义个类,就 ...
- Android开发4: Notification编程基础、Broadcast的使用及其静态注册、动态注册方式
前言 啦啦啦~(博主每次开篇都要卖个萌,大家是不是都厌倦了呢~) 本篇博文希望帮助大家掌握 Broadcast 编程基础,实现动态注册 Broadcast 和静态注册 Broadcast 的方式以及学 ...
- T-Sql编程基础
T-sql编程 入门小游戏 T-sql编程基础,包括声明变量,if判断,while循环,以及使用一些基本函数. 记得在学校的时候,写过一个二人对打的文字输出游戏. 上代码 alter proc usp ...
- [Java入门笔记] 面向对象编程基础(二):方法详解
什么是方法? 简介 在上一篇的blog中,我们知道了方法是类中的一个组成部分,是类或对象的行为特征的抽象. 无论是从语法和功能上来看,方法都有点类似与函数.但是,方法与传统的函数还是有着不同之处: 在 ...
- 如何夯实(Java)编程基础,并深入学习和提高
如何夯实(Java)编程基础,并深入学习和提高? 240赞同反对,不会显示你的姓名 匿名用户 240 人赞同 多学习...网上自学的学习网站很多,见以下榜单~一.汇总榜单: 公开课_学习网站导航 收录 ...
- Web编程基础--HTML、CSS、JavaScript 学习之课程作业“仿360极速浏览器新标签页”
Web编程基础--HTML.CSS.JavaScript 学习之课程作业"仿360极速浏览器新标签页" 背景: 作为一个中专网站建设出身,之前总是做静态的HTML+CSS+DIV没 ...
- LINQ to XML 编程基础
1.LINQ to XML类 以下的代码演示了如何使用LINQ to XML来快速创建一个xml: 隐藏行号 复制代码 ?创建 XML public static void CreateDocumen ...
- [.net 面向对象编程基础] (2) 关于面向对象编程
[.net 面向对象编程基础] (2) 关于面向对象编程 首先是,面向对象编程英文 Object-Oriented Programming 简称 OOP 通俗来说,就是 针对对象编程的意思 那么问 ...
随机推荐
- Vue核心知识一览
生命周期 beforeCreate : 数据观测 和 初始化事件还未开始 created : ...
- Linux学习《第三章重定向,管道符和环境变量》
- python -- 犯过的错之变量作用域
1.写代码时发现取得变量值,会被覆盖,改为图二的写法后case_id则不会覆盖. 原因:可以理解为变量是内存中一个对象的“引用”.在函数参数传值时,变量也是内存对象的引用. 当对象为可更改对象时,是引 ...
- UVA - 1001 Say Cheese(奶酪里的老鼠)(flod)
题意:无限大的奶酪里有n(0<=n<=100)个球形的洞.你的任务是帮助小老鼠A用最短的时间到达小老鼠O所在位置.奶酪里的移动速度为10秒一个单位,但是在洞里可以瞬间移动.洞和洞可以相交. ...
- java floor,ceil和round方法
Math.floor():返回值是double类型的,返回的是不大于它的最大整数 举例: double x = Math.floor(5.8); System.out.println(x); //输出 ...
- AVCodec 结构体
typedef struct AVCodec { // 标示Codec 的名字, 比如,"h264" "h263" 等. const char *name; / ...
- UNION和UNION ALL的作用和语法
主要就是两句话区别: union是联合的意思,就是合并两个或多个select语句的结果集,并消除重复行: union all 当然也是联合的意思,也是合并两个或多个select语句的结果集,但是保留重 ...
- electron app弹出默认对话框后页面失去焦点问题
最近再做electron app程序的做删除数据操作的时候遇到一个诡异的bug,页面点击删除按钮后,弹出确认对话框后,页面失去焦点,文本框无法点击输入任何参数,但是使用浏览器操作正常,最后确定是ele ...
- 一天一个设计模式——Composite组合模式
一.模式说明 能够使容器与内容物具有一致性,创造出递归结构的模式就是Composite组合模式. 举个例子:计算机中的文件系统中有文件和文件夹的概念,我们知道,文件夹可以包含文件,也可以包含子文件夹, ...
- POJ - 3659 Cell Phone Network(树形dp---树的最小点支配集)
题意:有N个点,N-1条边,任意两点可达,由此形成了一棵树.选取一个点a,它可覆盖自己以及与自己相邻的点,选取尽量少的点a,使得树中所有点都被覆盖,即求树的最小点支配集. 分析: 1.对于每一个点cu ...