Servlet

//////////2017-2-6 ~ 2017-2-10///////////

int study_data(){

tomcat

tomcat

tomcat服务器是一个免费的开放源代码的Web应用服务器,属于轻量级应用服务器,也是apache基金会下面的一个核心产品,准确来说,是servlet 

jboss

jboss是一个基于J2EE的开放源代码的应用服务器。一般jboss总是绑定tomcat。jboss的核心是提供J2EE。

weblogic

美国Oracle公司出品的一个application server,确切的说是一个JAVAEE架构的中间件

IIS

这是一个微软的产品,支持一半静态的文件访问。支持CGI,支持asp aspx等等

tomcat安装

配置好java的环境,下载好tomcat,进入bin目录,然后运行启动命令startup.bat,要关闭时输入shutdown.bat

目录结构

/bin          :存放windows或Linux平台上启动和关闭tomcat的脚本文件
/conf        :存放tomcat服务器的各种全局配置文件
/lib           :存放所需的所有jar文件
/logs        :存放tomcat执行时的日志文件
/temp      :存放tomcat运行时产生的临时文件
/webapps:tomcat的只要web发布,默认情况下把Web应用文件放于此目录
/work       :tomcat将JSP生成的Servlet源文件和字节码文件放到这

WAR(Web Archive File)

网络应用程序文件,是最小的可部署单元

war有2种存在形式:
1.展开类型。就是一个目录,里面放了各种需要的文件。
2.打包类型。就是把上面的目录打包成war类型。

Servlet

是sun公司提供的一门用于开发动态web资源的技术,或者说实现动态网站的解决方案,一个Servlet就是java编程语言中的一个类

Servlet规范

定义了Servlet容器需要做什么,开发人员需要做什么开发工作,这样开发出来的war包部署到Servlet容器里,就能按照预期的逻辑运行。

Servlet请求过程

Servlet会根据请求的URL去决定该怎么做
http://hostname:port/contextRoot/xxxxxxxxx
contextRoot一般情况下就是war包的文件名,或者展开之后的目录名。除非特殊指定contextRoot。如果没有对应的web app就回去root下面去找,还没有就会报404错误。
找到了对应的web app之后,就会根据web app里面的规则(WEB-INF外面的文件或开发人员开发的Servlet),我们的Servlet容器就会new一个Servlet,然后执行它的init方法。
每次请求时调用service方法
每次关闭时调用destroy方法
关闭:
1.重新部署war包
2.停止web app
3.关闭整个容器

web.xml

servlet               :节点,表明下面是一个servlet的配置,挂在根节点下面
servlet-name     :给这个servlet指定一个唯一的名字。
servlet-class      :这个是这个servlet的实现类,可以使自己写的,也可以是jar包里的wevlet
init-param          :可以给servlet指定一些参数
load-on-startup :默认情况下实在第一次访问时才初始化Servlet。如果用了这个配置,就会在应用部署的时候就初始化该Servlet。配置的数字越小越先启动。
servlet-mapping:servlet地址映射节点。挂在根节点下面。
servlet-name     :就是在之前servlet节点中指定的名字。
url-pattern          :url匹配字符串,有几种方式
1.精确匹配。从/contextRoot开始,精确匹配url
2.目录匹配 。/开头,*结尾,如/*。
3.扩展名匹配。*.do , *.action
根目录匹配。就是一个/,来指明默认的servlet是什么

GenericServlet接口方法:

void init(ServletConfig config)                                         : 初始化操作
ServletConfig getServletConfig()                                    : 获取一个config对象
String getServletInfo()                                                     : 自定义servlet版本等信息
void service(ServletRequest req,ServletResponse res) : 请求响应
void destroy()                                                                  : 关闭时运行

HttpServlet接口

继承自GenericServlet,除了继承的方法外还有方法:
doDelete(HttpServletRequest req,HttpServletRequest resp)
doGet(HttpServletRequest req,HttpServletRequest resp)
doPut(HttpServletRequest req,HttpServletRequest resp)
doHead(HttpServletRequest req,HttpServletRequest resp)
doOptions(HttpServletRequest req,HttpServletRequest resp)
doPost(HttpServletRequest req,HttpServletRequest resp)
doTrace(HttpServletRequest req,HttpServletRequest resp)
完全对应于HTTP METHOD

Servlet注解

以前的开发模式,Servlet写完,一定要配置web.xml,设置servlet和它的mapping,最新的web.xml引入了注解。通过注解的方式直接把相关的配置写在了Servlet类的代码里

常用注解项:
@WebServlet(description=“some description”,
displayName="some display name",
loadOnStartup=1,
name="a name",
urlPatterns={"pattern1","pattern2"},
initParams={
@WebInitParam(name="wip1",value="v1"),
@WebInitParam(name="wip2",value="v2")
})

线程安全

Servlet是单实例的,它的Service或者doXXX方法被web容器用多线程的方式分享调用,要注意线程安全。

Session

Http请求是无状态的,要想实现如购物车功能的系统就可以借助session的功能。
session是把需要保留的信息保存在服务器端,然后给客户端发一个凭证。当客户端再次发起请求时,把凭证一起发送过来即可。就好像钥匙一样,就能继续读写保存在服务器端的数据。而且每个凭证都是相互独立的。

session数据存储位置
session的数据都放在服务器,每个容器都支持不同的存放机制。
1.单个文件
2.数据库
3.内存
4.其他
这容易导致session数量庞大或单个session数据量太大,解决方法:
1.调用invalidate()方法
invalidate()方法用来删除无用的session,可以减少session数量多的问题。
好处:一旦调用,session会立即删除。
坏处:需要用户配合去点击才能生效
2.session的timeout超时机制
也就是设定了一个时间,如果在时间内没有任何访问,这个session将自动被删除

Cookie

cookie是一小段保存在浏览器这端的数据。浏览器可以根据http协议来取出来发送给服务器,服务器也可以根据http协议来发送cookie给浏览器

cookie的产生:
1.在servlet运行过程中,可以通过HttpServletResponse.addCookie来添加cookie,并返回给浏览器
2.在浏览器端,我们的javascript也可以添加cookie

session与cookie的区别
1.存储地点不同,session是在服务器端,cookie是保存在浏览器端
2.session可以保存任何java对象,只要是可以序列化的,而cookie只能保存字符串
3.session的实现是需要cookie的。因为jsessionid是通过cookie来保存的。 有时候浏览器会禁止cookie。这个时候,要么没有session功能,要么把jsessionid放在url里

Filter

过滤器(拦截器),在处理请求时,可能需要一些预处理,Filter提供了类似工具类的作用,对servlet进行预处理或后处理。filter是在服务器启动时就实例化并初始化的

执行顺序
预处理从上往下,匹配一个执行一个,代码执行至doFilter(request,response);方法时进行下一个处理,所有预处理结束后执行servlet,后开始进行后处理,从下往上,开始执行doFilter(request,response);后面的代码。

Listener

监听器,作用在容器中,某些特定的事件发生时,可以激发我们的代码做一些事情。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,319评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,801评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,567评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,156评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,019评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,090评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,500评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,192评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,474评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,566评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,338评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,212评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,572评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,890评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,169评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,478评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,661评论 2 335

推荐阅读更多精彩内容