JavaWeb知识回顾二
动态web资源相关
1、tomcat相关
tomcat的目录结构
bin -- tomcat服务器的批处理文件的存放目录
conf -- tomcat服务器配置文件的存放目录
lib -- tomcat服务器运行时所依赖的jar包的存放目录
logs -- tomcat服务器运行时产生的日志文件的存放目录
temp -- tomcat服务器运行时产生的临时文件的存放目录
tomcat的三种部署web应用的方式
1、在tomcat/conf/server.xml中<host>下添加<Context path="..." docBase="..." /> docBase用来指定真实的web应用路径,path虚拟路径,这种方式配置完需要重启服务器
2、在tomcat/conf/Catalina/host下面添加xxx.xml,文件中写:<Context docBase="D:\news2"/> ,docBase是web应用的真实路径,xxx是虚拟路径
3、将web应用直接丢到虚拟主机默认的管理目录下就可以了
tomcat的虚拟主机配置
在tomcat/conf/server.xml中的<Engine>标签下添加<Host name="" appBase=""/> name是虚拟主机的名字,相当于localhost,appBase是该虚拟主机管理的目录为可选属性
打war包:进入到web应用的根目录下,通过 jar -cvf xxx.war * 命令可以将当前目录下的所有文件打成一个war包
2、HTTP详解
特点:基于请求响应模型,一次请求对应一次响应,请求只能有客户端发出,服务端只能被动等待请求做出响应
(1) http请求
一个请求行
GET /news3/1.html HTTP/1.1
GET: 请求方式, 7种, 只用GET和POST
/news3/1.html: 请求资源的路径
HTTP/1.1: 所遵循协议的版本
1.0和1.1: 1.0版本的http协议在一次请求响应结束后会立即断开连接, 如果在短时间内需要频繁的发送请求, 也需要频繁的开关连接, 效率低下
1.1版本的http协议在一次请求响应结束后连接会会保持一段时间, 在这段时间内如果需要再次发送请求,无需建立连接, 可以复用之前的连接
若干请求头
Accept: text/html,image/*
-- 通知服务器当前浏览器可以接受那些格式的数据
Accept-Charset: ISO-8859-1
-- 通知服务器当前浏览器可以接受的字符集编码
Accept-Encoding: gzip,compress
-- 通知服务器当前浏览器可以接受的压缩格式
Accept-Language: en-us,zh-cn
-- 通知服务器当前浏览器接受的语言环境,和国际化相关的头
Host: www.baidu.com:80
-- 需要访问的虚拟主机的名称
If-Modified-Since: Tue, 11 Jul 2000 18:23:51 GMT
-- 这是和缓存机制相关的头
Referer: http://www.tedu.cn/index.jsp
-- 这是和防盗链相关的头,对当前资源的访问来自哪个页面的超链接
User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0) -- 客户端的基本信息
Cookie
-- 和cookie相关的头
Connection: close/Keep-Alive
-- 是否继续保持连接
Date: Tue, 11 Jul 2000 18:23:51 GMT
-- 当前发送请求的时间
(一个空行)
请求实体内容
username=zhangsan&password=123
(2) http响应
一个状态行
HTTP/1.1 200 OK
HTTP/1.1: 所遵循协议的版本
200:
状态码, 一个三位的数字, 用来表示服务器对请求处理的结果
200 表示成功处理完成请求
302 表示请求重定向
304 表示通知浏览器使用缓存中的资源
307 表示通知浏览器使用缓存中的资源
404 找不到资源
500 服务器端错误
OK: 描述字符串
若干响应头
Location: http://www.tedu.cn/index.jsp
-- 配合302使用实现请求重定向
Server:apache tomcat
-- 服务器的基本信息
Content-Encoding: gzip
-- 服务器发送的数据使用的压缩格式
Content-Length: 80
-- 服务器发送的数据的大小
Content-Language: zh-cn
--服务器发送的数据使用的语言环境 国际化相关的头
Content-Type: text/html; charset=GB2312
-- 服务器发送的数据是什么格式的,如果是字符格式的数据,则还可以通知浏览器 服务器发送的数据使用的是什么编码,浏览器会根据这个头指定的编码决定使用哪个编码来打开收到的数据
Last-Modified: Tue, 11 Jul 2000 18:23:51 GMT
-- 和缓存相关的头
Refresh: 1;url=http://www.tedu.cn
-- 定时刷新相关的头,通知浏览器,过几秒后自动刷新访问哪个地址
Content-Disposition: attachment;filename=aaa.zip
-- 通知浏览器以附件的形式打开发送过去的数据,是和文件下载相关的头
Set-Cookie:SS=Q0=5Lb_nQ; path=/search
-- 和Cookie相关的头
Expires: -1
-- 通知浏览器是否缓存
Cache-Control: no-cache
-- 通知浏览器是否缓存
Pragma: no-cache
-- 通知浏览器是否缓存
--之所以一个功能有三个头,是因为历史原因.所以为了网页的兼容性考虑,通常这三个头要一起使用
Connection: close/Keep-Alive
-- 是否保持连接
Date: Tue, 11 Jul 2000 18:23:51 GMT
-- 响应时的时间
(一个空行)
响应实体内容
xxxxxx
3、servlet
servlet生命周期:servlet会在第一次访问的时候创建,servlet被创建出来后,服务器会执行init方法来进行初始化操作,从此servlet实例会存在在内存中,为后续的servlet访问,直到服务器停止,web应用被移除容器时为止,随着web容器的销毁servlet也被销毁,在销毁之前调用destory方法执行善后的处理
Servlet开发中的细节问题
(1) Servlet在web.xml中虚拟路径的配置
a) 直接写一个路径 如: /servlet/SecondServlet
b) 可以利用*匹配符来写一个路径
要么以/开头, /*结尾
要么以*.后缀的形式
4、request
代表http请求的对象
1.Request继承结构
ServletRequest -- 通用request接口, 提供了一个request所应该具有的功能
|
|-- HttpServletRequest, 在ServletRequest基础上, 增加了很多和http协议相关的方法
2.Request的功能
(1) 获取客户端基本信息
getRequestURL方法 -- 返回客户端发出请求完整URL
getRequestURI方法 -- 返回请求行中的资源名部分
getQueryString方法 -- 返回请求行中的参数部分
getRemoteAddr方法 -- 返回发出请求的客户机的IP地址
getMethod方法 -- 返回客户机的请求方式
getContextPath方法 -- 获得当前web应用的虚拟目录名称
在工程中不要将web应用的虚拟目录名称写死, 要通过方法来动态的获取!!
(2) 获取请求头信息
getHeader(name)方法 --- String
getHeaders(String name)方法 --- Enumeration<String>
getHeaderNames方法 --- Enumeration<String>
getIntHeader(name)方法 --- int
getDateHeader(name)方法 --- long(日期对应毫秒)
(3) 获取请求参数
getParameter(String name) -- String 通过name获得值
getParameterValues(String name) -- String[] 通过name获得多值 如: 爱好
getParameterNames() -- Enumeration<String> 获得所有请求参数的name
getParameterMap() -- Map<String,String[ ]> key :name value: 多值
请求参数乱码问题: -- 编解码不一致
浏览器发送数据使用的编码: -- utf-8
浏览器使用什么编码来打开当前页面, 就使用什么编码来发送数据, 我们可以通过控制浏览器使用什么编码来打开当前页面, 从而间接的控制浏览器使用什么编码来发送数据
服务器接受数据使用的编码: -- iso8859-1
如果不指定, 服务器默认使用iso8859-1来接受客户端浏览器发送过来的数据
由于这个码表没有中文字符, 所以在接受中文数据时, 必然会产生乱码
**解决方案:
request.setCharacterEncoding("utf-8"); 这个方法用来通知服务器用什么编码来接受客户端发送过来的请求实体内容中的数据,
注意: 这个方法必须放在所有获取数据的代码之前执行
POST提交的请求参数刚好在请求实体中, 所有该方法可以解决POST提交的乱码问题
而GET提交的请求参数在请求资源路径的后面拼接着, 不再请求实体中, 所以该方法对GET提交的乱码无效
怎么解决GET提交的参数乱码问题?? -- 根据乱码产生的原理手动编解码来解决乱码
String username = request.getParameter("username");
byte[] bytes = username.getBytes("iso8859-1");
username = new String(bytes, "utf-8");
(4) 实现请求转发
请求重定向: 302+location
请求转发: 可以实现资源的跳转, 是服务器内部的资源跳转 一次请求, 一次响应 地址栏不会发生变化
实现请求转发:
request.getRequestDispatcher("xxx").forward(request, response);
注意: 转发时路径不要带web应用的虚拟路径的名称
转发时要通过forward()方法将request和response转发出去
细节:
如果转发之前, response缓冲区被写入了数据但是还没有打给浏览器, 转发时该数据将会被清空!
如果转发之前, response缓冲区被写入了数据并且已经打给了浏览器, 转发将会失败!
不能进行多次转发!! 可以进行多重转发!!
转发就像方法的调用, 在转发之后的代码 转发成功之后还会接着执行
(5) 作为域对象使用
域对象: 如果一个对象具有可以被看见的范围, 那么利用这个对象上的map就可以在整个范围中实现资源的共享!
request -- 域对象
setAttribute(String name, Object obj);
getAttribute(String name);
removeAttribute(String name);
getAttributeNames();
生命周期: 一次请求开始, 一次请求结束
作用范围: 整个请求链
主要功能: 把数据带到目的地(在整个范围中实现资源的共享)
(6) 实现请求包含
请求包含是服务器内部资源合并的效果
浏览器发请求访问AServlet, AServlet不能独立的处理该请求, 需要BServlet来帮忙, 于是将BServlet包含了进来:
request.getRequestDispatcher("BServlet").include(request, response);
最终是由AServlet和BServlet一起处理该请求, 处理的结果会合并一起打给浏览器
JavaWeb知识回顾二的更多相关文章
- JavaWeb知识回顾-servlet简介。
现在公司主要用jsp+servlet这种原生的开发方式,用的是uap的开发平台,所以趁着这个时候把有关javaweb的知识回顾一下. 首先是从servlet开始. 一.什么是Servlet?(是一些理 ...
- JavaWeb知识回顾-使用IDEA开发一个servlet.
刚刚开始学习使用IDEA进行开发,好多都不会,本来想直接导入一个eclipse项目,但是出现了好多错误,一时不知道怎么修改,所以就从最基本的servlet开始着手,慢慢熟悉这个工具,下面是使用IDEA ...
- JavaWeb知识回顾-Servlet常用类、接口及其方法
今天主要把servlet的一些常用的类.接口和方法简单回顾一下. javax.servlet包 1.javax.servlet.Servlet接口 接口用于开发servlet,所有的servlet都要 ...
- JavaWeb知识回顾-servlet生命周期。
Servlet生命周期 生命周期,很容易理解,拿人来说,就是你从出生到离开的这一过程.无论是什么技术,只要谈到生命周期都可以这样理解. Servlet的生命周期就是从它被创建到毁灭的过程,整个过程可以 ...
- python---基础知识回顾(二)(闭包函数和装饰器)
一.闭包函数: 闭包函数: 1.在一个外函数中定义了一个内函数 2.内函数里运用了外函数的临时变量,而不是全局变量 3.并且外函数的返回值是内函数的引用.(函数名,内存块地址,函数名指针..) 正确形 ...
- [C#] C# 知识回顾 - 你真的懂异常(Exception)吗?
你真的懂异常(Exception)吗? 目录 异常介绍 异常的特点 怎样使用异常 处理异常的 try-catch-finally 捕获异常的 Catch 块 释放资源的 Finally 块 一.异常介 ...
- [.NET] C# 知识回顾 - Event 事件
C# 知识回顾 - Event 事件 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/6060297.html 序 昨天,通过<C# 知识回顾 - ...
- [.NET] C# 知识回顾 - 事件入门
C# 知识回顾 - 事件入门 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/6057301.html 序 之前通过<C# 知识回顾 - 委托 de ...
- [.NET] C# 知识回顾 - 委托 delegate (续)
C# 知识回顾 - 委托 delegate (续) [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/6046171.html 序 上篇<C# 知识回 ...
随机推荐
- Struts2--Dynamic Result动态结果集
${r} : 表示配置文件xml可以读取action的valuestack的内容 1. jsp显示文件: <body> 动态结果 一定不要忘了为动态结果的保存值设置set get方法 &l ...
- init.rc语法介绍
1.init.rc是一个可配置的初始化文件,通常定制厂商可以配置额外的初始化配置,init.%PRODUCT%.rc 2.init.rc是在$GINGERBREAD/system/core/init/ ...
- 如何使用UDP进行跨网段广播(转)
源:http://blog.chinaunix.net/uid-22670933-id-3716646.html 广播域首先我们来了解一下广播域的概念.广播域是网络中能接收任一台主机发出的广播帧的所有 ...
- ural1414 Astronomical Database
Astronomical Database Time limit: 2.0 secondMemory limit: 64 MB After the Hubble telescope had been ...
- 使用Visual Studio 2008创建你的第一个Windows Mobile程序介绍
使用Visual Studio 2008创建你的第一个Windows Mobile程序介绍 Windows MobileMobileWindowsMicrosoftWinForm 介绍 Microso ...
- Cocos2dx 学习笔记整理----开发环境搭建
最近在学习cocos2dx,预备将学习过程整理成笔记. 需要的工具和环境整理一下: 使用的版本 cocos2dx目前已经出到了v3.1.1,学习和项目的话还是用2.2.3为宜,毕竟不大想做小白鼠,并且 ...
- Extraordinarily Tired Students UVA - 12108
不知道叫什么,好像是模拟的方法,看懂了题就好办(英语硬伤←_←) 题意大概是当一个同学想睡觉的时候判断周围睡觉的人数,不睡的人数大于等于睡觉的话就死撑着,否则就睡觉. 一开始没有什么思路,就直接用了个 ...
- package。。
如果在源代码内没有加上 package ... 是无法以下面的方式访问到主类的. D:\lab_>java timer.LambdaTest 加载时会返回 "错误: 找不到或无法加载主 ...
- ip识别运用
tcp/ip协议中,专门保留了三个IP地址区域作为私有地址,其地址范围如下: 10.0.0.0/8:10.0.0.0-10.255.255.255 172.16.0.0/12:172.16.0.0-1 ...
- IOS9提示“不受信任的开发者”如何处理
iPhone升级到IOS9版本后,发现部分APP在下载后首次运行时,都会提示“不受信任的应用程序开发者”,这是因为企业证书发布的APP,没有经过AppStore审核,于是iOS对用户做出一个安全性的提 ...