javaWeb基础核心之一Servlet
既然是做JAVA开发的,先从一些基本的整理起来,算是知识回顾,加深记忆。
第一篇想到那理到哪,可能有点乱,不是太会排版,见谅,估计可能也就我自己看的懂。
servlet在百度百科上的定义是这样的:
Servlet(Server Applet),全称Java Servlet,未有中文译文。是用Java编写的服务器端程序。其主要功能在于交互式地浏览和修改数据,生成动态Web内容。狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类,一般情况下,人们将Servlet理解为后者。
简单来说,servlet就是运行在服务器端的java程序。Servlet是javaEE的规范(接口),如果想将我们写的程序让客户端访问到,创建一个类实现Servlet接口。Servlet作用是动态生成页面。
学习的时候都会说服务器一启动就会创建servlet对象,servlet里有几个方法,简单介绍一下:
public void service(ServletRequest req, ServletResponse res)
这个是servlet的核心方法,程序代码放置到service方法中,每一次都会执行(每次客户端请求都会执行一次)
其中的参数:
ServletRequest:代表请求,内部封装的是请求的信息
ServletResponse:代表响应,内部封装的要响应给客户端的信息
一般来说,开发时继承HttpServlet,为什么不是实现servlet接口呢?
查看一下源码就可以看到,自定义的Servlet 继承 HttpServlet 它又继承GenericServlet 实现Servlet接口
还有,继承httpservlet是没有service方法的,但是会有doGet和doPost方法
为什么没有覆盖service方法 而是覆盖doGet和doPost?默认不是执行service方法吗?
看一下源码就会发现啦:




实际访问流程是:
客户端提交请求---->tomcat容器---->创建servlet对象----->调用service方法----->HttpServlet的service(ServletRequest,ServletResponse)方法 ----->HttpServlet的service(HttpServletRequest,HttpServletResponst)----->doGet()/doPost()
public void init(ServletConfig config)
init方法是Servlet的初始化方法,Servlet对象创建时调用的方法
其中的参数:ServletConfig代表是Servlet的配置对象,内部封装的是此Servlet 的配置信息
public void destroy()
destory是Servlet销毁的方法,Servlet对象销毁的时候执行
Servlet的基本配置(web.xml 了解一下)
<servlet>
<servlet-name>随意写</servlet-name>
<servlet-class>Servlet的全包名</servlet-class>
</servlet>
<servlet-mapping>
<serlvet-name>与上面的name一致</servlet-name>
<url-pattern>/servlet对外访问的虚拟路径</url-pattern>
</servlet-mapping>
url-patten标签里的配置:
完全匹配:访问虚拟的资源与配置的完全一样
目录匹配:格式:/开始 *结束
扩展名匹配:格式: 以*开始 以扩展名结束
插一下静态资源访问过程:
在页面访问index.html静态资源
tomcat会按照index.html名字找一个servlet,找不到,会找缺省 servlet
DefaultServlet内部帮你找一个名字叫index.html的静态资源,
第一种结果:找到index.html资源 缺省的servlet逐行输出静态资源
第二种结果:找不到 返回一个默认的错误页面404
以myeclipse为例,创建web项目

myeclipse里可以直接创建servlet文件,可以省去我们各种配置的麻烦。
默认实现的方法我们实际上一般只需要勾选doget和dopost就可以啦,最常用的两种提交。

mapping url就是我们设置虚拟目录的名字,在这写了就不用去xml里配置了。
然后就可以在servlet写东西了。
再介绍一些常用的方法吧!
首先要介绍一个对象:
ServletContext中文译成 Servlet上下文对象,代表的是一个Web应用的环境对象,内部封装的与web应用整体相关的数据。服务器一启动就会创建ServletContext对象,一个web应用只有一个ServletContext对象。
获得这个对象有两个方法:
config.getServletContext();
(在自定义的Servlet中直接使用 getServletConfig();返回的就是一个config对象,它代表是Servlet对象的配置对象,ServletConfig对象内部封装的是该Servlet对象的配置信息,一个Servlet就有一个对应的ServletConfig对象。当Servlet对象创建时,web容器会调用init方法,同时会创建该Servlet对象的配置对象ServletConfig作为参数传递给init方法。)
getServletContext();
ServletContext的作用
(1)获取web应用的初始化参数
(2)ServletContext对象可以作为域对象存储数据
域对象:区域对象,存数据
只要是域对象,必然有下面三个方法
setAttribute(name,value)---向域对象中设置值
getAttribute(name)---从域中获取值
removeAttribute(name)---从域中删除某个数据

(3)获得web应用中的资源的绝对路径(这个比较常用)
资源在服务器上的绝对路径 context.getRealPath(相对于web应用根目录地址);
最后在贴一张简单明了的流程图,看到这张图可以容易理解servlet生态环境。

顺带提一下Servlet的生命周期
什么时候创建Servlet对象:
默认第一次访问时创建Servlet对象,会将servlet放置到web容器的内存中, 等待为后面的访问服务,某一个Servlet对象只有一个。执行init方法
什么时候销毁Servlet对象:
服务器关闭或web应从服务器中移除Servlet销毁,销毁时会执行destory方法
本文作者冯如,因知识本身在变化,作者也在不断学习成长,文章内容也不定时更新,为避免误导读者,方便追根溯源,请诸位转载注明出处,有问题欢迎与我讨论,共同进步。
javaWeb基础核心之一Servlet的更多相关文章
- JavaWeb基础总结:Servlet专题
最近工作中有部分整改老接口的任务,大部分与Spring的拦截器,Tomcat相关,改到一些底层的代码发现,对基础J2EE的知识有些遗忘,需要频繁查阅,索性从头系统的整理一下Servlet和Filter ...
- JavaWeb基础知识总结
JavaWeb基础知识总结. 1.web服务器与HTTP协议 Web服务器 l WEB,在英语中web即表示网页的意思,它用于表示Internet主机上供外界访问的资源. l Internet上供 ...
- 关于java基础、多线程、JavaWeb基础、数据库、SSM、Springboot技术汇总
作者 : Stanley 罗昊 本人自行总结,纯手打,有疑问请在评论区留言 [转载请注明出处和署名,谢谢!] 一.java基础 1.多态有哪些体现形式? 重写.重载 2. Overriding的是什么 ...
- JavaWeb基础: ServletContext
基本概念 Web容器在启动时,会为每个Web应用程序都创建一个对应的ServletContext对象,它代表当前Web应用. ServletContext(javax.servlet.http.Ser ...
- JavaWeb基础: 学习大纲
JavaWeb基础: Web应用和Web服务器 JavaWeb基础: Tomcat JavaWeb基础:HTTP协议和基于Restful的架构 JavaWeb基础: Web工程配置文件 JavaWeb ...
- 超详细的Java面试题总结(四 )之JavaWeb基础知识总结
系列文章请查看: 超详细的Java面试题总结(一)之Java基础知识篇 超详细的Java面试题总结(二)之Java基础知识篇 超详细的Java面试题总结(三)之Java集合篇常见问题 超详细的Java ...
- 【JavaWeb】学习笔记——Servlet、Filter、Listenter
Servlet Servlet 简介 Servlet 是 Java提供的一门动态web资源开发技术 Servlet 是JavaEE 规范之一,其实就是一个接口,将来我们需要定义Servlet类实现Se ...
- JQuery基础核心
一.代码风格 在jQuery程序中,不管是页面元素的选择.内置的功能函数,都是美元符号“$”来起始的. 而这个“$”就是jQuery当中最重要且独有的对象:jQuery对象,所以我们在页面元素选择或执 ...
- 06-CABasicAnimation基础核心动画
*:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } ...
随机推荐
- oracle查询每个表所占的空间
查看当前用户的每个表所占的空间大小: select segment_name,sum(bytes)/1024/1024 size_M from user_extents group by segmen ...
- Codeforces 765E. Tree Folding [dfs][树形dp]
题解:先从节点1开始dfs.对于每一个节点,用一个set记录:以该点为根的子树的深度. a) 如果此节点的某个子节点打出了GG,则此节点直接打出GG. b) 若set的元素个数<=1,那么,以该 ...
- (转)Java线程面试题 Top 50
原文链接:http://www.importnew.com/12773.html 本文由 ImportNew - 李 广 翻译自 javarevisited.欢迎加入Java小组.转载请参见文章末 ...
- 转接口IC NCS8807:LVDS转MINI LVDS芯片
LVDS 4K TCON w/ Scaler1 General Description NCS8807 is an LVDS 4K TCON with advanced scaling func ...
- [Linux] PHP程序员玩转Linux系列-Nginx中的HTTPS
1.PHP程序员玩转Linux系列-怎么安装使用CentOS 2.PHP程序员玩转Linux系列-lnmp环境的搭建 3.PHP程序员玩转Linux系列-搭建FTP代码开发环境 4.PHP程序员玩转L ...
- let 和 const 关键字
看了阮老师的ES6入门再加上自己的一些理解整理出的学习笔记 let关键字 跟var相比,不会提升为全局变量,始终是块级作用域{} 注意点: 1: 不能在同一个块级作用域内声明同名变量 2: (如果当前 ...
- 银盛支付ecshop,shopex,shopnc在线支付接口,php版本支付接口开发
最近应一个客户的要求,给他的一个ecshop商城开发银盛支付在线支付接口.银盛支付服务股份有限公司(简称银盛支付)成立于2009年7月,总注册资本14000万元人民币,员工队伍持续壮大.2011年5月 ...
- Java关于Robot类的使用以及远程桌面的实现
利用Robot实现效果是运行之后鼠标自动定位到整个屏幕坐标系的(635,454)位置,输入wangtianze package com.wtz.util; import java.awt.AWTExc ...
- hibernate持久化框架
Hibernate是一个优秀的持久化框架 瞬时状态:保存在内存的程序数据,程序退出后,数据就消失了,称为瞬时状态 持久状态:保存在磁盘上的程序数据,程序退出后依然存在,称为程序数据的持久状态 持久化: ...
- linux下安装node
经过一番的折腾终于在linux上安装了node,记录下来以免忘记 1.下载node 去官网下载最新的linux版本下对应node.js,node-v6.10.2-linux-x64.tar.gz 2. ...