javaweb学习笔记

  • j2se:反射原理,多线程,集合,数组,数据类型,IO
  • j2ee:ssm搭建,ssh搭建,servlet原理,jsp原理.JVM,设计模式:单例,工厂,装饰者.
  •  
  • lambda
  • 使用lambda必须具有接口,且要求接口中有且仅有一个抽象方法.
  • 使用lambda必须具有上下文推断,因为接口中的方法就一个,所以参数类型,返回值类型都是确定的,所以可以省略
  •  
  • servlet是什么?
    • 是一个接口,他要求程序员实现,但是是由Tomcat(服务器)去创建对象,并且由服务器来调用对应的方法
    • 他的作用是接受请求,处理请求,返回响应
    • 他是单例的,一个类中只有一个对象,所以他是线程不安全的,所以他的效率较高.但存在并发访问的安全问题
    • 生命周期方法由三个,
      • init:出生之后执行一次,用于初始化资源
      • destory:销毁之前执行一次,用于关闭一些资源,
      • service:每次处理请求时,都会被调用
  • 地址
    • ${pageContext.request.contextPath}/Aservlet
  • servletconfig 是什么?
    • 它是servlet的配置信息,它也是一个接口,Tomcat提供其实现类,不需要我们写
    • 一个servletconfig对象对应一段web.xml中servlet的配置信息(servletname,servletclass)
    • 它的作用:
      • getServletName(几乎没啥用)
      • getServletContext:返回servletContext (它是最常用的方法)获取servlet上下文,可以把项目中的sevlet中的信息串在一起,它是各个sevlet的快递员,传话员,servlet之间是不认识的
      • getInitparamter(string name):通过初始化参数名称得到其值
  • servletContext有什么作用呢?
    • 它是上下文对象
    • 1,是一个域对象
      • 全局共享,里面的数据所有动态资源都可以写入和获取
      • 服务器启动的时候创建,服务器关闭的时候销毁,因为这是全局应用程序对象,全局共享对象。
    • 2,可以读取全局配置参数
      • 可以在web.xml配置
    • 3,可以搜索当前工程目录下的资源文件
      • getServletContext().getRealPath(path),根据相对路径 获取服务器上资源的绝对路径
      • getServletContext().getResourceAsStream(path),根据相对路径 获取服务器上资源的输入字节流
    • 4,可以获取当前工程名字(了解)/也称上下文路径
      • getServletContext().getContextPath();
  • 反射是什么?
    • Java反射机制是在运行状态中,对于任意一个类(class文件),都能知道这个类的所有属性和方法
    • 对于任意一个对象,都能够调用它的任意一个方法和属性
    • 这种动态获取类的信息以及动态调用对象的方法的功能成为Java语言的反射机制
    • 简单的说:能动态获取类中的信息.就是Java反射
    • 可以理解为对类的解剖
    • 比如说servlet,它为我们提供接口,我们编写实现类,但是它如何去调用servlet中的方法呢?
    • 它如何创建的实现类的对象呢?就是用到了反射,因为我们在web.xml中配置了servlet的相关信息
    • tomcat在动态获取web.xml中的信息,知道了servlet的实现类名,就可以利用反射技术动态获取对象
    • .class 字节码文件 被抽取 有一个Class类.
      • Class类可以有得到获取字节码文件的内容,比如名称,字段,构造函数,一般函数.
      • 该类可以获取字节码文件中的所有内容
      • 反射就是依靠该类完成的
    • 所以,想要对一个类文件进行解剖,只要获取到该类的字节码文件对象即可
    • 反射拿到对象后,和直接new出来有什么区别?
      • 早期:new的时候,先根据被new的类的名称找寻该类的字节码文件,并加载进内存,
        • 创建其字节码文件对象,再创建其对应的实体类对象
      • 现在:通过全限定类名找寻该类文件,并加载进内存,产生字节码文件对象(Class对象)
        • 如何产生该类的对象呢?(newInstance)
        • Class中的forName方法,类的权限定类名
          • Class student = Class.forName("reflectDemo.reflect.bean.Student");
        • Object o = student.newInstance(); // 这句话等同于new一个空参的该类对象,若此类中没有空参构造函数.或者构造函数是Private,都会失败
  •  
  • 自定义标签:
    • 祖先JSPTag,下面两儿子。
      • Tag:出现的比爹早
      • SimpleTag:我们常用的,有5个方法
        • void doTag() 每次执行标签都会调用这个方法
        • JspTag getParent() 返回父标签,除了此方法,其余四个方法都是由tomcat来调用,非生命周期方法。
        • void setParent(JspTag) 设置父标签
        • void setJspBody(JspFragment) 设置标签体
        • void setJspContext(JspContext) 设置jsp上下文对象,它儿子是pagecontext
      • 其中doTag()会在其他三个方法之后被Tomcat调用
    • tld文件一般都放到web-INF之下,这样保证客户端访问不到
      • empty 指定标签体的类型,这表示空标签
        • 比如
    • 但是最终还是使用 继承 simpleTagSupport的方式,因为其已经实现了simpleTag
  •  
  • SpringMVC:
    • model是用来从后台封装数据到页面的,比如页面上展示一个“欢迎你,{userName}",你就可以用model封装一个userName进去,model.addAttribute("useNamer”,张三"" );页面就会显示”欢迎你,张三”
  • 什么是关系型数据库?
    • 是基于关系模型创建的数据库
    • 什么是关系模型呢?
      • 我们用二维表,行和列的方式来保存数据的模型,叫关系模型
  • oracle优化
    • 查询时 列名 比 *好
    • where and条件 是从右向左判断,所以最好是把假 的判断放在右边
      • or 最好把真的放在右边
    • 在having和where 选择哪个好?
      • 尽量使用where,having是先分组,再过滤,而where是先过滤再分组,where应该写在group by前面
      • 记录数越多,效果越明显
    • 多表查询好于子查询
    • where 后面不能使用多行函数,而having可以使用多行函数
    • 尽量不要使用集合运算,效率低(INTERSECT)
  • 学习oracle函数的目的是简化操作
    • oracle的函数非常的多
  • 笛卡尔积 列数相加 行数相乘
    • 多表查询 连接条件至少有N-1个,N代表 表的个数
  • 我们希望把某些不成立的记录,仍然包含在最后的结果中 ---》外连接
    • oracle分为左外连接和右外连接
      • 左外连接:当where e.deptno=d.depton不成立的时候,等号左边的表仍然被包含在最后的结果中
        • 写法where e.deptno=deptno(+)
      • 右外连接反之
    • 层级查询 上级编号等于本级的领导编号
    • select level(伪列),empno,ename,mgr
    • from emp
    • connect by prior empno=mgr
    • start with mgr is null
    • order by 1;
  •  
  • 单行子查询只能使用单行操作符,多行子查询只能使用多行操作符
  • 多行操作符 in any all
  •  
  • 子查询
    • 单行子查询:只返回一行结果
    • 多行子查询:返回多行结果
  •  
  • 非谓语动词可以引导定于从句
  •  
  • not in = all 所以not in 不能有null 值, 因为这样会永远不成立
  • in = any
    • oracle数据库
      • DML data manipulation language 数据库操作语言:select update delete
      • DDL data definition language 数据库定义语言:create table,alter table,drop table,create/drop view,sequence,index,synonym(同义词)
      • DCL data control language 数据控制语言:grant(授权) revoke(撤销权限)
    • 数据完整性就是约束
  • /** tcp通信能实现两台计算机之间的数据交互* 两端通信时的步骤:* 1,服务端程序,需要先启动,等待客户端的连接* 2,服务端不可以主动连接客户端,客户端主动连接服务端* TCP通信:面向连接的通信,客户端和服务器端必须要经过3次握手,才能通信,一定要安全* 客户端连接服务器后,连接中会包含一个对象,此对象是IO对象* 因为通信的数据不仅仅是字符,所以IO对象是字节流对象* 一个服务器对应多个客户端,客户端叫Socket类,服务器端叫ServerSocket类* 原理:服务器使用客户端的流和客户端进行通信,服务器可以获取到客户端的socket的对象,多个客户端连接服务器,服务器端有一个accept* */
  •  
  • 设计模式
    • 装饰者模式
      • 对一组对象的功能进行增强时,就可以使用该模式进行问题的解决
      • 对已有功能增强,比继承灵活
    • 特点:装饰类和被装饰类都必须所属同一个接口或者父类
      • IO的Buffer
  • ==对于普通数值类型比较的是值,对于引用类型比较的就是内存地址
  • equals比较的是其中的内容
  •  
  • /** final:最终的意思,可以修饰类,成员变量,成员方法* 修饰类:类不能被继承* 修饰变量:变量是常量* 修饰方法,方法不能被重写* finally:是异常处理的一部分,用于释放资源.* 一般来说,代码肯定会执行,特殊情况:在执行到finally之前jvm退出了* finalize:是Object类的一个方法,用于垃圾回收*** 如果catch里面有return语句,请问finally里面的代码还会执行吗?* 如果会,请问是在return前,还是在return后* 会,前* 准确的说,应该在中间,会有一个返回路径的问题* */
  •  
  • HTTP无状态
  • “每次的请求都是独立的,它的执行情况和结果与前面的请求和之后的请求是无直接关系的,它不会受前面的请求应答情况直接影响,也不会直接影响后面的请求应答情况”
  •  

你可能感兴趣的:(JaveEE)