首页 > 代码库 > servlet.txt笔记

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笔记