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 并提供客户端访问路径
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 中
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提交方式
使用也能够访问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("
" 只不过这样的代码 交给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)