第一篇:Java开发笔记 — HttpServletRequest方法总结
Java开发笔记 — HttpServletRequest方法总结
HttpServletRequest方法总结
getScheme()方法返回请求的计划,比如http,https或者ftp.getServerName()方法返回被发送请求的服务器的主机名 getServerPort()方法返回被发送请求的端口号。
getContextPath()返回请求地址的根目录,以“/”开关,但不是以“/”结尾。
一个常用的获得服务器地址的连接字符串是: String path = request.getContextPath();String basePath = request.getScheme()+“://”+request.getServerName()+“:”+request.getServerPort()+path+“/”;getCookies()取得cookie
getMethod()取得请求方法,如get,post或put getRequestURL()取得请求URL(统一资源定位符)getRequestURI()取得请求URI(统一资源标识符)getSession()取得对应session getHeaderNames()返回请求包含的所有头名称的一个enumeration(遍历器)使用方法如下:
Enumeration en = request.getHeaderNames();while(en.hasMoreElements()){
out.print(en.nextElement());
} 输出如下结果:
accept accept-language accept-encoding user-agent host connection cookie 具体含义是:
Accept:浏览器可接受的MIME类型。
Accept-Language:浏览器所希望的语言种类,当服务器能够提供一种以上的语言版本时要用到。
Accept-Encoding:浏览器能够进行解码的数据编码方式,比如gzip。Servlet能够向支持gzip的浏览器返回经gzip编码的HTML页面。许多情形下这可以减少5到10倍的下载时间。
User-Agent:浏览器类型,如果Servlet返回的内容与浏览器类型有关则该值非常有用。Host:初始URL中的主机和端口。
Connection:表示是否需要持久连接。如果Servlet看到这里的值为“Keep-Alive”,或者看到请求使用的是HTTP 1.1(HTTP 1.1默认进行持久连接),它就可以利用持久连接的优点,当页面包含多个元素时(例如Applet,图片),显著地减少下载所需要的时间。要实现这一点,Servlet需要在应答中发送一个Content-Length头,最简单的实现方法是:先把内容写入 ByteArrayOutputStream,然后在正式写出内容之前计算它的大小。
Cookie:这是最重要的请求头信息之一
getHeader(name)返回指定名称的特定请求的值。使用方法如下:
out.print(“cookie:===”+request.getHeader(“cookie”)+“
”);完整举例: accept:===*/* accept-language:===zh-cn accept-encoding:===gzip, deflate user-agent:===Mozilla/4.0(compatible;MSIE 6.0;Windows NT 5.1;SV1;TheWorld)host:===localhost:8080 connection:===Keep-Alive cookie:===JSESSIONID=BF00F7FD72F5DF83DF8F62E3D5EFF960
第二篇:Java笔记总结
1、Java是一种可以编译 跨平台、面向对象的高级计算机语言。
2、Java语言的特点:简单、安全、跨平台、面向对象、支持多线程。
3、Java的三个技术平台分别是 JavaSE、JavaEE、JavaME。
4、Java程序的运行环境简称为 JDK。
5、编译Java程序需要使用 javac 命令。
6、javac.exe和java.exe这两个可执行程序存放在JDK安装目录的bin目录下。
7、PATH环境变量用来存储Java的编译和运行工具所在的路径;CLASSPATH环境变量 则用来保存Java虚拟机要运行的“.calss”文件。
8、.class文件在 java.exe 文件启动的JVM中运行。
9、JRE与JDK之间的区别:
a)JRE(Java Runtime Environment)提供java程序运行所需要的基本条件(如JVM)和许多基础类。
b)JDK(Java Development Kit)是Java程序开发工具包——包含编译工具、解释工具、打包工具等开发工具。
10、JVM——Java虚拟机,相当于一个虚拟的操作系统,负责运行javac.exe生成的 字节码(二进制)文件。java.exe执行”.class”,就是java.exe启动JVM运行”.class”文件。
11、标识符命名规则:
a)包名所有字母一律小写。
b)类名和接口名每个单词首字母大写。
c)常量名所有字母都大写,单词之间用下划线分开。
d)变量名和方法名的第一个单词小写,之后的每个单词首字母大写。
12、强制类型转换:
a)格式:目标类型 变量名 =(目标类型)值
b)int类型转换成byte类型 很容易造成 精度丢失。因为int类型变量是32位,byte类型只有8位,所以在转换过程中会丢失int类型的高3位字节。
c)在用”双字符“型运算符(+=、-=之类的)运算时,强制类型会自动完成,不用程序显示的声明。
13、三元运算符:判断条件?表达式1:表达式2;——若条件成立,执行表达式1,否则执行表达式2。
14、跳转语句:
a)break:
i.用于switch语句,终止某case并跳出switch结构。ii.用于循环语句,跳出循环语句,执行后面的程序。
b)continue——只用于循环语句中:终止本次循环,执行下一次循环。
15、方法重载:
a)2个条件:方法名相同、参数个数或参数类型不同。b)与返回值类型无关。
16、数组:
a)定义数组:
i.类型[ ] 数组名 = new 类型[ 数组长度 ] //这种定义方式只指定了长度,元素的初值由系统自动赋0。(动态初始化)
ii.类型[ ] 数组名 = new 类型[ ]{元素,元素,......} iii.类型[ ] 数组名 = {元素,元素,......} //这2种称为 静态初始化。
17、冒泡排序:
a)若有n个元素,则进行n-1轮排序(n-1次外循环)
b)第1轮排序,元素之间进行n-1次比较;第2轮排序进行n-2次排序......最后1轮只进行1次比较。c)外循环条件:i < arr.length d)内循环条件:j < arr.length1
18、二维数组:
a)定义方式1:类型[ ][ ] 变量名 = new 类型[ 几行 ][ 几列 ];b)可理解为数组的 数组——例arr[0][1]-->数组名arr[0],第二个元素[1];c)二维数组的 长度 由”[ 几行 ]“确定!
d)定义方式2:类型[ ][ ] 变量名 = new 类型[ 几行 ][ ];//行数确定,列数不确定——每行可以随便 赋值。
e)定义方式3:类型[ ][ ] 变量名 = { { ,...,...,...},{ },{ },......} //这种行数、列数都不确定。大括号 内的每个 大括号 代表 一行 的元素,每行有多少个元素 取决于 内大括号 中元素的个数。
19、面向对象的特点:封装性、继承性、多态性。
20、在创建变量后,JVM运行程序时,会自动初始化变量。引用型变量 为 null。
21、垃圾对象——没有变量引用的对象。
22、类的封装:将类中的属性 私有化。外界访问私有属性时 只能通过该属性的 getxxx()方法。
a)//择Generate getter and setter--> 自动生成
set和get方法。
23、构造方法:实例化对象。
a)可以用 带参数的构造方法 在实例化对象时就 给私有属性 赋值。b)好的程序员 应该为每个类 写一个 无参构造方法。c)定义构造方法的条件:
i.方法名与类名相同。ii.没有返回值的 声明。
iii.方法中 不能有return 返回值。
24、this关键字
a)this指代 该类实例化的 对象。所以可以用 this.xx的方式调用 成员。b)在成员方法中使用this关键字,避免参数名与属性名相同。c)用this关键字调用 构造方法
i.只能在构造方法中 用this调用其他构造方法; ii.此时this语句必须位于第1行,并且只能出现一次 iii.不能在一个类的两个构造方法中互相调用。
25、static关键字
a)静态变量:
i.用static修饰的变量 ii.静态变量被所有实例共享
iii.可以使用“类名.变量名”的形式来访问。iv.只能修饰 成员变量 b)静态方法
i.希望在不创建对象的情况下也能条用 类中的 某个方法,那就用static关键字休息这个方法 ii.静态方法 只能访问 静态成员!
//因为非静态成员 必须先创建对象才能访问,而静态方法在被调用的时候可以 不创建对象——那么就没有非静态成员可供访用。
c)静态代码块
i.当类被加载时,静态代码会执行一次。而类只会被加载一次,所以静态代码块只会被执行一次。
ii.通常会用静态代码块对类的成员变量进行初始化。d)单例模式
i.private static 类名 INSTANCE = new 类名();量——自己创建一个对象。private 类名(){};
//私有的 构造方法,只能内部访问
}
//私有成员变public static 类名 getInstance(){ return INSTANCE;//定义静态方法,返回自己的实例对象。ii.第二种单例模式创建方法。
1.Private 类名(){} 调用。
2.public static fianl 类名 INSTANCE = new 类名();的不能被修改的 静态成员对象。
26、内部类——定义在类里面的 类
a)成员内部类
i.相当于成员方法,可以访问外部类的所有成员;
ii.因为成员内部类相当于 成员方法,所以想要创建内部类对象时,必须得用外部类的对象 去创建内部类对象:
1.外部类名.内部类名 变量名 = new 外部类名().new 内部类名();b)静态内部类
i.用static修饰的成员内部类,也相当于静态方法。只能访问外部类的静态成员。
ii.因为静态,所以在创建内部类对象时,可以不用先创建外部类对象:
1.外部类名.内部类名 变量名 = new 外部类名.内部类名();iii.静态内部类中 可以定义静态成员,非静态内部类则不可。c)方法内部类
i.在方法中定义的类,只能在当前方法中被使用。
27、当一个对象被当成垃圾从内存中释放时,它的 finalize()方法会被自动调用。
//公有
//私有的 构造方法,只能在类的内部被
28、继承
a)继承关键字:extends。b)格式:Class A extends B{} c)单继承——一个类只能有一个直接父类。
29、重写父类方法
a)条件:方法名、参数、返回值类型 3个都相同。
b)重写之后,子类调用被重写的方法时,就是调用自己写的方法。c)重写应用:
i.应用对象 是父类的 公有方法。重载 应用的对象是 类本身的 方法。ii.重写父类 不适合子类的 方法 iii.实现接口。
30、super关键字
a)调用父类成员变量和成员方法:
i.super.成员变量;ii.super.成员方法(参数1,参数2,...);b)调用父类的构造方法
i.super(参数1,参数2,...);ii.必须位于子类的构造方法的第一行,且只能出现一次。
iii.在实例化子类时,系统会在 子类的构造方法中 调用
父类的构造方法——如果子类的构造方法中 没有调用 父类的构造方法,系统会自动调用父类的无参构造方法。所以 每个类的 无参构造方法 一定不要漏了!子类也可以显示的调用 父类的有参或无参构造法方法。c)解决 重写了父类方法之后,不能调用父类方法的问题。
31、final关键字
a)final修饰的类 不能被继承 b)final修饰的方法 不能被子类重写
c)final修饰的变量 是常量,不能被修改,且必须在定义时 为变量赋值。
32、抽象类
a)关键字 abstract b)抽象方法:abstract void shout(){};——没有方法体。
c)包含抽象方法的类必须声明为 abstract类:abstract class Animal{} d)抽象类可以 不包含任何抽象方法,只需用abstract修饰。e)抽象方法不能直接实例化,只能让 子类实例化。
33、接口
a)定义关键字:interface——interface Animal{} b)接口中的方法 被默认修饰为:public abstract——抽象方法。c)接口中的变量 被默认修饰为 :public static final —— 全局常量
i.所以变量最好用
全大写
表示。
d)因为方法都是抽象的,所以必须定义一个类 来实现(implements)接口——Class A implements B{} e)接口之间可以继承——interface C extends B{} f)一个类可以实现多个接口,接口直接间用逗号隔开。g)一个类可以在继承一个类的同时,实现其它的接口。
h)如果一个类去实现接口的话,那么这个类必须实现接口中所有的方法。
34、多态
a)方法上的多态
i.类内部方法的重载 ii.子类对父类方法的重写 b)对象上的多态性
i.假设父类:A;子类B B b = new B();ii.对象的自动向上转型:A a = b;//子类对象,变成了父类对象。
1.虽然a指向A的对象,但是如果B重写了A的方法,那a调用的还是B中的方法。
iii.对象的强制向下转型
1.若 A a = new A();2.B b =(B)a;
//父类对象变成了 子类对象。3.这时对象b调用的是 子类的重写的方法。
4.注意:对象发生强制向下转型之前,必须保证已经发生了向上转型,否则会出异常。
35、异常
a)异常类分为:编译时异常、运行时异常 b)异常处理机制: i.try...catch...finally 1.try代码包含可能发生异常的Java语句,catch块中包含针对一场进行处理的代码。
2.当发生异常时,系统将异常信息封装成一个异常对象传递给catch代码块。所以catch需要定义1个对应的异常类 变量。3.finally代码块包含,无论发生什么异常都要执行的代码。常用于关闭系统资源。
ii.throws关键字声明抛出异常,调用者对其处理。这种方法能通过编译,但是发生异常后就会终止运行。
c)自定义异常
i.首先定义 一个继承Exception异常的 异常类;异常类中 编写一个无参构造方法(调用父类无参构造方法),再编写一个 带String参数的构造方法(也调用父类的带Stirng参数的构造方法)。ii.再定义一个 测试类,定义要调用的方法,并在此方法后面用 throws关键字 声明抛出自定义异常;再在 方法体 内判断什么时候 用throw new 自定义异常(“要打印的信息”)。//声明自定义异常对象。
iii.最后在 测试类的main 方法中,iv.try{...}
catch(...){ System.out.printlan(e.getMessage)}
finally{...}
36、线程的创建: a)继承Thread类,并重写run()方法。然后new Thread().start;开启线程。
b)实现Runnable接口,重写run()方法。然后new Thread(new myRunnable).start开启线程。
37、两种实现多线程的比较——实现Runnable接口的方法更好
a)可以让多个线程共享资源。——售票系统需要。b)避免单继承。38、36、
第三篇:java学习笔记总结
java 学习笔记总结
1.Java是什么呢?
Java不仅是一门语言,而且是一个完整的平台,有一个庞大的库,其中包含了很多可重用的代码和一个提供安全性、跨操作系统的可移植性以及自动垃圾收集等服务的执行环境。
2.JDK 和 JRE 是什么?
JDK:全称是 Java Development Kit,这是我们编写java程序的开发人员需要的。我们首先要下载和安装JDK,然后设置环境变量,具体操作可以加我扣:七零五叁零六久久久
JRE:全称是 Java Runtime Environment,它包含虚拟机但不包含编译器,这是运行java程序的用户需要的环境
3.来个Hello World看看吧?
照例先创建一个类HelloWorld.java,源代码如下: /** * @author 老孙
*/ public class HelloWorld {
public static void main(String[] args){
System.out.println(“Hello World”);
} } Java类名一般是以大写字母开头的名词,多个单词的话每个单词首字母都应该大写。Java源代码以.java作为扩展名,而且文件名必须和文件里的公共类同名。
4.怎么用命令行运行java程序?
比如上面我们编写了一个类叫做HelloWorld.java,首先打开一个终端;
然后进入到HelloWorld.java类所在的目录; 输入命令 javac HelloWorld.java。javac是一个java编译器,注意该命令需要的是文件名,也就是要带着.java后缀。 输入命令 java HelloWorld。java启动Java虚拟机,该命令只需要类名,不需要带着.java或者.class等后缀。
5.Java代码怎么加注释?
// 单行注释 和 /*{……}*/ 长篇注释,这两种方式很多语言都一样,没什么特别强调的。
另外还有一种注释可以方便的生成java doc文档,以/** 开头,以*/结束。
6.Java的几种基本数据类型是?
4种整型:byte(1字节),short(2字节),int(4字节),long(4字节)。(PS:Java没有无符号整型) 2种浮点型:float(4字节),double(8字节) 字符类型:char 布尔类型:boolean
在Java种每个类型占用几个字节是固定的,与运行java的机器无关,这点与C#不同,这也是Java具有可移植性的关键点。
浮点类型一般double比float常用,而且浮点型存在四舍五入的情况,如果用在对精确度要求高的商业场景,就得使用java.math.BigDecimal类型了。我们写个demo看看:
/** * @author 老孙
*/ public class DemoDouble { public static void main(String[] args){
double d1=0.05;
double d2=0.01;
double result=d1+d2;
System.out.println(result);//结果:0.***005
BigDecimal bd1=new BigDecimal(“0.05”);
BigDecimal bd2=new BigDecimal(Double.valueOf(“0.01”));
double result2=bd1.add(bd2).doubleValue();
System.out.println(result2);//结果:0.06
} }
7.Java怎么定义常量?
使用关键字final定义常量,之前C#用的是const关键字,这一点不同要注意一下。命名规则上,常量一般使用大写字母,中间用下划线分隔。例如: private static final Integer MAX_SIZE=100;
8.String字符串怎么截取子串?
Substring(beginIndex,endIndex):返回子字符串,从beginIndex到endIndex-1。String s=“你好,今天是2018年1月5日,圣诞快乐!” String date = s.substring(6,17);System.out.println(date);// 输出:2018年1月5日
注意:该方法的返回结果不包含最后一个位置的字符。如果有问题就问我:七零五叁零六久久久 9.Java字符串怎么拼接?
①最简单的拼接方式就是使用+符号。
②String.join(char,str1,str2….strN):静态方法拼接字符串,用字符char分隔,将字符串进行拼接。//拼接
String s2=String.join(“、”,“JAVA核心技术”,“JAVA编程思想”,“SpringBoot”);System.out.println(s2);//输出:JAVA核心技术、JAVA编程思想、SpringBoot
③当有大量字符串拼接操作的时候使用StringBuilder,这跟C#基本相同。
10.怎么判断两个Java字符串是否相等?
equals方法判断两个字符串内容是否相等。而==判断两个字符串是否指向内存中同一位置。//比较
String s3=“abc”;String s4=“abc”;String s5=new String(“abc”);String s6=new String(“abc”);System.out.println(s3==s4);//true System.out.println(s3.equals(s4));//true System.out.println(s5==s6);//false System.out.println(s5.equals(s6));//true 这个demo中s3==s4返回true,因为在Java中字符串是不可修改的,编译器有一些优化机制让字符串共享,所以s3和s4实际上指向了内存中同一位置 11.Java数组有哪些常用操作?
①foreach循环数组
//foreach循环数组 int[] arr={1,3,5,7,9};for(int item:arr){ System.out.println(item);} ②打印数组元素
Arrays.toString(a):返回字符串,数组元素包含在方括号中,以逗号分隔。Arrays.deepToString(arr):用来打印多维数组。//打印数组
System.out.println(Arrays.toString(arr));//输出 [1, 3, 5, 7, 9] int[][] arrM={{1,2,3},{11,12,13},{21,22,23}};System.out.println(Arrays.deepToString(arrM));//[[1, 2, 3], [11, 12, 13], [21, 22, 23]] ③拷贝数组元素
静态方法Arrays.copyOf(originalArray,length):第一个参数是要拷贝的源数组,第二个元素是新数组的长度,如果第二个大于原数组长度,则自动填充默认值。//拷贝数组元素
int[] arr2=Arrays.copyOf(arr,arr.length);System.out.println(Arrays.toString(arr2));//输出 [1, 3, 5, 7, 9] int[] arr3=Arrays.copyOf(arr,arr.length/2);System.out.println(Arrays.toString(arr3));//输出 [1, 3] int[] arr4=Arrays.copyOf(arr,arr.length*2);System.out.println(Arrays.toString(arr4));//输出 [1, 3, 5, 7, 9, 0, 0, 0, 0, 0] ④排序
静态方法Arrays.sort()方法采用优化后的快速排序算法对数组元素进行排序。//排序
int[] arr6={12,4,53,78,21,943,3};Arrays.sort(arr6);System.out.println(Arrays.toString(arr6));//输出 [3, 4, 12, 21, 53, 78, 943]
⑤查找
静态方法Arrays.binarySearch(arr, valueToFind):二分查找,第一个参数是要查找的数组,第二个参数是要查找的目标元素。该方法有个前提是数组必须是有序的。//查找
int index=Arrays.binarySearch(arr6,12);//输出 2 System.out.println(index);
⑥填充数组元素
静态方法Arrays.fill(arr,item):将数组arr每个元素都填充为item.//填充数组元素
String[] arr7=new String[5];Arrays.fill(arr7,“*”);System.out.println(Arrays.toString(arr7));//[*, *, *, *, *]
⑦比较数组
注意要使用Arrays.equals(arr1,arr2)比较数组,如果两个数组元素全部相同,则返回true。//比较数组元素
String[] arr8={“*”,“*”,“*”,“*”,“*”,};System.out.println(arr7.equals(arr8));//false System.out.println(Arrays.equals(arr7,arr8));//true
12.日期对象LocalDate ①获取当前日期时间 //当前日期
LocalDate today=LocalDate.now();
System.out.println(today);//2017-12-26
//当前时间
LocalTime currentTime=LocalTime.now();
System.out.println(currentTime);//12:23:09.054
//当前日期时间
LocalDateTime dateTime=LocalDateTime.now();
System.out.println(dateTime);//2017-12-26T12:23:09.054
②构造某个指定日期
//构造指定日期
LocalDate newYear=LocalDate.of(2018,1,1);System.out.println(newYear);//2018-01-01
③解析日期字符串,如果不合法会抛出异常。
//解析日期字符串
LocalDate date1=LocalDate.parse(“2018-12-31”);System.out.println(date1);//2018-12-31//LocalDate.parse(“2018-11-31”);//抛出异常
④获取若干天后的某个日期 //15天后
LocalDate date15=today.plusDays(15);System.out.println(date15);//2018-01-10
⑤获取年份、月份、日期
//获取年、月、日
System.out.println(date15.getYear());//2018 System.out.println(date15.getMonth());//JANUARY System.out.println(date15.getMonthValue());//1 System.out.println(date15.getDayOfMonth());//10 System.out.println(date15.getDayOfWeek());//WEDNESDAY System.out.println(date15.getDayOfYear());//10 注意:使用Date对象的getYear()方法,不能获取当前的年份
System.out.println(new Date().getYear());//117,不是我们想要的结果2018 我们看一下该方法的源码,计算的是当前年份和1900年的差值
public int getYear(){ return normalize().getYear()-1900;}
大家在学习的过程中遇到任何的问题都可以咨询我(QQ:705306999,奔跑de蜗牛)
也可以加入到我们的免费学习交流群: 579016988(职坐标java编程交流群2)玩微信的朋友也可以加老孙的个人微信公众号:微信右上角点击加号--添加朋友--公众号--搜索:我是老孙(如下图),也会不定期发送技术文章,娱乐八卦,吃喝玩乐,房产头条,心灵鸡汤等信息!
加图片说明文字
注意:添加时请注明微博
移除点击此处添如果大家想看老孙的直播学习,可以加入咱们的免费公开课进行学习!腾讯课程地址:https://ke.qq.com/course/92963#tuin=2a0a2177
有的人会这样说:“我只是在业余时间打盹而已,业余时间干吗把自己弄得那么紧张?”
爱因斯坦就曾提出:“人的差异在于业余时间。”
一位在哈佛任教的朋友说,只要知道一个青年怎样度过他的业余时间,就能预言出这个青年的前程怎样。记得点赞和转发哦!
片说明文字
移除点击此处添加图
第四篇:java学习方法笔记总结.
本人亲自总结了多年学习JAVA的笔记总结,多年心血都在此了,速来下载!下面简单列举一下大家学习java的一个系统知识点的一些介绍(按照TTS6上面的顺序来的):
一:java基础部分:java基础的时候,有些知识点是非常重要的,比如循环系列。For,while,do-while.这方面只要大家用心点基本没什么难点。
二:面向对象:oop面向对象的时候,偏重理论,相信这方面的文章也很多,大家可以多看看,在这就不说了。重点掌握面向对象的三大特征和基本原理。
三:java核心一:这方面主要偏重API,所以在学习了这章的时候,一定要对照API去学习,多看API,主要就是方法多,string和集合的方法最为重要。后面将为大家提供本人整理的部分笔记。
四:java核心二:主要讲解了异常,线程和IO流,其实个人认为重点掌握线程就行,对于流和异常多写就行,线程偏重理论也最为重要。
五:oracle数据库方面:建议学习数据库的时候大家一定要端正态度,数据库极为重要,本人当时在学习这个的时候,一直以为数据库只是为了增删改查,故没有认真学习,后期面试的时候吃了不少亏,因为现在软件公司对数据库的要求跟java一样重要,基本都会单独一张笔试题笔试数据库。
六:JDBC/XML系列:JDBC主要是3个核心接口(Connection)(Statement)(ResultSet)的使用,大家在学习的时候,熟练运用3接口,jdbc的原理也相当重要,虽然后期学习了HIbernate之后,JDBC不需要再用,但其底层原理还是JDBC,而且现在很多软件公司不一定会用到Hibernate框架,所以建议大家还是把“本”学好,XML:重点掌握解析互换的2个核心接口方法。
七:HTML/CSS/JS:对于这个,本人相当纠结,因为这个有点偏向于美工的意思,所以后期想从事后台开发的同学一般不会太重视,但是现在都是web项目,而且很多软件公司并不是把许多这方面的事情交给美工(除非是那种有很高要求的静态页面),而且现在html代码都是在jsp里面写,所以建议还是好好学学,因为公司不会让一个美工去专门为你写一些简单的html代码,包括js!这章其实不难,就是属性方法知识点比较多,大家多记记,多写写,重在多练!
八:Servlet/Jsp:如果想从事web和b/s开发(现在基本都是web和b/s开发),这章极为重要,服务器的访问以及配置。tomcat的使用都在这一章,虽然后期struts框架的学习简化了servlet代码的繁琐性,但是你可知道现在有些公司只用servlet不用struts!即使用了框架技术也不一定是struts!servlet跟JDBC一样都是“本”,而struts和Hibernate一样都是封装了它们而后简化代码而已。所以只有把“本”学会了,就不怕框架的变化!jsp就不多说了,如果你学习java这个就不会缺少!后期b/s项目页面的布局以及功能就全靠它了。
九:Ajax/Jquery:当初学习这个的时候,本人没有用心去学,然后结果就是本人在进公司之后花了一个星期的时间练习jQuery!这个对于强化web服务器页面的功能技术实在是强大.这个封装了js对象的技术,可以对jsp页面元素进行样式的更改以及操作,想要玩好web项目,这个技术必须玩好!
十:SSH:传说中的三大框架;
Struts:前面已经提到,这个框架技术主要是为了弥补servlet和jsp页面之间交互的复杂性,可以有效的提高客户端与服务器之间的交互。而且采用了MVC思想进行改善减弱代码之间的复杂性。Hibernate:主要封装了jdbc的核心功能,可以采用映射方式访问并操作数据库,一定程度上讲是简化了程序代码,但前面已经提到,由于是框架,而框架是随着时代而改变的,并且很多公司不一定用到这个框架,所以,只有掌握好JDBC的根本原理,才会更加理解这个框架。
Spring框架:其实后期学框架知识大家都会觉得很无趣和乏味,因为框架的知识都是理论很深的知识点,spring主要是要完善代码之间的耦合度,包括类似工厂模式的对象自动控制,AOP的事物日志管理等,都其实是为了减少程序员的工作量,但不得不说是有很大的作用的,而且这个框架可以整合JDBC以及Hibernate,struts技术,可以把所有的框架技术都整合在一起。相当于一块主板把内存,风扇,cpu,显卡都集中在一起。
前面所有的都是个人学习之中的一点感受,希望大家也能有所感触,主要想说明的是前面的基础一定要打好,对于学习方法的问题也可以和大家聊一聊,本人在学习之初,由于面向对象和集合一些理论较深的知识点出现,导致后期比较注重理论,最终在写实际项目的时候吃了苦头,因为代码量没有跟上,即使理论都懂,但很多功能还是无法自己写出,所以要强调的是在注重理论的情况下一定要多写代码,我的建议是在理论比较深刻的知识点面前,比如面向对象,集合,线程这些知识,多看点理论,而对于html,css以及API方法比较多的知识点的情况下,多写代码。总之,各50%最好!当然,这就需要大家付出更多的时间和精力辛苦勤劳下了!其实java的学习还是要多练代码,多思考,举一反三,任何的知识点只要你认真的去做,没有拿不下的顽石,勤能补拙,相信自己,然后用功,你就胜利了。
下面说一下面试技巧。
其实4个月是相当的快,一瞬间而已,所以希望大家在还没有学完的时候,就要有面试的准备,关于面试,一般企业也就那几个步骤,笔试-面试,面试又包括技术面试和人事面试,人事面试基本不会有什么问题,关键就是技术面试,当然,如果大家有认真的学学习,笔试一般不会有什么问题,技术面试的话,一般都是项目经理之类的,会问到几个技术问题,范围也很广,不知道他会问到什么,所以必须大家对于知识点的话都要有基本的掌握,当然会有几个比较重点的知识 点,像集合,servlet,线程,其实重点也很多,这个大家后期可以参考面试的文档,到时候老师会发给大家一些相关的文档,当然自己也可以去下载一些相关的文档,要强调一点的是数据库必问!这个相当重要!前面也已经说了,所以希望一定要把数据库学好!
下面为大家提供部分本人整理的笔记: String的核心方法:
字符串转换整数:Integer.parseInt(字符串变量);整数转换字符串:String.valueOf(整型变量)
日期转字符串:new SimpleDateFormat().format(date类型)返回字符串元素的字符长度:length()方法
Int IndexOf(String a),在字符串元素中检索a字符,返回第一个出现的下标位置。Int indexOf(String a,int fromIndex),从formIndex位置开始检索字符串,找到之后的a字符。
Char charAt(int index):用于返回字符串index位置的字符.Substring(begin,end):返回子字符串
valueOf(Object):返回Object参数的字符串表示形式。toUpperCase():返回字符串的大写形式。toLowerCase():返回小写形式。
StringBuilder核心方法:
StringBuilder:性能好,非线程安全.Append(String s):追加字符串。
Insert(3,”String”)插入字符串
Delete(int start,int end):删除字符串。
Replace(int start,int end, String s):替换字符串 Reverse():字符串反转.集合核心方法:
Boolean isEmpty():判断集合是否为空 Size():判断集合里面元素的个数
Boolean Contains(Object):判断集合元素中是否包含Object元素.Clear():清空集合。
Boolean Add(Object):向集合中添加元素,返回是否添加成功.Boolean remove(Object):从集合中删除元素。Iterator iterator():迭代元素。
增强for循环:for(Point p:list):遍历list,每次循环从list中取出一个元素赋值给p.List单独的方法:
get(index):得到index下标的集合元素.Set(index,元素o):设置index处的元素为元素o,前面的元素将被覆盖,并且方法返回的值是前面的元素。
Add(index,元素):在指定下标index添加元素 Remove(index):删除指定下标的元素值
List:定义线性表数据结构.ArrayList:动态数组方式,适合随机访问对象.LinkedList:链表方式,适合于插入和删除.subList():用于获取子List,获取的List与原List占有相同的存贮空间,操作会影响原List.List
以上方法都是本人从API里面选取的面试笔试必考的方法,这些方法大家完全可以去背熟,当然理解的去记更好了。这个还是需要大家自己亲身去总结的!别人给不了你知识!知识还是自己去学去掌握!别人只能给你方法!别人可以写出来给你,但是要完全理解并掌握还是要自己!授人与鱼不如授人与渔!好了,本人要说的就是这些了。更多的精彩需要大家自己去发现!曾在网上看过几个不错的学习视频,感兴趣的可以进群了解下,群号是五一四,一六七,后面是六七八,连在一起就好了,真心可以学到东西!
第五篇:java开发技术总结
数据库
oracle-->数据库管理系统-->SQL、PL/SQL-->Java(JDBC+SQL)DBA,数据库编程程序员 1.概念导论
1)什么是数据库
有组织和结构存储数据。可以存储 字符、字节、图形、图像等类型数据
DB(数据库):数据集合
DBMS(数据库管理系统):对数据集合进行管理和操作的软件
--Oracle
--DB2
--MySQL
--SQLSERVER
JDBC 1.什么是JDBC 全称Java DataBase Connection,Java数据库访问。
JDBC是Java访问数据库的一项技术
JDBC是SUN推出的Java访问数据库的一套标准。由一系列接口构成。
各个数据库厂商负责提供JDBC接口API的实现包。
开发者只需要掌握JDBC接口的使用,就可以实现对各种数据库的操作,不需要了解开发商的实现类。
XML
1、什么是xml(xtendsible markup language可扩 展的标记语言)? 1)定义
基于文本的通用的数据保存格式。
(1)通用的点的坐标
Point类
point对象(x=10,y=20)
a,序列化
b,数据库表
c,文件
...(2)数据格式
HTML 知识准备
1、分层:表现层:UI界面(DOS界面、桌面类型、web类型)
业务层:
数据层:文件、Oracle数据库
2、Web类型的应用程序----B/S 类型
打开 Browser,输入 URL,浏览器将请求发送到服务器
服务器得到请求,分析,返回响应
浏览器得到响应,解析(翻译),显示为页面
3、web 学习阶段
客户端技术:HTML+CSS+Javascript---Web 基础
服务器端技术:JSP、PHP、ASP.NET
4、web基础的课程
HTML:页面的创建
CSS:页面的外观
JavaScript:页面的动态效果和交互行为--3 一:HTML 概述
1、超文本标记语言:一种编写页面的纯文本的标记语言,文件以.html或者.htm 为后缀,依靠浏览器运行显示----解释性的语言
2、标记:一些用 <> 括起来的内容,特殊的显示
3、主流浏览器:IE/Firefox/Chrome/
4、浏览器兼容性:符合标准规范,具体问题
CSS 一:CSS 概述
1、CSS:级联样式表(层叠样式表)
2、特征:为页面定义外观的语言,实现内容和表现的分离,多个样式可以合为一个,如果冲突,以优先级为准
二:基础语法
1、语法:
属性名称:值;属性名称:值;比如--color:red;
2、如何应用
方式一(内联方式):<元素 style=“" />---将样式直接定义在元素的 style 属性里
方式二(内部样式表):在页面的 head 里的 style 里定义样式
方式三(外部样式表):定义一个单独的.css的文件(定义样式);然后,在页面的 head 里用 link 引入---推荐方式
3、外部样式表的优点:实现内容和表现的分离,提高代码的可重用性和可维护性
---可以准备多套样式---换皮肤/主题
4、样式表,如果重复定义
a、样式不同,取并集
b、相同,按照优先级
内联 > 内部或者外部
c、相同优先级下,以最后定义的为准
javascript 一:javascript 概述
1、什么是 javascript:一种基于对象和事件驱动的解释性脚本语言,嵌入到网页上
2、历史:js代码---W3C定义了标准规范的 js 代码
3、浏览器兼容问题:标准代码,个别情况个别对待
4、怎么写
方式一:直接写在事件里,仅限于代码很少
方式二:写在 head 的 script 里,仅限于当前页面重用
方式三:写在 js 文件里,html 页面的head 里用 script 引入
5、js的特征53………………………………………………..一种解释性的脚本语言,适用于为网页添加动态效果和交互行为
6、错误:
二:基础语法
1、写法:以 ;结束,大小写敏感
名
2、标识符:以字母、数字和下划线还有 $组成,不以数字开头---不能和系统关键字重
3、变量 ***----声明变量,以 var 开始
var i = 1;var s = ”mary“;var b = true;js是一种弱类型的语言---变量声明时不需要确定类型,数据类型以赋值为准
4、数据类型
简单类型:string、number、bool 特殊类型:null、undefined
var i;
alert(i);---undefined 复杂类型:对象
5、(string)字符串类型
var s = ”mary“;var s = 'mary';
特殊字符:使用转义---转换为普通字符,解决汉字的问题
”hello'w“ornld” alert(“一”);alert(“u4e00”);[u4e00-u9fa5]
6、number:并不区分整数和小数
var n = 12;var n1 = 12.34;
7、bool:true(1)和 false(0)
8、数据类型之间的转换
var n = 18;var name = “mary”;隐式转换(直接)
string + number--
number + bool--
bool + bool--
string + bool--
显式转换(调用方法)*** xxx.toString()parseInt(xxx);parseFloat(xxx);--确实能转,如果不能转,将返回 NaN
NaN---not a number 判断
isNaN(“aaa”)--is not a number--返回 bool
9、运算符
算术运算符、比较、逻辑、位。。
特殊一:***
=== 严格相等:值和类型
if(a == b)
if(a === b)servlet 1、web开发的背景知识(了解)b/s架构:
特点:
客户端使用浏览器,服务器端使用web服务器,客户端与服务器端使用标准化的http协议来进行通信。
优点:
与c/s架构相比,有两个优点:
a,客户端不需要单独安装
b,开发相对简单(因为c/s架构需要自定义协议,开发相应的 通信模块,而b/s使用标准化的http协议,浏览器与 web服务器都提供了相应的通信模块)。
2、什么是servlet? sun公司制订的一种用来扩展web服务器功能的组件规范。
(1)扩展web服务器功能
早期的web服务器(iis,apache ws等等),只能够处理静态
资源的请求(即需要事先将html文件写好并保存到web服务器
相应的文件夹下面),不能够处理动态资源的请求(即需要进行
计算,然后生成相应的html)。
a,可以使用cgi程序来扩展。
cgi程序可以使用c/c++,perl等语言来开发,但是,程序比较复杂,而且可移值性不好,性能也比较差,现在用得不多。
b,servlet可以扩展这些web服务器的功能。
浏览器发送请求给web服务器(apache ws),web服务器
检查请求是否需要计算,如果需要,web服务器会访问
servlet容器,servlet容器会调用servlet来进行计算。
(2)组件规范
1)什么是组件?
符合一定规范,实现部分功能,并且需要部署到
相应的容器里面才能运行的软件模块。
2)什么是容器?
符合一定规范,为组件提供运行环境及相应服务的 程序。
3、如何开发一个servlet? step1,先写一个java类,实现Servlet接口或者继承
HttpServlet类(一般会使用继承的方式)。
step2,编译
step3,打包(创建一个具有如下结构的文件夹)
appname(应用名称)
WEB-INF
classes(放.class文件)
lib(可选,放.jar文件)
web.xml(部署描述文件)step4,部署
将step3创建好的文件夹拷贝到servlet容器指定的 某个文件夹下面(比如,如果容器是tomcat,可以拷贝到
webapps文件夹下面)。
注意:也可以使用jar命令将step3创建好的文件夹
压缩成一个以“.war”为后缀的文件,然后拷贝。
step5,启动servlet容器,访问servlet
http://ip:port/appname/servlet-url
6、servlet是如何运行的? 比如,在浏览器地址栏输入
http://ip:port/web01/hello
step1,浏览器依据ip,port建立与servlet容器(容器同时 也是一个简单的web服务器)之间的连接。
step2,浏览器将请求数据打包(按照http协议,该数据包 也称为请求数据包)。
step3,浏览器发送请求数据包给容器。
step4,容器收到请求数据包之后,解析该数据包,并将
解析之后得到的数据封装到request(请求数据包)对象上,同时,容器 还要创建response对象。
step5,容器要依据请求资源路径(“/web01/hello”)找到 servlet的配置,然后创建servlet对象。
step6,容器调用servlet对象的service方法。容器会将事先 创建好的request,response作为参数传递给service方法。step7,在service方法里面,可以通过request对象获得
请求参数,并进行相应的处理,处理结果会放到response对象 里面。
step8,容器从response对象中取出处理结果,然后打包(按照http协议,该数据包称之为响应数据包)。然后将 响应数据包发送给浏览器。
step9,浏览器收到响应数据包之后,解析处理结果,然后生成 相应的页面。
http://localhost:8080/web01/hello?uname=jetty ?后是请求参数,其中uname是参数名,jetty是参数值。
JSP
1、什么是jsp(java server page java服务器端页面技术)? 1)定义
sun公司制订的一种服务器端动态页面生成技术规范。
2)理解
a,因为直接使用servlet,虽然也可以生成动态页面,但是比较繁琐(需要使用out.println语句),并且维护困难
(如果页面发生改变,必须修改java代码),所以,sun 在servlet规范制订之后,又添加了jsp规范。
b,jsp其实就是一个以“.jsp”为后缀的文本文件,该文件会被容器(比如tomcat)转换成一个servlet。
2、如何写一个jsp文件? step1,写一个以“.jsp”为后缀的文件。step2,在该文件里面,可以添加如下的内容:
1)html(css,javascript)
直接写即可(不用out.println)
2)java代码
a, java代码片断
<% java代码;
%>
b, jsp表达式
<%= java表达式 %>
3)指令
a,什么是指令?
告诉容器,在容器将.jsp文件转换成.java文件时
做一些额外的处理,比如导包。
b,基本语法
<%@指令名称 属性名称=属性值 %>
c,page指令
import属性:导包,比如
<%@page import=“java.util.*”%>
<%@page import=“java.util.*,java.text.*”%>
contentType属性:设置
response.setContentType的内容,比如
<%@page contentType=“text/html;charset=utf-8”%>
pageEncoding属性:告诉容器jsp文件的编码。
因为容器需要读jsp文件的内容(也就是
说,需要解码,某些容器,如果没有该
属性,默认情况下会按照iso-8859-1
去解码,会产生乱码问题)。
4)隐含对象
a,什么是隐含对象?
在jsp文件里面可以直接使用的对象,比如
out,request,response。
b,为什么可以直接使用这些隐含对象?
因为容器会自动添加创建这些对象的语句。
3、jsp是如何运行的? step1,容器要将.jsp文件转换成.java文件(其实就是
一个servlet类)。
a, html(css,javascript)--->
在service方法里,使用out.write输出。
(out.write方法会将null转换成“"输出)
b,<%
%>
----->
在service方法里,照搬。
c, <%=
%>
----->
在service方法里,使用out.print输出。
step2,容器调用servlet来处理请求。
4、转发
(1)什么是转发?
一个web组件(servlet/jsp)将未完成的处理通过
容器交给另外一个web组件继续完成。
最常见的情况:
一个servlet获得数据,然后转发给一个jsp来展现
这些数据。
(2)如何转发?
step1,绑订数据到request对象上。
request.setAttribute(String name,Object value);
说明:
name:绑订名称
value:绑订值 step2,获得转发器
RequestDispatcher rd =
request.getRequestDispatcher(String uri);
说明:
url : 转发的目的地 step3,转发
rd.forward(request,response);request对象的其它和绑订相关的方法: 依据绑订名称找到绑订值,如果找不到对应的值,返回null。
Object request.getAttribute(String name);
解除绑订
request.removeAttribute(String name)(3)转发的特点
a,转发之后,浏览器地址栏的地址不变。
b,转发的目的地必须是同一个应用内部某个
web组件的地址。
Ajax
1、ajax是什么?(asynchronous javascript and xml 异步的javascript 和xml)
ajax是一种用来改善用户体验的技术,其实质是
利用浏览器提供的一个特殊的对象(XMLHttpRequest 对象,一般称之为ajax对象)异步地(当ajax对象向
服务器发请求时,浏览器不会销毁当前页面,用户
仍然可以对当前页面做其它的操作)向服务器发送请求。服务器返回的数据不再是一个完整的新的页面,而是部分数据,利用这些数据,更新当前页面。整个
过程,页面无刷新,不打断用户的操作。
2、如何获得ajax对象?
XMLHttpRequest没有标准化,要区分浏览器。
function getXhr(){
var xhr = null;
if(window.XMLHttpRequest){
} //非ie浏览器
xhr = new XMLHttpRequest();}else{ //ie浏览器
xhr = new ActiveXObject('MicroSoft.XMLHttp');} return xhr;
4、编程步骤
step1,获得ajax对象。
比如:
var xhr = getXhr();
step2,使用ajax对象发请求。
1)发送get请求
xhr.open('get', 'check_username.do?username=tom',true);xhr.onreadystatechange=f1;xhr.send(null);注意:
true:发送异步请求(ajax对象发请求时,浏览器不会销毁当前页面,用户仍然可以
做其它操作)。
false:发送同步请求(ajax对象发请求时,浏览器不会销毁当前页面,浏览器会锁定
当前页面,用户不能操作当前页面)。step3,编写服务器端的处理代码,一般不再需要返回
一个完整的页面,只需要返回部分数据。step4,编写事件处理函数
function f1(){
if(xhr.readyState == 4){
var txt = xhr.responseText;
更新当前页面
}
} jQuery
1、jQuery介绍 www.xiexiebang.com
(1)特点
利用选择器查找要操作的节点,并且会将这些节点
封装成一个jQuery对象。通过调用jQuery对象的属性
或者方法来实现对底层节点的操作,这样做的好处有
两个:一是兼容性更好了,另外,代码得到简化。
(2)编程步骤
step1,使用jQuery选择器查找要操作的节点。
step2,调用jQuery对象的方法或者属性。
(3)一个简单例子 first.html(4)jQuery对象与dom对象如何相互转换?
1)dom对象---> jQuery对象
$(dom对象)
2)jQuery对象---> dom对象
2、选择器
(1)选择器是什么?
jQuery借鉴了css选择器的语法,用来查找要操作的节点。
(2)基本选择器
selector / s1.html
#id
.class
element
select1,select2..selectn
*(3)层次选择器
selector / s2.html
select1 select2:查找所有的后代
select1>select2:只查找子节点
select1+select2:下一个兄弟
select1~select2:下面所有兄弟
(4)过滤选择器
1)基本过滤选择器
selector / s3.html
:first
:last
:not(select)排除满足select要求的节点 :even :odd :eq(index):gt(index):lt(index)2)内容过滤选择器
selector / s4.html :contains(text)匹配包含给定文本的元素
:empty 匹配所有不包含子元素或者文本的空元素
:has(select)匹配含有选择器所匹配的元素的元素
:parent 匹配含有子元素或者文本的元素 3)可见性过滤选择器 selector / s5.html :hidden 匹配所有不可见元素,或者type为hidden的元素
:visible 匹配所有的可见元素 4)属性过滤选择器 selector / s6.html [attribute] [attribute=value] [attribute!=value] 5)子元素过滤选择器
selector / s7.html :nth-child(index/even/odd)
注意: 下标从1开始。
6)表单对象属性过滤选择器 selector / s8.html
:enabled
:disabled
:checked
:selected(5)表单选择器
:input :text
:pasword :radio :checkbox :submit :image :reset :button :file :hidden
3、dom 1)查询
dom / d1.html
找到节点之后,可以读取或者修改节点的html内容,文本,值,属性。
a, html()读取或者修改节点的html内容
b, text()读取或者修改节点的文本内容
c, val()
读取或者修改节点的值
d, attr()读取或者修改节点的属性
2)创建
dom / d2.html
$(html);3)插入节点
append():作为最后一个孩子添加进来。
prepend():作为第一个孩子添加进来。
after():作为下一个兄弟
before():作为上一个兄弟 4)删除节点
dom / d3.html remove()remove(selector)empty():清空节点
5)数据与行为分离 dom / d4.html d5.html 即不用修改html文件,通过引入外部的js文件来 为页面提供动态效果。
$(fn);fn是一个函数的名称
或者
$(function(){
//当整个页面加载完毕,会执行这儿的代码。
});6)复制节点 dom / d6.html clone()clone(true):使复制的节点也具有行为(将事件
处理代码一块复制)7)属性操作
读取:attr('id');设置: attr('id','d1')或者一次
设置多个 attr({”id“:”d1“,”class“:”s1“});删除:removeAttr('id')8)样式操作 dom / d7.html 获取和设置: attr(”class“,”“)attr(”style“,”“)追加:addClass('')移除:removeClass('')
或者removeClass('s1 s2')
或者removeClass()//会删除所有样式
切换样式:toggleClass,有该样式,就删除,没有,就添加。
是否有某个样式 hasClass('')读取css('')设置css('','')或者
css({'':'','':''})//设置多个样式 9)遍历节点 dom / d8.html children()/children(select):只考虑子元素,不考虑其它后代元素。
next()/next(select):下一个兄弟
prev()/prev(select):上一个兄弟
siblings()/siblings(select):其它兄弟
find(select):从当前节点向下查找所有的后代
(满足select要求的)parent():父节点
struts
1、什么是Struts? Struts是基于MVC的轻量级框架,主要处理请求分发的问题,重心在控制层和表现层。
--基于MVC:实现了MVC,满足MVC的设计思想。
--轻量:侵入性低,是我们业务代码对框架的依赖程度很小,既很少需要import Struts包。
--框架:基础的代码,引入之后可以减少我们的开发工作量,提高开发效率。
2、为什么用Struts? 1)对比Servlet
--Servlet优缺点
优点:直接、效率高
缺点:业务代码耦合度高,不便于维护
--Struts优缺点
优点:将业务代码解藕,便于维护
缺点:效率低
--Servlet中的MVC与Struts中的MVC,参考图理解
2)对比其他框架
--健壮性(4*):稳定程度
--易用性(4*):好学、好用
--扩展性(5*):就软件未来而言,将来有更复杂的需求时,是否有处理方式。
--侵入性(4*):与依赖性/耦合度成正比
3、Struts发展史
1)Struts1,结构简单、易用,由Apache推出。
与Servlet/JSP耦合紧密,导致发展受限。
2)WebWork,技术先进,核心是XWork。
3)Struts2,基于XWork,在此基础上发展形成。
面试题:Struts1和Struts2的区别和联系?
--Struts2与Struts1差别很大,不能理解为Struts1
的升级版本。
--Struts2以XWork为核心,可以理解为WebWork
的升级版本。
*
4、Struts2使用步骤,HelloWorld--使用版本Struts2.1.8 1)创建web项目
2)导包
3)配置前端控制器(filter)
--在web.xml中配置filter
--控制请求分发的控制器
4)创建struts.xml--放在src根路径
--名称必须是struts.xml 5)*创建Action--控制业务流程的控制器 6)*创建JSP 7)*配置struts.xml--体现请求和Action的关系
--体现Action和JSP的关系
*
5、扩展HelloWorld 目标:掌握Action与JSP页面数据交换的方式。
1)Action如何向页面发送数据?
--通过EL表达式
2)*Action如何从页面接收数据?
--注入:调用JavaBean的set方法,为其属性赋值的行为称之为注入。
*a、基础属性注入
--Action中定义基本类型的属性,给它set方法
--表单中,文本框的name=”属性名“
--表单提交时,Struts2会自动将表单的内容,传递给Action里的属性。
--Struts2会自动初始化属性
--注意:Action跳转的页面,EL表达式${属性名}
*b、域模型注入
--Action中定义JavaBean类型的属性,给他set方法
--表单中,文本框的name=”对象名.属性名“
--表单提交时,Struts2会自动将表单的内容,传递给Action里定义的对象
--Struts2会自动的初始化对象
--注意:Action跳转的页面,EL表达式${对象名.属性名}
c、模型驱动注入(了解即可)
--需要Action实现接口ModelDriven
*
6、使用Struts2实现NetCTOSS中的资费列表
--准备:分析需求、了解表结构、建表
1)创建web项目
2)导包
3)前端控制器(filter)4)创建struts.xml 5)创建Action
-->filter->struts.xml->Action
-->DAO-->DBUtil,Entity a、Entity b、DBUtil c、DAO d、Action 6)JSP 7)配置struts.xml Hibernate
1、什么是Hibernate 1)Hibernate是数据访问层的框架,对JDBC进行了
封装,是针对数据访问层的面向对象的解决方案。
2)Hibernate允许我们直接访问对象,然后将访问
自动转化为SQL去执行,从而达到间接访问数据库
的目的,简化代码开发,提升开发效率。
2、为什么使用Hibernate 1)使用JDBC开发出现的问题
--需要在代码中写大量的SQL
--需要给大量的?赋值
--需要将结果集转换为实体对象
--在SQL中可能会写数据库特定的函数,移植性差。
2)使用Hibernate可以解决上面的问题
--基本上不需要写SQL,因为Hibernate可以
自动生成SQL并执行
--可以自动给?赋值
--可以自动将结果集转换为实体对象
--Hibernate提供通用的API来访问不同的数据库,移植性好。
3)补充JDBC与Hibernate的优缺点
a、JDBC优点:
效率高
b、Hibernate缺点:
效率相对于JDBC要低
*
3、Hibernate的设计原理
1)Hibernate是采用了ORM的思想,对JDBC进行的 封装。
2)ORM:Object Relation Mapping,即对象关系
映射,指的是Java对象和关系数据库的映射。
--之前使用JDBC开发时,需要知道数据库表和实体
对象的关系,以及字段和对象属性的关系,比如
需要知道COST表和Cost对象的关系。那么这种 关系我们之前是手动维护的,比如: cost.setName(rs.getString(”name“));ps.setString(2,cost.getName());--ORM思想是希望将这种关系的维护提炼出来,用一个公共的组件描述,那么在我们访问数据库
时,需要使用这种关系时,可以复用基于ORM 思想提炼出来的关系
--正是由于存在这样通用关系的描述,Hibernate 才可以让我们直接访问Java对象,从而通过
关系转换成SQL自动执行。
--Hibernate中将这种关系定义在XML配置文件中。
4、Hibernate体系结构
1)hibernate.cfg.xml
是Hibernate的主配置文件,用于配置数据库连接
参数,以及Hibernate框架参数。
2)实体类
是Java类型,用于封装表中的数据
3)xxx.hbm.xml
是关系映射文件,用于配置表与实体类的关系,以及表中字段与类中属性的关系。
4)Hibernate底层API
主要是用于解析主配置文件,以及关系映射文件,然后根据关系自动生成SQL并执行。
5、Hibernate常用API 1)Configuration
用于解析主配置文件的2)SessionFactory
用于创建Session的3)Session
是数据库连接会话,相当于是数据库连接。
注意:此Session和HttpSession没有任何关系。
4)Transaction
用于控制事务
5)Query
用于做特殊查询
*
6、Hibernate使用步骤
1)导包
2)引入主配置文件hibernate.cfg.xml 3)创建实体类Emp 4)*创建关系映射文件Emp.hbm.xml
--该配置文件必须和实体类同名
--该配置文件必须和实体类位于同一个包下
--在主配置文件中引入该关系映射文件
5)使用Hibernate的API,来进行增、删、改、查
Spring 1.什么是Spring,有什么作用
Spring框架属于一个解决方案框架 可以对其他技术和框架进行整合 应用。
*好处是:将程序中的各个组件和 框架技术进行解耦,便于日后系统 维护,升级和扩展操作。
在SSH中,会将Action,DAO组件都 交给Spring框架管理,由Spring 框架创建这些对象,建立这些对象 关联。
*2.Spring都含有哪些功能
--可以创建和管理程序组件对象
(相当于工厂的作用)--提供了IoC机制实现组件对象关系的解耦
--提供了AoP机制实现共通组件低耦合的调用。
(例如事务处理)--提供了对其他技术,例如JDBC,Hibernate,Struts等框架整合API--提供了一个Spring MVC框架实现
*3.Spring基本使用
1)创建和管理程序组件对象
--引入Spring IOC开发包
--在src下添加Spring配置文件
--将Bean组件定义到Spring配置
文件中
--(编码)实例化Spring容器对象
利用getBean获取Bean对象实例
*a.控制Bean对象创建模式
在使用时,可以在
scope=”singleton“表示单例模式(默认值)scope=”prototype“表示原型模式,每次调用getBean都返回一个新的 Bean对象。
b.控制Bean对象创建时机
scope=”singleton“时,Bean对象 是在容器实例化时创建。
在
scope=”prototype“时,Bean对象 是在getBean方法时创建。
c.追加初始化和销毁方法
在
同理destroy-method=”mydestroy“ 在容器销毁时,也释放单例的Bean 对象,此时会自动调用mydesctory 方法。(该属性仅适用于singleton 模式的Bean对象)
2)Spring的核心IoC容器
a.IoC概念
Inversion of Control 控制反转 或反向控制(控制转移)
2004 Martin fowler提出的IoC思想.IoC思想:两个组件之间调用(例如A调用B)原有方式是A负责创建B对象;现在变成了 B对象由第三方框架或容器负责实例化,然后给A对象注入。即A对象获取B对象的 方式发生了反转。
IoC技术方案有两种:依赖注入和依赖查找 Spring采用依赖注入技术实现IoC控制。依赖技术主要以下两种方式:--set方式注入(推荐)在A中定义setB(B b),接收传进来的B对象--构造方式注入 在A中定义构造方法 public A(B b){}
DI:Dependency Injection依赖注入
b.IoC使用方法
--编写Action,定义到Spring配置中
--编写DAO,定义到Spring配置中
--在Action中定义DAO接口类型变量和
setter方法
--在Action的
配置
ref=”要注入的Bean对象id值">