Java web学习总结

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,应用类加载器,它负责加载这两个路径下的类!


  引导
  扩展
  系统


  特性:
  服务器类加载器:先自己动手,然后再去委托
  应用类加载器::先自己动手,然后再去委托
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值