web 完整版

来源:互联网 发布:淘宝钢笔店 编辑:程序博客网 时间:2024/06/02 12:31
java web工作原理
html
全称超文本标记语言。是通过标记和子标记来,描述网页内容。超文本的含义为在网页中描述的不只是文本数据。还可以通过一系列标记去连接各式各样的资源。包括图片,音频,css,js等。当客户端在访问网页时,除了有要下载文本数据,还需要通过网页中的描述的连接地址,去下载各式各样的资源文件,让网页正确显示
请求的是文件: url:3.jpg
get 方式请求业务组件: url:land 表单数据:paramMap
post 方式请求业务组件 : url :land  表达数据:paramMap
请求响应模型
http是一种无状态协议,当客户端和服务器之间完成了数据交互之后,连接会断开,以释放服务器的内存资源.这样释放服务器的内存.服务器就无法保存客户端的状态
请求信息分为四部分
请求行
描述请求的方式
请求头
以键值对描述客户端信息
空行
请求头的结束和消息体开始
消息体(只针对POST)
响应信息分为四部分
状态行
描述协议的版本,状态码,状态描述
响应头
以键值对方式描述服务器相关的状态
空行
响应头的结束和消息体的开始
消息体
描述客户端发给服务器的内容
web 服务器
传统的web服务器的产生响应时,只能产生静态的html信息,极大的影响应 信息的灵活性.解决方案时
,在web服务器之后加上辅助应用.辅助可以将请求信息处理货
,以后数据库为介质处理结果,然后动态的产生响应信息
GCI  称为通用网关接口,他是辅助应用的一种解决方案,可以用多种语言编写
,当客户端向服务器发送请求后,会开启外部程序来处理请求
.由于每个外部程序否是进程会占用独立的内存空间,会消耗法大量资源
java利用servlet+web容器来实现辅助应用.有web容器做一些底层操作,比如流的解析,线程的控制,
数据的封装.同时预留servlet接口,交给开发者书写业务逻辑.同时使用多线程解决任务,可以同时接收多条请求
web对容器的支持包括
通信支持(请求信息和响应信息封装为 请求对象和响应对象)
servlet支持(产生和销毁servlet  及方法的 调用)
多线程支持(创建,启动,运行,同步线程)
jsp支持
处理安全性
WEB应用程序
tomcat 的目录结构
bin
用于存放tomcat中的可执行文件.其中startup.bat用于启动tomcat.shutdown.bat用于关闭tomat
conf
存放tomcat的配置文件,其中sever.xml用于tomcat服务器相关的配置.
webxml用于tomcat中web的相关配置
server.xml <Connector port="8080" protocol="http/1.1 ...描述tomcat启动端口
appBase="webapps" 描述tomcat存放web应用程序的的目录
unpackWARs 当web文件有应用程序目录中有war文件,则自动解压
lib
用于存放tomcat运行时使用的jar包.其中servlet-api.jar时tomcat根据servlet规范提供的实现类所生成的jar文件
logs
用于存放日志文件
temp
用于存放临时文件
webapps
默认存放和部署web应用程序的目录

WEB-INF目录中的内容不能被客户端直接访问,存放一些比较隐秘的信息
WEB-INF
classes
开发者书写 业务类编译生成的class文件
lib
用于存放应用程序所使用的jar文件
web.xml
用于web组件的注册
*.html
*.img
*.css
*.js
work
用于JSP支持
serlvet
在web容器中运行的java程序
MIME类型:
用于描述客户端和服务器之间的交互内容类型,客户端可以根据MIME类型决定什么应用程序来打开和执行
text/html 网页格式数据
image/jpeg 图片格式数据
text/xml::xml 格式数据
子主题 2
servlet路径问题
在form的action问题,直接写servlet的url路径。默认是当前目录下查找。可同通过../ 方式返回上层目录查找,也可以使用 / 部署根目录/部署文件名 的方式查找
Servlet 的URL路径的书写方式
1,精确映射 /abc 表示只能以/abc来查找servlet


2,扩展映射 *.action 表示凡是以  .action 结尾的请求,都能访问Servlet


3,路径映射 /abc/* 表示凡是/abc/ 路径下的请求都能访问Servlet
servlet生命周期
1,启动tomcat,读取conf/server.xml文件,已确定启动端口和web应用程序的部署目录
2,读取部署目录中所有web应用程序中的web.xml文件,以确定注册的web组件,并解析。一旦有一个web应用程序中的web.xml书写错误,那么解析失败,从而抛出解析异常。正确解析web.xml,可以确定部署的web组件信息。
3,加载并实例化servlet。加上<load-on-startup> 标签,如果该标签的值为0或正数,表示web容器一启动就实例化。如果该标签不写或为负数,表示第一次访问再实例化。
4,调用init()方法完成初始化
5,当请求到达后,调用service()方法完成业务
6,销毁阶段,调用destory()完成清理工作
除了5 都只执行一次,5 每次请求都会执行。servlet对象只有一个,单实例多线程
web服务器 web容器和web应用服务器
web主要作用于开启服务器,监听端口,接收请求,产生响应,只是只能产生静态html响应信息,极大的影响响应信息灵活性
web容器值辅助应用的一种解决方案,允许将请求处理完成后,动态产生响应
web容器+web应用服务器合称应用服务器
工厂模式
将对象的创建和使用分开进行,其目的是解耦
web状态管理
状态跟踪
http协议为无状态的协议,当请求和响应完成后会断开连接,释放服务器内存资源,所以服务器无法保存客户端状态,所以服务器认为每次请求的客户端都是新用户。但是,很多时候,我们需要得到客户端的状态,完成一系列商务活动,需要用到状态跟踪
四种解决方案
1,隐藏表单
2,cookie
工作流程
客户端访问服务器,服务器调用response.addCookie()方法。产生响应时,会产生set-cookie响应头,将cookie文本发送个客户端。客户端会将cookie的文本保存。当客户端再次访问服务器时,会产生cookie请求头,将之前服务器发送的cookie信息,在发送给服务器,服务器就可以 根据cookie信息跟踪 cookie的状态
分类
存放在客户端浏览器的缓存中。当浏览器不关闭,cookie信息一直存在,浏览器一关闭cookie消失
存放在客户端的文件中并可以设置cookie的时间,过期时间之内即使浏览器关闭也可以将信息发送个浏览器,超过过期时间,cookie消失
以文本方式存放在客户端容易引起安全隐患,隐秘信息不要以cookie方式保存
3,session
工作流程
客户端访问服务器,服务器产生调用request.getSesion()产生sesion对象,同时用于跟踪用户状态。同时每个session对象分配一个唯一标识,为了管理session对象,以session ID为键,以session对象为值封装成MAP集合
产生响应时,将session信息以cookie方式发送给客户端,客户端存放在客户端浏览器的缓存中。当客户端再次请求服务器会将sessionid以cookie请求头的方式发送给服务器。服务器得到sessionid 后从map集合中得到session对象从而跟踪状态
用于客户端保存服务器状态的对象。由于http协议是无状态的服务器,所以,客户端是否关闭浏览器,服务器并不只道。这就是意味着,客户端即时关闭浏览器下线,服务器也会一直保存session对象,这样会极大耗费客户端资源,所有服务器应该及时清理服务器过时的session以释放服务器的内存资源
销毁的三种方式
1,会话超时,设置超时时间
2,调用session对象的invaildate()方法销毁
3,应用服务器崩溃
4,url重写
当客户端禁用了cookie之后,服务器发送给客户端的sessionid,客户端就不能通过,cookie方式进行保存。这样,客户端请求时,就不能将sessionid,以cookie请求头方式,提交给服务器。服务器的不到sessionid,也就无法读取session对象,从而不能跟踪状态
可以在url后面强行附加sessionid
<a href="/lovobook/WriteURL;jsessionid=dffsfdfsdfdfsfdsfdsf">click</a>
无论是否禁用cookie都可以得到sessionid,从而跟踪状态
cookie 和 session 的区别
cookie信息是存放在客户端的,session信息是以对象方式存放服务器的
cookie 存放的是文本数据,而session对象可以绑定对象共享
cookie信息在客户端和服务器之间传递的是具体的数据,而session传递的只是sessionid 所以使用session安全性更好
在servlet中转发页面有两种方式:重定向和内部转发
重定向由respones发出,而内部转发有RequestDispatcher发出
重定向发出两次请求,而内部转发只发出一次请求,所以内部转发,可以共享request请求对象中封装的数据,而重定向 不行
内部转发只能转发服务器内部的资源,而重定向可以在第二次请求时转向别的服务器
servlet处理Http响应
通过响应对象HttpServletResponse 的 setHeader()可以设置响应头,但是响应头必须要被浏览器识别才有意义。所以通常会把响应头的设置封装成响应对象的方法
,由于只有Http协议才会有响应头,所以setHeader()值存在于HttpServletResponse中
HttpServletRespones 响应对象有两个方法可以向客户端输出数据,
getWiter()得到打印字节流,向客户端发送文本 
getOutputStream() 得到输出字节流,可以想客户端发送二进制流
在注册servlet时,可以加入<init-param>
<param-name>aaa</param-name>
<param-value>111</param-value>
 </init-param>
进行初始化信息描述.可通过servletConfig配置对象中的getInitParmeter()根据参数名称,得到参数.返该初始化参数只能在当前Servlet中使用,不能在其他Servlet使用
重定向工作流
客户端访问服务器。服务器调用response.sendRedirect(),产生响应时,会产生302状态码,同时产生location响应头。客户端浏览器在接收到响应信息之后。发现302状态码,那么就会读取location响应头的内容。然后将该内容更新浏览器地址,再向服务器发出第二次请求
在输出信息之前设置状态码
状态码的分类
100-199
表示信息性代码表示客户端应该采取的其他动作,请求正在进行
200-299
表示客户端请求成功
300-399
表示用于已经移走的资源文件,指示新的地址
400-499
表示客户端引发的错误
500-599
表示服务端引发的错误
servlet处理Http请求
request请求对象中也提供了setAttribute 和 getAttribute 方法,不过,在请求对象中封装的对象,作用范围只在一次请求范围
表单提交的的 name 重名 通过getParameter() 只能得到第一个值;


可以通过 getParameterValues()得到对应表单名的所有的值
单选框必须加value属性
复选框获得通过getParameterValues()获得value值,注意判断是否为null
列表框只能提交选中项的value值
超链接的href,表单的action和重定向,如果以/开始,必须加上部署名
获得真实路径或内部转发,如果以/开始,应该书写相对于web应用程序的路径,不加不署名
请求转发
在服务器内部做资源调配,客户端只发出一次请求
post和get的区别
除了表单设置post之外都是get
post有消息体,get表单信息附加在url后面
get主要用于资源的查找,Post主要用于数据的传输
传输性能区别
get只能传输文本数据,而post方式可以传输文本和二进制数据
get不能传输大数据,post可以
get表单数据附加在url后面,post表单数据在消息体中,浏览器不会显示,相对get方式安全性高
get会在浏览器中缓存,而post不会缓存
0 0
原创粉丝点击