java基础复习

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

一、IO流

1.   字节输入流:InputStream

   字节输出流:OutputStream

   字节流操作二进制文件

   字符流操作字符

   如读写文件

2.字符流继承于 Reader Writer

public static void main(String[] args) throws Exception {
		/**
		 * 1.获取输入流       从哪里读
		 * 2.获取输入流       写到哪里去
		 * 
		 */
		FileInputStream fis = new FileInputStream("e:/1.jpg");
		FileOutputStream fot = new FileOutputStream("f:/1.jpg");
		byte[] buf = new byte[1024];
		while(true) {
			int len = fis.read(buf);
			if(len ==-1) 
				break;
			fot.write(buf,0,len);
		}
		fis.close();
		fot.close();
 
	}


二、java 序列化

我们有时候将一个 java 对象变成字节流的形式传出去或者从一个字节流中恢复成一个 java 对象,例如,要将 java 对象存储到硬盘或者
传送给网络上的其他计算机,这个过程我们可以自己写代码去把一个 java 对象变成某个格式的字节流再传输,但是,
jre 本身就提供了
这种支持,我们可以调用 OutputStream writeObject 方法来做,如果要让 java 帮我们做,要被传输的对象必须实现 serializable 接口,
这样, javac 编译时就会进行特殊处理,编译的类才可以被 writeObject 方法操作,这就是所谓的序列化。需要被序列化的类必须实现
Serializable 接口,该接口是一个 mini 接口,其中没有需要实现的方法, implements Serializable 只是为了标注该对象是可被序列化的。


三、jsp

             1.九大内置对象

request
包含用户端请求的信息
response
包含服务器传回客户端的响应信息
session
与请求有关的会话期
pageContext
管理网页属性
application
服务器启动时创建,服务器关闭时停止,为多个应用程序保存信息
out
向客户端输出数据
config
servlet 的架构部件
page
指网页本身
exception
针对错误页面才可使用

    2.JSP 的常用指令

(1)page 指令: 属性最多的指令(实际开发中 page 指令默认),属性最多的一个指令,根据不同的属性,指导整个页面特性
格式:<%@ page 属性名 1= "属性值 1" 属性名 2= "属性值 2" ...%>
常用属性如下:
language:jsp 脚本中可以嵌入的语言种类,这个没用,写与不写一样的;
pageEncoding:当前 jsp 文件的本身编码---内部可以包含 contentType
contentType:response.setContentType(text/html;charset=UTF-8)
import:导入 java 的包
errorPage:当前页面出错后跳转到哪个页面
isErrorPage:当前页面是一个处理错误的页面
(2)include 指令: 页面包含(静态包含)指令,可以将一个 jsp 页面包含到另一个 jsp 页面中 格式:<%@ include file="被包含的文件地址"%>
(3)taglib 指令: 在 jsp 页面中引入标签库(
jstl 标签库、struts2 标签库)
格式:<%@ taglib uri="标签库地址" prefix="前缀"%>
  

  3.  JSP 中动态 INCLUDE 与静态 INCLUDE 的区别

动态 INCLUDE 用 jsp:include 动作实现, <jsp:include page="included.jsp" flush="true"/>它总是会检查所含文件中的变化,适合用
于包含动态页面,并且可以带参数
静态 INCLUDE 用 include 伪码实现,不会检查所含文件的变化,适用于包含静态页面 <%@ include file="included.html" %>

三. servlet 

  1.什么是servlet

   

Servlet 是服务器端的程序,动态生成 html 页面发送到客户端,但是这样程序里会有很多 out.println(),java 与 html 语言混在一起很
乱,所以后来 sun 公司推出了 JSP.其实 JSP 就是 Servlet,每次运行的时候 JSP 都首先被编译成 servlet 文件,然后再被编译成.class
文件运行。有了 jsp,在 MVC 项目中 servlet 不再负责动态生成页面,转而去负责控制程序逻辑的作用,控制 jsp 与 javabean 之间的流


3、说一说 Servlet 的生命周期

Servlet 生命周期包括三部分:
初始化:Web 容器加载 servlet,调用 init()方法
处理请求:当请求到达时,运行其 service()方法。service()自动派遣运行与请求相对应的 doXXX(
doGet 或者 doPost)方法。
销毁:服务结束,web 容器会调用 servlet 的 distroy()方法销毁 servlet。

4、Servlet 的基本架构

public class ServletName extends HttpServlet {
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{ }
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { }
}


5、什么情况下调用 doGet()和 doPost()

Jsp 页面中的 FORM 标签里的 method 属性为 get 时调用 doGet(),为 post 时调用 doPost()。

6、Request 对象的主要方法

setAttribute(String name,Object):设置名字为 name 的 request 的参数值
getAttribute(String name):返回由 name 指定的属性值
getAttributeNames():返回 request 对象所有属性的名字集合,结果是一个枚举的实例
getCookies():返回客户端的所有 Cookie 对象,结果是一个 Cookie 数组
getCharacterEncoding():返回请求中的字符编码方式
getContentLength():返回请求的 Body 的长度 getHeader(String name):获得 HTTP 协议定义的文件头信息
getHeaders(String name):返回指定名字的 request Header 的所有值,结果是一个枚举的实例
getHeaderNames():返回所以 request Header 的名字,结果是一个枚举的实例
getInputStream():返回请求的输入流,用于获得请求中的数据
getMethod():获得客户端向服务器端传送数据的方法
getParameter(String name):获得客户端传送给服务器端的有 name 指定的参数值
getParametervalues(String name):获得有 name 指定的参数的所有值
getRequestURI():获取发出请求字符串的客户端地址
getRemoteAddr():获取客户端的 IP 地址
getSession([Boolean create]):返回和请求相关 Session
getServerName():获取服务器的名字

7.session 和 cookie 有什么区别

1、cookie 数据存放在客户的浏览器上,session 数据放在服务器上。
2、cookie 不是很安全,别人可以分析存放在本地的 COOKIE 并进行 COOKIE 欺骗,考虑到安全应当使用 session。
3、session 会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,考虑到减轻服务器性能方面,应当使用 COOKIE。
4、单个 cookie 保存的数据不能超过 4K,很多浏览器都限制一个站点最多保存 20 个 cookie


四.spring

1.spring是什么

Spring 是一个轻量级的 IoC 和 AOP 容器框架。是为 Java 应用程序提供基础性服务的一套框架,目的是用
于简化企业应用程序的开发,它使得开发者只需要关心业务需求。常见的配置方式有三种:基于 XML 的
配置、基于注解的配置、基于 Java 的配置。
54
主要由以下几个模块组成:
Spring Core:核心类库,提供 IOC 服务;
Spring Context:提供框架式的 Bean 访问方式,以及企业级功能(
JNDI、定时任务等);
Spring AOP:AOP 服务;
Spring DAO:对 JDBC 的抽象,简化了数据访问异常的处理;
Spring ORM:对现有的 ORM 框架的支持;
Spring Web:提供了基本的面向 Web 的综合特性,例如多方文件上传;
Spring MVC:提供面向 Web 应用的 Model-View-Controller 实现。


2.Spring 的 IOC 和 AOP 机制 

主要用到的设计模式有工厂模式和代理模式。
IOC 就是典型的工厂模式,通过 sessionfactory 去注入实例。
AOP 就是典型的代理模式的体现。
代理模式是常用的 java 设计模式,他的特征是代理类与委托类有同样的接口,代理类主要负责为委托类
预处理消息、过滤消息、把消息转发给委托类,以及事后处理消息等。代理类与委托类之间通常会存在
关联关系,一个代理类的对象与一个委托类的对象关联,代理类的对象本身并不真正实现服务,而是通
过调用委托类的对象的相关方法,来提供特定的服务。
spring 的 IOC 容器是 spring 的核心,spring AOP 是 spring 框架的重要组成部分。
在传统的程序设计中,当调用者需要被调用者的协助时,通常由调用者来创建被调用者的实例。但在
spring 里创建被调用者的工作不再由调用者来完成,因此控制反转(
IOC);创建被调用者实例的工作通
常由 spring 容器来完成,然后注入调用者,因此也被称为依赖注入(
DI),依赖注入和控制反转是同一
个概念。
面向方面编程(
AOP)是以另一个角度来考虑程序结构,通过分析程序结构的关注点来完善面向对象编程
OOP)。OOP 将应用程序分解成各个层次的对象,而 AOP 将程序分解成多个切面。spring AOP 只实现
了方法级别的连接点,在 J2EE 应用中,AOP 拦截到方法级别的操作就已经足够。在 spring 中,未来使 IoC
方便地使用健壮、灵活的企业服务,需要利用 spring AOP 实现为 IoC 和企业服务之间建立联系。

AOP:面向切面编程。(
Aspect-Oriented Programming)
AOP 可以说是对 OOP 的补充和完善。OOP 引入封装、继承和多态性等概念来建立一种对象层次结构,
用以模拟公共行为的一个集合。当我们需要为分散的对象引入公共行为的时候,OOP 则显得无能为力。
也就是说,OOP 允许你定义从上到下的关系,但并不适合定义从左到右的关系。例如日志功能。日志代
码往往水平地散布在所有对象层次中,而与它所散布到的对象的核心功能毫无关系。在 OOP 设计中,它
导致了大量代码的重复,而不利于各个模块的重用。
将程序中的交叉业务逻辑(比如安全,日志,事务等),封装成一个切面,然后注入到目标对象(具体
业务逻辑)中去。
实现 AOP 的技术,主要分为两大类:一是采用动态代理技术,利用截取消息的方式,对该消息进行装
饰,以取代原有对象行为的执行;二是采用静态织入的方式,引入特定的语法创建“方面”,从而使得编
译器可以在编译期间织入有关“方面”的代码.
简单点解释,比方说你想在你的 biz 层所有类中都加上一个打印‘你好’的功能,这时就可以用 aop 思想来做.
你先写个类写个类方法,方法经实现打印‘你好’,然后 Ioc 这个类 ref=“biz.*”让每个类都注入即可实现


 Spring 中 Autowired 和 Resource 关键字的区别

@Resource @Autowired 都是做 bean 的注入时使用,其实 @Resource 并不是 Spring 的注解,它的包
javax.annotation.Resource ,需要导入,但是 Spring 支持该注解的注入。
1 、共同点
两者都可以写在字段和 setter 方法上。两者如果都写在字段上,那么就不需要再写 setter 方法。
2 、不同点
(1) @Autowired
@Autowired
Spring
提 供 的 注 解
, 需 要 导 入 包
org.springframework.beans.factory.annotation.Autowired; 只按照 byType 注入。
​
​
public class TestServiceImpl { 
// 下面两种@Autowired 只要使用一种即可
 @Autowired private UserDao userDao; 

// 用于字段上 
@Autowired public void setUserDao(UserDao userDao) { 

// 用于属性的方法上 this.userDao = userDao; } 

}

​

​

@Autowired 注解是按照类型( byType )装配依赖对象,默认情况下它要求依赖对象必须存在,如果允
null 值,可以设置它的 required 属性为 false 。如果我们想使用按照名称( byName )来装配,可以结
@Qualififier 注解一起使用。如下:
public class TestServiceImpl { 
@Autowired 
@Qualifier("userDao") 
private UserDao userDao;
 }

@Resource
@Resource 默认按照 ByName 自动注入,由 J2EE 提供,需要导入包
public class TestServiceImpl { 
// 下面两种@Resource 只要使用一种即可 @Resource(name="userDao") private UserDao userDao;
 // 用于字段上 @Resource(name="userDao") public void setUserDao(UserDao userDao) {
  // 用于属性的 setter 方法上 this.userDao = userDao; } }

@Resource 有两个重要的属性: name type ,而 Spring @Resource 注解的 name 属性解析为 bean
名字,而 type 属性则解析为 bean 的类型。所以,如果使用 name 属性,则使用 byName 的自动
注入策 略,而使用 type 属性时则使用 byType 自动注入策略。如果既不制定 name 也不制定 type 属性,这
时将通
过反射机制使用 byName 自动注入策略。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值