1. html + css + javascript,前端
* javascript:
> 基本语法
> BOM、DOM
2. xml
* 格式
* 约束:DTD(看懂即可)、Schema(看不懂也行,名称空间要明白)
* 解析:
> DOM4J应用!
> DOM、SAX:这两规范!
* DOM:它关注的不是怎么去解析,而关注解析的结果是一个Document对象,文档树!
* SAX:它关注的过滤,基于事件驱动!它不关注解析的过程!
> JAXP:它是由Java提供的一组抽象类,它是一个抽象层!它也不是解析器! (抽象工厂!)
* System.getProperties中查找实现类
* java安装目录下的某个位置
* classpath下jar中servies下的javax.xml.parsers.DocumentBuilderFactory
* 自己有个默认类,其实就是xerces修改之后的版本!
> xerces:它是DOM和SAX解析的实现,是真正的解析器!它也实现了JAXP提供的接口和抽象类!
3. Tomcat
* 安装:
> 配置JAVA_HOME
* 目录结构:
> bin:startup.bat、shutdown.bat
> lib:支持tomcat运行的jar包
> conf:四大配置文件:
* server.xml:主配置文件
* context.xml:这里的配置等同与给所有的应用添加了<Context>元素配置
* web.xml:它是所有的应用中的web.xml中的父文件!这里的东西等同与写在每个应用中的web.xml中
* tomcat-users.xml:这个配置tomcat管理员的文件!
> temp:tomcat运行时生成的临时文件,在关闭tomcat后,这个目录中的内容可以删除
> logs:日志文件
> webapps:这里的每个目录都是一个Web应用!
> work:tomcat会把编译后的jsp生成的.java和.class文件存放在这里
* 配置tomcat应用
* webapps下
* 外部应用:
> server.xml中<Host>下添加<Context>元素
> 在conf/catalina/localhost/添加自定义xml文件,在xml文件中添加<Context>元素
* 虚拟主机:
> 在Server.xml文件配置一个<Host>,指定虚拟主机的路径!在该路径下创建应用,这个路径等同与webapps
4. HTTP
* 请求协议
> 请求首行:
* 请求方式
* 协议和版本
* 请求路径
> 请求头:
* Host:请求的服务器主机和端口号
* User-Agent:包含了客户端的浏览器以及操作系统信息
* Referer:请求的来源
> 防盗链
> 统计来自
> 请求体:
* POST请求方式有体,其中中文会被URL编码
* GET请求方式没体,参数需要在URL之后
* 响应协议
> 响应首行
* 状态码
> 200:成功
> 302:重定向
> 404:访问的资源找不到
> 500:服务器报错
* 对状态码的文本解释
* 协议和版本
> 响应头
* Content-Type:响应内容的类型,若是文本类型,还需要指定编码!服务器响应的内容类型!
* Location:在状态码为302时,必须存在这个头,它是浏览器下一个请求的目标地址!
> 响应体
* 响应的主体部分,通常是HTML,浏览器会解读它!
5. Servlet
* Servlet的生命周期
> void init(ServleConfig config):Servlet创建之后,马上调用!
* Servlet在第一次被访问时,Tomcat会创建它
* Servlet会在tomcat启动时被创建
> void service(ServletRequest,ServletResponse)
* 每次处理请求时都会实被调用
> void destroy()
* Tomcat在销毁Servlet之前调用该法
> 在关闭Tomcat时
* GenericServlet
> 提供了init():由init(ServletConfig)来调用,而init(ServletConfig)会先保存ServletConfig到本类成员中
> 提供了getServletContext()方法,内部使用ServletConfig完成
> 提供了获取初始化参数的方法,内部使用ServletConfig完成
> 提供了destory()空方法
* HttpServlet
> service(HttpServletRequest, HttpServletResponse):获取请求方式,通过请求方式来决定是调用doGet()、还是doPost()
> doGet():默认为响应405,所以我们需要覆盖它!
> doPost():默认为响应405,所以我们需要覆盖它!
6. ServletContext
* 它是一个域对象:一个应用只有一个Servletcontext对象!
> setAttribute()
> getAttribute()
> removeAttribute()
* 获取真实路径:getRealPath(),得到的路径是包含盘符的!不是以http开头的!
* 获取MIME类型,getMimeType(),给它一个文件名称,它会返回一个MIME类型,例如:image/jpeg
7. Request和Response
* Response:
> 发送状态码:
* setStatus()
* sendError()
> 发送响应头:
* setHeader(String,String)
* addHeader(String,String)
> 发送响应体
* PrintWriter response.getWriter()
* ServletOutputStream response.getOutputStream();
* 在一个请求内两个只能用一个
> 便捷方法:
> setContentType():设置Content-Type响应头的便捷方法。
* 设置Content-Type响应头,用来告诉浏览器当前响应内使用的文本编码
* 把响应体使用该编码进行处理
> sendRedirect():重定向的便捷方法
8. 编码问题
> 请求:
* GET:先获取,再重编
* POST:在获取之前,调用request.setCharacterEncoding("utf-8")
> 响应:response.setContentType("text/html;charset=utf-8");
9. Cookie和session
Cookie:
* HTTP协议的一部份
* 底层依赖:Cookies请求头,和Set-Cookie响应头
* Cookie保存在客户端
* 发送Cookie给浏览器:response.addCookie(cookie);
* 获取浏览器的Cookie:Cookie[] cs = request.getCookies();
* Cookie的生命:
> 0:指定的在客户端存活的秒数
< 0:指定只在浏览器内存中存活
= 0:指定为马上删除
* Cookie的path
每个Cookie都有一个path,若你当前访问的路径中包含了Cookie的路径,那么归还这个Cookie给服务器!
若在发送Cookie给浏览器时,没有指定path,那么默认为当前资源所在路径!
Session:
* 保存在服务器端
* 依赖Cookie或URL重与
* 得到session:request.getSession()
* session的生命周期
* 从第一次执行request.getSession()方法开始,到Session超时,被移除!
* session是域对象
10.
动态代理
1. 只学一个方法
方法的作用:在运行时,动态创建一组指定的接口的实现类对象!(在运行时,创建实现了指定的一组接口的对象)
interface A {
}
interface B {
}
Object o = 方法(new Class[]{A.class,B.class})
o它实现了A和B两个接口!
-------------
Object proxyObject = Proxy.newProxyInstance(ClassLoader classLoader, Class[] interfaces, InvocationHandler h);
1. 方法作用:动态创建实现了interfaces数组中所有指定接口的实现类对象!
参数;
1. ClassLoader:类加载器!
* 它是用来加载器的,把.class文件加载到内存,形成Class对象!
2. Class[] interfaces:指定要实现的接口们
3. InvocationHandler:代理对象的所有方法(个别不执行,getClass())都会调用InvocationHandler的invoke()方法。
---------------------------------------------------------
2. 动态代理作用
最终是学习AOP(面向切面编程),它与装饰者模式有点相似,它比装饰者模式还要灵活!
----------------------------------------------------------
InvocationHandler
public Object invoke(Object proxy, Method method, Object[] args);
这个invoke()方法在什么时候被调用!
1. 在代理对象被创建时?错误的!
2. 在调用代理对象所实现接口中的方法时?正确的!
* Object proxy:当前对象,即代理对象!在调用谁的方法!
* Method method:当前被调用的方法(目标方法)
* Object[] args:实参!
----------------------------
目标对象:被增强的对象
代理对象:需要目标对象,然后在目标对象上添加了增强后的对象!
目标方法:增强的内容
代理对象 = 目标对象 + 增强
类加载器
1. 什么是类加载器
* 把.class文件加载到JVM的方法区中,变成一个Class对象!
2. 得到类加载器
* Class#getClassLoader()
3. 类加载器的分类
它们都是片警!
* 引导:类库!
* 扩展:扩展jar包
* 系统:应用下的class,包含开发人员写的类,和第三方的jar包!classpath下的类!
系统类加载器的上层领导:扩展
扩展类加载器的上层领导:引导
引导没上层,它是BOSS
======================================
4. 类加载器的委托机制
* 代码中出现了这么一行:new A();
> 系统发现了自己加载的类,其中包含了new A(),这说明需要系统去加载A类
> 系统会给自己的领导打电话:让扩展去自己的地盘去加载A类
> 扩展会给自己的领导打电话:让引导去自己的地盘去加载A类
> 引导自己真的去rt.jar中寻找A类
* 如果找到了,那么加载之,然后返回A对应的Class对象给扩展,扩展也会它这个Class返回给系统,结束了!
* 如果没找到:
> 引导给扩展返回了一个null,扩展会自己去自己的地盘,去寻找A类
* 如果找到了,那么加载之,然后返回A对应的Class对象给系统,结束了!
* 如果没找到
> 扩展返回一个null给系统了,系统去自己的地盘(应用程序下)加载A类
* 如果找到了,那么加载之,然后返回这个Class,结束了!
* 如果没找到,抛出异常ClassNotFoundException
5. 类的解析过程
class MyApp {//被系统加载
main() {
A a = new A();//也由系统加载
String s = new String();//也由系统加载!
}
}
class String {//引导
private Integer i;//直接引导加载
}
=====================
6.自定义类加载器
* 继承ClassLoader
* 重写findClass()
=====================
7. Tomcat的类加载器
Tomcat提供了两种类加载器!
* 服务器类加载器:${CATALINA_HOME}\lib,服务器类加载器,它负责加载这个下面的类!
* 应用类加载器:${CONTEXT_HOME}\WEB-INF\lib、${CONTEXT_HOME}\WEB-INF\classes,应用类加载器,它负责加载这两个路径下的类!
引导
扩展
系统
特性:
服务器类加载器:先自己动手,然后再去委托
应用类加载器::先自己动手,然后再去委托
* javascript:
> 基本语法
> BOM、DOM
2. xml
* 格式
* 约束:DTD(看懂即可)、Schema(看不懂也行,名称空间要明白)
* 解析:
> DOM4J应用!
> DOM、SAX:这两规范!
* DOM:它关注的不是怎么去解析,而关注解析的结果是一个Document对象,文档树!
* SAX:它关注的过滤,基于事件驱动!它不关注解析的过程!
> JAXP:它是由Java提供的一组抽象类,它是一个抽象层!它也不是解析器! (抽象工厂!)
* System.getProperties中查找实现类
* java安装目录下的某个位置
* classpath下jar中servies下的javax.xml.parsers.DocumentBuilderFactory
* 自己有个默认类,其实就是xerces修改之后的版本!
> xerces:它是DOM和SAX解析的实现,是真正的解析器!它也实现了JAXP提供的接口和抽象类!
3. Tomcat
* 安装:
> 配置JAVA_HOME
* 目录结构:
> bin:startup.bat、shutdown.bat
> lib:支持tomcat运行的jar包
> conf:四大配置文件:
* server.xml:主配置文件
* context.xml:这里的配置等同与给所有的应用添加了<Context>元素配置
* web.xml:它是所有的应用中的web.xml中的父文件!这里的东西等同与写在每个应用中的web.xml中
* tomcat-users.xml:这个配置tomcat管理员的文件!
> temp:tomcat运行时生成的临时文件,在关闭tomcat后,这个目录中的内容可以删除
> logs:日志文件
> webapps:这里的每个目录都是一个Web应用!
> work:tomcat会把编译后的jsp生成的.java和.class文件存放在这里
* 配置tomcat应用
* webapps下
* 外部应用:
> server.xml中<Host>下添加<Context>元素
> 在conf/catalina/localhost/添加自定义xml文件,在xml文件中添加<Context>元素
* 虚拟主机:
> 在Server.xml文件配置一个<Host>,指定虚拟主机的路径!在该路径下创建应用,这个路径等同与webapps
4. HTTP
* 请求协议
> 请求首行:
* 请求方式
* 协议和版本
* 请求路径
> 请求头:
* Host:请求的服务器主机和端口号
* User-Agent:包含了客户端的浏览器以及操作系统信息
* Referer:请求的来源
> 防盗链
> 统计来自
> 请求体:
* POST请求方式有体,其中中文会被URL编码
* GET请求方式没体,参数需要在URL之后
* 响应协议
> 响应首行
* 状态码
> 200:成功
> 302:重定向
> 404:访问的资源找不到
> 500:服务器报错
* 对状态码的文本解释
* 协议和版本
> 响应头
* Content-Type:响应内容的类型,若是文本类型,还需要指定编码!服务器响应的内容类型!
* Location:在状态码为302时,必须存在这个头,它是浏览器下一个请求的目标地址!
> 响应体
* 响应的主体部分,通常是HTML,浏览器会解读它!
5. Servlet
* Servlet的生命周期
> void init(ServleConfig config):Servlet创建之后,马上调用!
* Servlet在第一次被访问时,Tomcat会创建它
* Servlet会在tomcat启动时被创建
> void service(ServletRequest,ServletResponse)
* 每次处理请求时都会实被调用
> void destroy()
* Tomcat在销毁Servlet之前调用该法
> 在关闭Tomcat时
* GenericServlet
> 提供了init():由init(ServletConfig)来调用,而init(ServletConfig)会先保存ServletConfig到本类成员中
> 提供了getServletContext()方法,内部使用ServletConfig完成
> 提供了获取初始化参数的方法,内部使用ServletConfig完成
> 提供了destory()空方法
* HttpServlet
> service(HttpServletRequest, HttpServletResponse):获取请求方式,通过请求方式来决定是调用doGet()、还是doPost()
> doGet():默认为响应405,所以我们需要覆盖它!
> doPost():默认为响应405,所以我们需要覆盖它!
6. ServletContext
* 它是一个域对象:一个应用只有一个Servletcontext对象!
> setAttribute()
> getAttribute()
> removeAttribute()
* 获取真实路径:getRealPath(),得到的路径是包含盘符的!不是以http开头的!
* 获取MIME类型,getMimeType(),给它一个文件名称,它会返回一个MIME类型,例如:image/jpeg
7. Request和Response
* Response:
> 发送状态码:
* setStatus()
* sendError()
> 发送响应头:
* setHeader(String,String)
* addHeader(String,String)
> 发送响应体
* PrintWriter response.getWriter()
* ServletOutputStream response.getOutputStream();
* 在一个请求内两个只能用一个
> 便捷方法:
> setContentType():设置Content-Type响应头的便捷方法。
* 设置Content-Type响应头,用来告诉浏览器当前响应内使用的文本编码
* 把响应体使用该编码进行处理
> sendRedirect():重定向的便捷方法
8. 编码问题
> 请求:
* GET:先获取,再重编
* POST:在获取之前,调用request.setCharacterEncoding("utf-8")
> 响应:response.setContentType("text/html;charset=utf-8");
9. Cookie和session
Cookie:
* HTTP协议的一部份
* 底层依赖:Cookies请求头,和Set-Cookie响应头
* Cookie保存在客户端
* 发送Cookie给浏览器:response.addCookie(cookie);
* 获取浏览器的Cookie:Cookie[] cs = request.getCookies();
* Cookie的生命:
> 0:指定的在客户端存活的秒数
< 0:指定只在浏览器内存中存活
= 0:指定为马上删除
* Cookie的path
每个Cookie都有一个path,若你当前访问的路径中包含了Cookie的路径,那么归还这个Cookie给服务器!
若在发送Cookie给浏览器时,没有指定path,那么默认为当前资源所在路径!
Session:
* 保存在服务器端
* 依赖Cookie或URL重与
* 得到session:request.getSession()
* session的生命周期
* 从第一次执行request.getSession()方法开始,到Session超时,被移除!
* session是域对象
10.
动态代理
1. 只学一个方法
方法的作用:在运行时,动态创建一组指定的接口的实现类对象!(在运行时,创建实现了指定的一组接口的对象)
interface A {
}
interface B {
}
Object o = 方法(new Class[]{A.class,B.class})
o它实现了A和B两个接口!
-------------
Object proxyObject = Proxy.newProxyInstance(ClassLoader classLoader, Class[] interfaces, InvocationHandler h);
1. 方法作用:动态创建实现了interfaces数组中所有指定接口的实现类对象!
参数;
1. ClassLoader:类加载器!
* 它是用来加载器的,把.class文件加载到内存,形成Class对象!
2. Class[] interfaces:指定要实现的接口们
3. InvocationHandler:代理对象的所有方法(个别不执行,getClass())都会调用InvocationHandler的invoke()方法。
---------------------------------------------------------
2. 动态代理作用
最终是学习AOP(面向切面编程),它与装饰者模式有点相似,它比装饰者模式还要灵活!
----------------------------------------------------------
InvocationHandler
public Object invoke(Object proxy, Method method, Object[] args);
这个invoke()方法在什么时候被调用!
1. 在代理对象被创建时?错误的!
2. 在调用代理对象所实现接口中的方法时?正确的!
* Object proxy:当前对象,即代理对象!在调用谁的方法!
* Method method:当前被调用的方法(目标方法)
* Object[] args:实参!
----------------------------
目标对象:被增强的对象
代理对象:需要目标对象,然后在目标对象上添加了增强后的对象!
目标方法:增强的内容
代理对象 = 目标对象 + 增强
类加载器
1. 什么是类加载器
* 把.class文件加载到JVM的方法区中,变成一个Class对象!
2. 得到类加载器
* Class#getClassLoader()
3. 类加载器的分类
它们都是片警!
* 引导:类库!
* 扩展:扩展jar包
* 系统:应用下的class,包含开发人员写的类,和第三方的jar包!classpath下的类!
系统类加载器的上层领导:扩展
扩展类加载器的上层领导:引导
引导没上层,它是BOSS
======================================
4. 类加载器的委托机制
* 代码中出现了这么一行:new A();
> 系统发现了自己加载的类,其中包含了new A(),这说明需要系统去加载A类
> 系统会给自己的领导打电话:让扩展去自己的地盘去加载A类
> 扩展会给自己的领导打电话:让引导去自己的地盘去加载A类
> 引导自己真的去rt.jar中寻找A类
* 如果找到了,那么加载之,然后返回A对应的Class对象给扩展,扩展也会它这个Class返回给系统,结束了!
* 如果没找到:
> 引导给扩展返回了一个null,扩展会自己去自己的地盘,去寻找A类
* 如果找到了,那么加载之,然后返回A对应的Class对象给系统,结束了!
* 如果没找到
> 扩展返回一个null给系统了,系统去自己的地盘(应用程序下)加载A类
* 如果找到了,那么加载之,然后返回这个Class,结束了!
* 如果没找到,抛出异常ClassNotFoundException
5. 类的解析过程
class MyApp {//被系统加载
main() {
A a = new A();//也由系统加载
String s = new String();//也由系统加载!
}
}
class String {//引导
private Integer i;//直接引导加载
}
=====================
6.自定义类加载器
* 继承ClassLoader
* 重写findClass()
=====================
7. Tomcat的类加载器
Tomcat提供了两种类加载器!
* 服务器类加载器:${CATALINA_HOME}\lib,服务器类加载器,它负责加载这个下面的类!
* 应用类加载器:${CONTEXT_HOME}\WEB-INF\lib、${CONTEXT_HOME}\WEB-INF\classes,应用类加载器,它负责加载这两个路径下的类!
引导
扩展
系统
特性:
服务器类加载器:先自己动手,然后再去委托
应用类加载器::先自己动手,然后再去委托