java高级编程及web基础。
/*
*jdk5.0新特性
*泛型:应用在集合上
*编写通用性较强的代码
*自定义泛型方法和类
public <T> void run(){}
*枚举
*enum 类名
{
BOSS("22"),HR("33");
}
*可变参数:
*int...nums
*可以把nums当成数组
*只能有一个可变参数,可变参数放在末尾
*反射:
*通过编译后的class文件获取类中的所有内容
*获取Class对象
*通过类名 User.class
*通过实例对象 new User().getClass()
*Class.forName("包名+类名");
*构造器,属性,方法,获取到的都是对象
*web
*服务器
*网络架构
*C/S eg:QQ
*优点:交互性好,服务器压力小
*缺点:客户端更新,下载
*B/S eg:淘宝
*优点:服务器压力大
*缺点:服务器更新即可
*web网页,Javaweb 使用Java开发网页
*静态web资源
*html,css,javascript
*动态web资源
*数据发生变化
*servlet/jsp
*ASP .net 微软开发
*PHP 开源(开发网站速度快)
*ruby 日本开发的
*java:后台管理系统,处理大数据
*服务器介绍
*原理:网络编程
*概念:
*硬件:一台主机
*软件:安装了服务器的软件
*ping www.baidu.com 63.135.169.121
*常见服务器:
*weblogic BEA公司开发,被Oracle收购 收费 支持javaEE所有规范
*JAVA MySql(oracle) weblogic
*webSphere IBM公司开发 收费 支持javaEE所有规范
*银行喜欢用
*Tomcat Apache开发(开源组织)免费 只支持servlet/jsp
*Tomcat安装注意事项
*安装jdk,配置Java环境变量
*解压版:解压到当前文件夹,目录不要有中文
*启动服务器:tomcat/bin/startup.bat双击启动
*访问服务器:http://localhost:8080
*关闭服务器:tomcat/bin/shutdown.bat双击关闭
*常见启动问题:
*双击启动一闪而过,是环境变量配置有问题。
*端口占用:
*解决:
*结束占用端口的应用程序
*找到占用端口的应用程序
*netstat -ano找出应用程序,在任务管理器中结束程序
*修改服务器的端口号
*修改配置文件(不要轻易修改)
*tomcat/conf/server.xml配置文件
<Connector port="80" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"/>
*tomcat目录结构
*bin 启动项
*conf 配置文件项
*lib 服务器运行时使用的jar包
*logs 日志文件,运行时产生的日志
*temp 运行时的临时文件
*webapps web应用们
*work jsp翻译成servlet程序
*如果动态的文本资源,把web资源发布到服务器的webapps目录下,有固定的目录结构
*静态web资源
*html,css,javascript
*动态web资源
*数据发生变化
*servlet/jsp
*开发动态的web资源程序,目录结构如下
*servlet/jsp主要包含,就成为动态的web资源
*website
| --- 存放HTML,CSS,JavaScript,jsp,图片
WEB-INF
|
web.xml 程序的入口,配置文件,必须存在
classes 文件夹,可选,名称固定
lib 文件夹,可选,名称固定
*tomcat和myEclipse的集成
*Windows--选项--myEclipse--servers--选择tomcat--选择enable--选择tomcat根目录
*配置jdk--选择jdk
*启动服务器
*虚拟路径
*默认和项目名相同
*webroot变成了虚拟路径
*直接复制项目,需要修改虚拟路径
*右键项目--选择属性--myEclipse--web--修改虚拟路径
*部署web项目的三种方式
*项目复制到webapps目录下
*通过配置虚拟路径
*修改配置文件
*写到tomcat/conf/server.xml
*找到<host>,把下面的东西配置到host标签中间
*目的:通过配置,配置访问路径,找到准确的资源
*<context docBase="文件夹的真是目录" path="访问路径"></context>
*自己编写一个配置文件
*自定义以.xml结尾的文件,在$CATALINA_HOME/conf/[enginename]/[hostname]/directory目录下
*把以.xml结尾的文件名当成访问路径
*在xml的文件中编写
*HTTP:超文本传输协议
*基于TCP连接的传输协议
*默认端口号80
*基于请求额响应的模式(先有请求,后有响应)
*客户端连上服务器后,若想获得服务器中的某个资源
需要遵守一定的通信格式,http协议用于定义客户端于服务器端通信的格式
*版本
*HTTP1.0:链接后,只能获取一个web资源
*HTTP1.1:链接后,可以获取多个web资源
*请求:
*请求行:
*提交方式:post,get,options,head
*常用post,get。
*区别:get把参数显示在地址栏,安全级别低,不支持大数据
post把参数封装在请求体中,安全级别高,支持大数据
*请求地址:请求资源
*协议版本:http1.1
*请求头:以键值对形式出现,一般重要的头信息都是一个可以对应一个value
一个可以可以对应多个value
Accept: text/html,image/*
Accept-Charset: ISO-8859-1
Accept-Encoding: gzip
Accept-Language:zh-cn
Host: www.itcast.com:80
If-Modified-Since: Tue, 11 Jul 2000 18:23:51 GMT
*必须和响应头信息一起来控制本地的缓存
Referer: http://www.itcast.com/index.jsp
*记住当前网页的来源(防盗链)
User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0)
*用户代理,判断浏览器的版本
Connection: close/Keep-Alive
Date: Tue, 11 Jul 2000 18:23:51 GMT
*空行:http协议数据规范
*请求体:post提交的参数列表
*响应:
*响应行:
*协议版本:http1.1
*状态码
*200 请求成功,一切OK
*302 请求重定向
*304 服务器资源没有改动,通知客户端查找本地缓存
*404 客户端访问的资源部存在
*500 服务器内部出错
*状态码描述
*响应头:以键值对形式出现,一般重要的头信息都是一个可以对应一个value
一个可以可以对应多个value
Location: http://www.it315.org/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
*和请求头If-Modified-Since一起控制缓存,304
Refresh: 1;url=http://www.it315.org
*完成页面的定时跳转
Content-Disposition: attachment; filename=aaa.zip
*设置文件是以附件的形式打开的。
Expires: -1
Cache-Control: no-cache
Pragma: no-cache
*以上三个是禁用缓存(网银)
Connection: close/Keep-Alive
Date: Tue, 11 Jul 2000 18:23:51 GMT
*空行:http协议数据规范
*响应体:
*转发和重定向
*重定向:第一次发送请求,服务器回复请求码302,内容是另外的地址,客户端需要再发送一次请求
*转发:
*/
/*
*servlet
*什么是servlet?
*实现servlet接口,重写5个方法
*servlet是一个小的Java程序,运行在服务器中,接收和响应从客户端发送过来的请求
*快速入门
*编写一个类,实现servlet接口,重写5个方法
*编写一个类,实现GenericServlet接口,重写1个方法
*配置文件,配置servlet信息
*生命周期:实例被创建,对外提供服务,销毁
*void init(ServletConfig arg0):servlet被创建后,初始化servlet
*void service(ServletRequest arg0, ServletResponse arg1):服务从客户端发送过来的请求
*void destroy():从服务器中移除servlet
*
*servlet的关系:
*servlet接口
|
GenericServlet
|
HttpServlet
|
MyServlet
*为什么会有GenericServlet?为什么会有HttpServlet?
*继承GenericServlet,不要复写所有servlet接口的方法
*HttpServlet,servlet是基于协议的。
*开发步骤
*编写一个类,继承HttpServlet
*重写doGet()和doPost()
*表单是get方式提交,调用doGet
*表单是doPost方式提交,调用doPost
*doGet和doPost互相调用
*配置web.xml
*servlet自动加载
*servlet默认是第一次访问的时候创建实例。通过配置,服务器启动,创建实例
*init做初始化操作,非常消耗时间。
*在web.xml的servlet标签下,配置<load-on-startup>1</load-on-startup>
*值是正数,越小,优先级越高
*配置访问路径:三种方式
eg:<servlet-mapping>
<url-pattern>/demo3</url-pattern>
</servlet-mapping>
*以完全路径匹配:
*以/开头 eg,/demo3
*目录匹配
*以/开头,/* eg,/demo
*扩展名匹配
*不能以/开头,*.do eg,demo.do
*优先级:完全路径匹配>目录匹配>扩展名匹配
*web开发中的路径问题:
*相对路径
*一个文件相对于另一个文件的位置关系
*不能以/开头,写法:./demo(当前目录的demo) == demo ../demo上级目录的demo
*webroot下的资源想访问servlet资源,分别从地址栏可以看出,都是在项目名下直接访问,
所以直接写相对的资源路径./demo3 or demo3
*在webroot下的文件夹下面的资源,想访问servlet资源,因为webroot下的文件夹才是和servlet资源是同一目录下的
所以需要退回上一级去访问资源,相对路径写为:../demo3
*绝对路径
*以/开头
*访问demo3:/day09/demo3
*客户端绝对路径
*‘/day09/demo3’ 需要写项目名
*服务端绝对路径
*‘/demo3’ 不能写项目名
*ServletConfig对象,和配置文件相关【init(ServletConfig arg0)】
*配置初始化参数
*在web.xml的servlet标签下配置
<servlet>
<!-- 配置初始化参数 -->
<init-param>
<param-name>username</param-name>
<param-value>root</param-value>
</init-param>
</servlet>
*如果要是配置在某个servlet的标签下,那么只能在该servlet下获取该初始化参数
*getServletName():获取配置文件中的servlet名称
*getInitParameter(arg0):获取初始化参数
*getInitParameterNames():获取初始化参数的名称
*ServletContext对象 域对象
*定义:web服务器启动时,会为每一个web应用程序创建一个对应的ServletContext对象,它代表当前web应用
一个web应用对应一个ServletContext对象
一个web应用下有多个servlet程序
所有servlet程序共享一个ServletContext对象
*ServletConfig对象中维护了ServletContext对象的引用
*作用:
*获取文本应用全局初始化参数
<context-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</context-param>
*getInitParameter(String name):获取初始化参数
*getInitParameterNames():获取初始化参数的名称
*实现数据共享
*getAttribute(name); 获取数据
*setAttribute(name, obj); 存入数据
*removeAttribute(name); 删除数据
*读取资源文件
*getResourceAsStream(path);通过文件地址获取输入流
*getRealPath(path);通过文件地址获取文件的绝对磁盘路径,即带盘符
*/