servlet.txt笔记
javase jdbc ==》java访问数据库
html ==》浏览器显示内容,无法把数据提交给后台?==》动态网页技术(servlet)解决前台、后台交互问题
动态网页技术:servlet jsp php asp
静态网页技术 --html,xml,css,js
servlet:接受客户端请求,处理完数据,响应客户端数据 基于请求和响应的服务程序(动态网页技术) 静态网页技术 --html,xml
servlet:它只是一个接口,接口只定义规范(请求、响应) ,如何实现接受请求 和 响应客户端 ,并没有提出具体技术。
GenericServlet:定义一般的、与协议无关的 servlet 是抽象类 主要给子类继承
HttpServlet:基于http 协议 实现servlet接口 也是抽象类
基于ftp协议实现servlet接口 (ftpServlet)
--要想实现 客服端 请求 ,服务端响应 这样的功能,后来使用http协议,实现上面的要求
目前只有HttpServlet 实现servlet接口,所以 我们写的任何Servlet 都是要继承HttpServlet 。
Servlet:
init 初始化方法
getServletConfig:获得servlet配置信息
service:服务(接受请求 并响应)
getServletInfo:获得servlet 相关信息
destroy:摧毁 ,主要是释放内存空间
httpServlet:
service:调用 doget dopost dodelete dooptions。。。。
***我们写的Servlet 只要继承HttpServlet 实现 doget dopost
如何访问servlet:
web.xml: 在web.xml中注册servlet 并提供客户端访问路径
<servlet>
<servlet-name>TwoServlet</servlet-name>
<servlet-class>cn.gem.servlet.TwoServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>TwoServlet</servlet-name>
<url-pattern>/TwoServlet</url-pattern>
</servlet-mapping>
TwoServlet twoServlet=Class.forName("cn.gem.servlet.TwoServlet").newInstance();
客户端 访问/TwoServlet路径 找到一个名字叫 twoServlet,这个对象就是 Class.forName("cn.gem.servlet.TwoServlet").newInstance(),
然后 调用这个 对象的 doget 或者 dopost 方法。(至于调用doget 还是 dopost 依赖于 访问的方式)
访问路径:
http://localhost:8080/ 是访问到E:\509\apache-tomcat-6.0.44\webapps这个目录 默认访问root 下面的index.html
精确匹配:/ServletTwo
模糊匹配:*
* 表示通配符 能够代表一个字符或者多个字符
/* 表示后面随便 都可以
*.do 前面随便 后面一定.do
/*.do 不符合逻辑
精确匹配>模糊匹配(/* > *.do )
*****建议采用精确匹配
生命周期:
第一次请求该servelt 创建servlet 对象,并且调用init方法,且只调用一次
后面每次访问 调用get 或post方法,直到服务器关闭,该servet 摧毁,并且调用destory方法。
第一次访问 -- -- 关闭服务器
servlet 创建 :一定要有无参的构造函数 由tomcat服务器创建一次 单例模式
传值:web.xml传递参数
ServletConfig:serlvet配置信心都在 ServletConfig 中
<servlet>
<servlet-name>EightServlet</servlet-name>
<servlet-class>cn.gem.servlet.EightServlet</servlet-class>
<init-param>
<param-name>name</param-name>
<param-value>关羽</param-value>
</init-param>
<init-param>
<param-name>age</param-name>
<param-value>20</param-value>
</init-param>
</servlet>
context:一般指上下文环境
ServletContext:指的是整个web项目的上下文环境 ,表示的就是整个web.xml
getInitParameterNames getInitParameter
ServletConfig,ServletContext 可以直接从this(Servlet)中获得这两个对象
init(),init(ServletConfig config):在GenericServlet中,init(ServletConfig config) 里面调用init(),所以覆盖的是init(),而不是init(ServletConfig config)
提交数据: 客户端提交请求数据 给服务端 (Servlet)
request:请求 凡是客户端提交请求数据 全部在request对象中
getParameter 获得请求参数的值
http://localhost:8080/Servlet/FormServlet?sname=fasdfas&passwd=fasdfasdfasdf -- 质询参数
get: url提交方式(头提交方式 head) 速度快 <4k 地址变化(不安全)
http://localhost:8080/Servlet/FormServlet?sname=sdfas&passwd=sdfs123123123123dfd 其实就是form表单get提交方式
使用<a>也能够访问servlet 这个和 在浏览器 地址访问 一个效果 相当于 form表单get提交方式
post:体提交方式(body) 速度慢点 没有上限(具体看浏览器支持) 地址不变(安全些)
响应:
response:凡是服务端给 客户端 的数据 都在这里
服务端 对 客户端响应 需要 建立 通道 Writer w=response.getWriter();
乱码:
请求乱码:
get:
1.修改tomcat中server.xml
URIEncoding="UTF-8" 服务器采用utf-8的字符集编码 来进行 解码和编码
默认的编码格式 是 ISO-8859-1
2.new String(sname.getBytes("ISO-8859-1"),"UTF-8")
浏览器以utf-8编码发送数据 ,服务器默认以ISO-8859-1解码,发送数据给servlet,servlet中需要再以ISO-8859-1格式 获得字节,然后 按照utf-8的字符集 解码
post: request.setCharacterEncoding("UTF-8");
设置请求数据以utf-8方式 编码 解码,这种方式只对 体提交方式有效
响应乱码:
response.setCharacterEncoding("UTF-8"); 只是说明服务器 对客户端 响应数据 是以UTF-8 方式,响应,但是 浏览器以何种方式 阅读数据 不受控制!!
response.setContentType("text/html;charset=UTF-8"); 以UTF-8 方式 响应数据,并提醒浏览器 以这种方式 阅读
response.setContentType("text/html;charset=UTF-8") 可以完全替代 response.setCharacterEncoding("UTF-8")
跳转: 跳转资源
1.服务端:request.getRequestDispatcher("/one.html").forward(request, response); 通过请求分发器 跳转到指定页面
url地址不变(依然是之前请求服务器的地址) 只访问一次 服务器(页面跳转只是服务器内部在跳,对客户端透明)
2.客户端:response.sendRedirect() 重定向
url地址变化 ,跳转页面的地址 访问2次服务器 (把地址发送到客户端浏览器上,并迫使客户端浏览器再次访问服务器)
//response.sendRedirect("/Servlet/one.html"); 地址要带上项目名称
//request.getRequestDispatcher("/one.html").forward(request, response); 地址不需要项目名称
上述的跳转 ,底层依然是Writer w=response.getWriter(); w.write("<!DOCTYPE html><html><head>" 只不过这样的代码 交给tomcat编写了
如果要想传递动态数据 ,那么跳转html 不可以(html只是静态语言,无法java语言)-- jsp
servlet与servlet:
数据共享:3种范围
1.request:一次请求的范围 ,过了这次请求所有数据失效
2.session:(session 范围)回话范围 :当前浏览器范围,只要不关闭浏览器 数据一直存在
3.servletContext:整个应用范围 (服务器范围) 只要服务器不关闭,数据一致存在
原则:能在request 就不要 放session 能在session 就不要在 servletContext
过滤器(Filter):对请求进行预先的处理、筛选
FilterConfig:过滤器的配置信息都在 这里 ,和 servletCOnfig
生命周期:服务器启动时 创建(单例)并且调用 init方法,服务器关闭的时候 销毁对象 服务器开始 到 结束
FilterChain:过滤链(多个过滤器)
chain.doFilter(request, response); 把请求释放到下一个过滤器 ,如果没有过滤器 访问目标资源
TenServlet.TenServlet()
MyFilter2.doFilter()
MyFilter.doFilter()
TenServlet.doGet()
TenServlet.TenServlet()
MyFilter.doFilter()
MyFilter2.doFilter()
TenServlet.doGet()
filter:先后顺序 决定过滤器创建的顺序 谁在下面谁先创建
filter-mapping:****先后顺序 决定过滤过滤请求的顺序 谁放在上面 谁先执行
使用:
1.统一字符集编码
2.登陆验证 : 当有一个请求过来,如果已经登陆 ,直接访问首页,如果没有登陆,不能访问你首页,先登录
用户名 密码 ok 到首页 ,如果不ok 继续登录, 已经登陆 到首页
监听器 8种:
ServletRequestListener 监听请求的创建 和 销毁
HttpSessionListener 监听回话的创建 和 销毁
ServletContextListener:监听整个web应用的创建 和 销毁
ServletRequestAttributeListener
HttpSessionAttributeListener
ServletContextAttributeListener
HttpSessionActivationListener:会话激活 钝化监听器
HttpSessionBindingListener:会话值绑定监听器
用途:统计在线人数 ,访问量
作业:servlet +jdbc 完成员工管理系统
MVC:
m:model dao vo(pojo) service
v:view html jsp。。
c:control 接受前台请求 并做出响应 servlet
---------------------------------javaweb------------------------------------------------
开发工具:
eclipse:版本非常多,很多不是很兼容
如果项目要求很高,使用特别技术,可能只能使用eclipse。
myeclipse:早期只是eclipse的一个插件,以前myeclipse必须安装在eclipse的解压目录下,现在因为
myeclipse使用非常广泛,现在基本上直接安装就可以,8.5 10。 收费的
javaweb开发项目要求及技术不是非常特殊,通常myeclipse就可以满足要求!
myeclipse开发web项目 比较简答。
收费的:
jbuilder:
netbean:
***功能比eclipse强大的多,但是因为收费,所以公司使用较少!
javaweb项目:
eclipse:dynamic web project
myeclipse: java web
netbean
jbuild
webContent(webRoot)
WEB-INF lib web.xml ---web项目必备要素(目录结构、名称都不能变)
服务器:
运行--服务器 tomcat jboss weblogic 。。。
tomcat (免费): 简单web应用服务器
重量级服务器(收费):都是实现了javaee规范(EJB规范,EJB服务器) 入侵性 spring(不支持分布式处理) 服务器架构 EJB:算是java体系中比较高深技术。
jboss:
weblogic :
****开发使用tomcat ,发布项目时 可能会使用jboss weblogic等服务器
如果你的项目对安全性,并发性要求不高 可能依然会使用tomcat(快一点,免费)
tomcat:
tomcat 6 , tomcat 7
解压版 :早期都是解压
安装版:安装后的目录结构 和 解压后的目录结构一样的
bin:存放tomcat 的相关命令
conf:存放一些配置文件
lib:tomcat 的使用到的jar包
logs:日志
temp:tomcat 运行时生成的临时文件目录
webapps:存放web 项目 (发布项目地址)
work:真正tomcat运营时 使用的工作目录
tomcat 启动:会自动读取conf 文件下面的配置文件 和 webapps下面的项目,以及各个项目下面web.xml
--------------------------------------------------------------------------------------------------------------
tcp/ip: 安全协议 几乎所有协议 都是基于tcp/ip协议基础之上
tcp:三次握手 保证数据能够到达 一旦建立连接 ,不主动断开, 连接一直存在 长连接协议 数据库连接就是tcp协议
****基于互联网访问量 特别巨大,所以希望能够 实现 客户端访问服务端后,数据交互后 连接自动断开?
http:超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。所有的WWW文件都必须遵守这个标准。
https:依然是http协议 只是多了数字安全认证 比较安全协议
http协议 是个短连接协议 数据交互完 立即断开 基于tcp、ip协议 http封装了tcp、ip协议 是一个应用层协议
****http协议 封装了tcp/ip协议,但是能够自动断开 短连接协议
HTTP协议的主要特点可概括如下:
1.支持客户/服务器模式。 c/s(client,server) => b/s(浏览器(browser ),服务器 server) b/s是c/s的升级
2.简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。
***访问路径 ,提交方式(get post)
由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。
3.灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。
4.无连接(短连接):无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。---短连接协议
5.无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,
则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。
***服务器不记得你是曾经来过的那个请求!!
URI:路径
URL (Uniform Resource Locator,统一全球资源定位符): 通俗说法 就是互联网网址
http://host[":"port][abs_path]
http表示要通过HTTP协议来定位网络资源;host表示合法的Internet主机域名或者IP地址;port指定一个端口号,为空则使用缺省端口80;
abs_path指定请求资源的URI;如果URL中没有给出abs_path,那么当它作为请求URI时,必须以“/”的形式给出,通常这个工作浏览器自动帮我们完成。
http:192.168.0.116:8080/index.jsp
https://www.baidu.com
***http协议称之为 基于请求、响应的协议
请求:http请求由三部分组成,分别是:请求行、消息报头、请求正文
请求方法(所有方法全为大写)有多种,各个方法的解释如下:
GET 请求获取Request-URI所标识的资源
POST 在Request-URI所标识的资源后附加新的数据
HEAD 请求获取由Request-URI所标识的资源的响应消息报头
PUT 请求服务器存储一个资源,并用Request-URI作为其标识
DELETE 请求服务器删除Request-URI所标识的资源
TRACE 请求服务器回送收到的请求信息,主要用于测试或诊断
CONNECT 保留将来使用
OPTIONS 请求查询服务器的性能,或者查询与资源相关的选项和需求
******在html4之前浏览器 只支持 get post 提交方式
响应:在接收和解释请求消息后,服务器返回一个HTTP响应消息。
HTTP响应也是由三个部分组成,分别是:状态行、消息报头、响应正文
状态代码有三位数字组成,第一个数字定义了响应的类别,且有五种可能取值:
1xx:指示信息--表示请求已接收,继续处理
2xx:成功--表示请求已被成功接收、理解、接受
3xx:重定向--要完成请求必须进行更进一步的操作
4xx:客户端错误--请求有语法错误或请求无法实现 404
5xx:服务器端错误--服务器未能实现合法的请求
常见状态代码、状态描述、说明:
200 OK //客户端请求成功
400 Bad Request //客户端请求有语法错误,不能被服务器所理解
401 Unauthorized //请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用
403 Forbidden //服务器收到请求,但是拒绝提供服务
404 Not Found //请求资源不存在,eg:输入了错误的URL
500 Internal Server Error //服务器发生不可预期的错误
503 Server Unavailable //服务器当前不能处理客户端的请求,一段时间后可能恢复正常
eg:HTTP/1.1 200 OK (CRLF)
servlet.txt笔记的更多相关文章
- Servlet学习笔记(三)
目录 Servlet学习笔记(三) 一.HTTP协议 1.请求:客户端发送欸服务器端的数据 2.响应:服务器端发送给客户端的数据 3.响应状态码 二.Response对象 1.Response设置响应 ...
- # jsp及servlet学习笔记
目录 jsp及servlet学习笔记 JSP(Java Server Page Java服务端网页) 指令和动作: servlet(小服务程序) jsp及servlet学习笔记 JSP(Java Se ...
- Servlet学习笔记(四)
目录 Servlet学习笔记(四) 一.会话技术Cookie.session 1. 什么是会话技术? 2. 会话技术有什么用? 3. Cookie 3.1 什么是Cookie? 3.2 使用Cooki ...
- Servlet学习笔记(二)
目录 Servlet学习笔记(二) Request对象 1.request和response对象: 2.request对象继承体系结构: 3.什么是HttpServletRequest ? 4.Htt ...
- 重温Servlet学习笔记--servletContext对象
一个项目中只有一个ServletContext对象,我们可以在多个servlet中获取这个唯一的对象,使用它可以给多个servlet传递数据,我们通常成servletContext为上下文对象.这个对 ...
- servlet学习笔记_3
一.路径问题如果是在浏览器端请求服务器的数据(超链接,js的src),那么加/代表在Tomcat的webapp目录,不加/的话通常不考虑,实际上不加/在浏览器端也是当前项目目录(但是开发中通常必须要写 ...
- jsp&servlet学习笔记
1.路径引用问题 一个css.jsp.html.或者javascript文件从从一个工程复制到另一工程,如果引用的时候使用的时相对路径,看似没有错误,但是却一直引用不进来,这时候要使用绝对路径,这样才 ...
- Servlet学习笔记(七)—— 自己定义过滤器的编写改进:自己定义实现FilterChain
笔记六中实现了三种过滤器:字符编码过滤.登录权限过滤.敏感词过滤,可是有个缺陷就是,限定了过滤顺序,而不能实现先进行request过滤.最后response过滤,而且中间几项过滤的顺序不能动态改变.所 ...
- Servlet监听器笔记总结
监听器Listener的概念 监听器的概念很好理解,顾名思义,就是监视目标动作或状态的变化,目标一旦状态发生变化或者有动作,则立马做出反应. Servlet中的也有实现监听器的机制,就是Listene ...
随机推荐
- Random和ArrayList的应用
/*Random类应用与Math类应用,创建一个类, * 1)分别用Random类和Math.random()方法生成随机数. * 2) 把Math.random()方法生成的随机数,转换成1-100 ...
- String与StringBuffer,StringBuilder
在java中有3个类来负责字符的操作. 1.Character 是进行单个字符操作的, 2.String 对一串字符进行操作.不可变类. 3.StringBuffer 也是对一串字符进行操作,但是可变 ...
- js 发布订阅模式
//发布订阅模式 class EventEmiter{ constructor(){ //维护一个对象 this._events={ } } on(eventName,callback){ if( t ...
- IM聊实现客户端之间信息交互需求文档
终于放假啦~之前学习太忙很多知识点都没有写博客,可能自己学会了但没有分享给大家,接下来几天我可能把一些学过的东西整理成博客发出来供大家相互学习交流. 需求分析说明书 HuaXinIM聊软件 潘浩 20 ...
- [USACO5.3]校园网Network of Schools 缩点
题目描述 一些学校连入一个电脑网络.那些学校已订立了协议:每个学校都会给其它的一些学校分发软件(称作“接受学校”).注意即使 B 在 A 学校的分发列表中, A 也不一定在 B 学校的列表中. 你要写 ...
- Asm.Def谈笑风生
★ 输入文件:asm_talk.in 输出文件:asm_talk.out简单对比时间限制:2 s 内存限制:256 MB [题目描述] “人呐都不知道,自己不可以预料,直升机刚一出圣地亚哥 ...
- RxJava如何结合观察者与链式处理
RxJava如何结合观察者与链式处理 Author: Dorae Date: 2018年12月3日17:10:31 转载请注明出处 一.概述 首先问自己几个问题,如果非常清楚这几个问题的目的与答案,那 ...
- Oracle Multitenant Environment (五) Create PDB
Creating and Removing PDBs with SQL*Plus This chapter contains the following topics: About Creating ...
- VS2017 +NetCore2.2.0+WebApi项目整合SwaggerUI 以及遇到的坑
1.新建一个WebApi项目,这里不说了. 2.打开项目nuget管理控制台,在 https://www.nuget.org/ 搜索swagger的包:Swashbuckle.AspNetCore , ...
- FTP用户-禁止登录系统
OS是Ubuntu 11.10. 1. which nologin #/usr/sbin/nologin 2. vim /etc/shells #在该文件后添加/usr/sbin/nolo ...