A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 小鲁哥哥 于 2017-11-22 14:29 编辑

『黑马程序员济南』JavaEE就业笔记串讲--基础加强部分

注解的概述
注解和注释区别:
   * 注释:给程序员看的.
   * 注解:给虚拟机看的.(让虚拟机看到程序中的注解,注解代表程序的一些特殊的功能.)
JDK中提供的注解
   @Override        :描述子类重写父类的方法:
      * JDK1.5版本的时候 该注解只能应用在 类的继承上.
      * JDK1.6版本的时候 该注解可以应用在 类的实现上.
   @SuppressWarnings    :压制警告.
   @Deprecated           :描述方法过时.
自定义注解
   * 定义类    :class
   * 定义接口    :interface
   * 定义枚举    :enum
   * 定义注解    :@interface
代码:
[Java] 纯文本查看 复制代码
/**
* 定义一个注解:名称是Anno1
*/
@interface Anno1{

}

定义注解的属性:
* 注解的属性的类型:
    * 基本数据类型:
    * String类型:
    * Class类型:
  * 注解类型:
    * 枚举类型:
    * 以上类型的一维数组:
* 代码实现:
[Java] 纯文本查看 复制代码
/**
* 定义一个带有属性的注解:Anno2
*/
@interface Anno2{
int a();
boolean b() default false;
String s();
// Date d();
Class c();
Anno1 anno1();
Color color();
String[] arrs();
}

***** 特殊的属性名称:value
     * 如果使用注解的时候,只出现了value属性,value属性可以省略的.
文件上传:
* 指的是将本地的文件写到 服务器上.
文件上传技术:
   * Servlet3.0              :注解开发,文件上传,异步请求.
   * JSPSmartUpload    :嵌入到JSP中完成文件上传.主要用于Model1年代的.
   * FileUpload            :Apache的文件上传组件.
   * Struts2                  :底层是FileUpload.
文件上传的要素:
   * 表单的提交的方式必须是POST.
   * 表单中需要有文件上传的表单元素:这个元素这个元素必须有name属性和值:<input type=”file”name=”upload”>
   * 表单的enctype属性的值必须是multipart/form-data.

Servlet3.0

Servlet3.0与Servlet2.5提供了三个新特性:
   * 注解开发    :方便
   * 文件上传    :有些API不是特别全.
   * 异步请求    :
Servlet3.0的注解开发
   @WebServlet
   @WebListener
   @WebFilter
文件上传原理分析
   设计文件上传的页面:
   进行文件上传的抓包分析:
   没有设置enctype属性的时候:只能获得文件的名称,而没有文件内容.
   设置enctype属性为multipart/form-data:获得到文件名及文件内容.
文件上传问题:文件名重名.
    使用随机的唯一文件名:
   * 使用UUID作为随机的文件名.
文件上传问题:一个目录下存放的文件过多.
   一个目录下文件过多,导致打开都很慢,更别说是读写操作.
目录分离:
   * 按时间分    :一个月一个目录,一个星期一个目录,一天一个目录
   * 按数量分    :一个目录下存5000个文件,创建一个新的目录,再去存放.
   * 按用户分    :为每个用户创建一个单独目录存放文件.
   * 按目录分离算法分       :
      * 使用唯一文件名.hashCode(); --得到一个代表当前这个文件的int类型值.
      * int类型占4个字节32位.可以让hashCode值&0xf; 得到一个int值,用这个int值作为一级目录.
      * 让hashCode右移4位 &0xf ;得到一个int值,用这个int值作为二级目录.依次类推.
Servlet3.0异步请求:
[Java] 纯文本查看 复制代码
/**
* 异步请求的Servlet
*/
@WebServlet(urlPatterns="/AsyncServlet",asyncSupported=true)
public class AsyncServlet extends HttpServlet {
private static final long serialVersionUID = 1L;

protected void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
AsyncContext context = request.startAsync(request, response);
context.start(new MyRunnable(context));

for(int i = 1;i<=10;i++){
System.out.println(i);
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}

protected void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
doGet(request, response);
}

}

class MyRunnable implements Runnable{
private AsyncContext context;
public MyRunnable(AsyncContext context) {
this.context = context;
}
@Override
public void run() {
for(char i='a';i<='z';i++){
try {
context.getResponse().getWriter().println(i);
Thread.sleep(100);
} catch (Exception e) {
e.printStackTrace();
}
}
}

}


request中的方法的增强
继承        :能够控制这个类的构造.
装饰者    :增强的类和被增强的类实现相同的接口,增强的类中获得到被增强的类的引用.
   * 接口中方法过多,只增强其中的某个方法.其他的方法也需要重写.
动态代理    :被增强的类实现了接口.
JDK中动态代理    :Proxy对象.
   * Proxy.newProxyInstance(ClassLoader cl,Class[]interfaces,InvocationHandler ih);
代理的企业应用:
  Spring的AOP
    AOP的底层使用的就是代理机制:
      * AOP    :面向切面编程.新的思想,用来解决OOP中遇到的一些问题!!!
类加载器:
类的加载器:将class文件加载到JVM中执行这个文件.
Java中将类加载器分成三类:
引导类加载器:       JAVA_HOME/jre/lib/rt.jar
     |
扩展类加载器:       JAVA_HOME/jre/lib/ext/*.jar
     |
应用类加载器:        加载类路径下的所有的class.

这些类加载器如何保证类只会加载一次而且不会重复加载:
类加载器的全盘委托机制:
[Java] 纯文本查看 复制代码
class A {
String s;

}

由应用类加载器得到A.class String,class,委托给扩展类加载器,扩展类加载器又委托给引导类加载器.引导类加载器加载String.class.将其他的类的class向下给扩展类加载器.扩展类加载器没有找到.向下给应用类加载器,将A.class 加载.
点进这个帖子的同学肯定是要奋发图强,学技术拿高薪的有志青年,这里我看你骨骼惊奇,是个绝世的练武奇才,你我有缘,今天我就把这个武林秘籍如来神掌传授于你! 什么?不想学如来神掌?不要紧!这里有各个门派的武林绝学,链接拿好!!哈哈哈哈


0 个回复

您需要登录后才可以回帖 登录 | 加入黑马