Ttemp=arr[i];
arr[i]=arr[arr.length-1-i];
arr[arr.length-1-i]=temp;
}
}
另外一方法:
数组顺序反转,使用Collections.reverseOrder()
/*使用自定义泛型封装formbean*/
publicTrequest2Bean(HttpServletRequestrequest,ClassbeanClass)throwsException{
Tbean=beanClass.newInstance();
Enumerationparams=request.getParameterNames();
while(params.hasMoreElements()){
Stringname=(String)params.nextElement();
Stringvalue=request.getParameter(name);
BeanUtils.setProperty(bean,name,value);
}
returnbean;
}
3、枚举类
1、java中声明的枚举类,都是java.lang.Enum的实例
2、枚举类中的构造方法默认只能是private的,
为什么枚举类中的构造方法默认只能是private呢?
答:
因为使用枚举给变量赋值时,他必须是规定的范围的枚举值,既然是规定范围的,那么就不能让外界new出一个对象。
3、枚举类中声明的每一个枚举值都是枚举类的一个实例对象
publicclassEnumTest{
publicstaticvoidmain(String[]args){
WeekDayweekday=WeekDay.MON;
System.out.println(weekday);
}
//内部类与成员变量平级,他的修饰可以是publicprotected,friendlyprivate
publicenumWeekDay{
MON
(1){},//枚举列表要写最前面否则会报错
SUN(7){};
privateWeekDay(){};
privateintday;//定义一成员变量表示第几天
privateWeekDay(intday){
this.day=day;
}
publicStringtoString(){
if(this.day==1){
return"星期一";
}elseif(this.day==7){
return"星期天";
}
}
returnnull;
}
}
}
4、枚举中常用的方法:
1、name()获得枚举对象的名字
2、ordinal()获得枚举的下标
3、valueof(Stringname)将一字符串转变成枚举
4、values()返回枚举数组,用于遍历枚举数组
4、反射
1、反射就是将java的各个成分映射成java类。
使用反射需要使用到以下一个API:
Class、onstructor、Field、Method
2、使用发射的要领就是需要先得到类的字节码对象,得到了字节码对象就得到了类身上的所有的一切,有了字节码,利用反射就可以操作类,给类的成员变量赋值,调用类的方法等。
3、使用反射得到泛型的实际参数类型,比如:
List需要获得Date的实际类型
publicclassBaseEnhance2{
publicstaticvoidmain(String[]args)throwsException{
Classclazz=BaseEnhance2.class;
Methodmethod=clazz.getMethod("add",List.class,Vector.class);
Typetype=method.getGenericParameterTypes()[0];
ParameterizedTypeparameterizedType=(ParameterizedType)type;
System.out.println(parameterizedType.getActualTypeArguments()[0]);
}
publicvoidadd(Listlist){
}
}
4、如何得到字节码:
1、类名.class2、对象名.class3、Class.forName(“包名.类名”);
5、Class.forName()方法的作用:
他首先查看内存之中有没有某个类的字节码,若没有,则创建一份字节码,若有,则加载字节码到内存之中,并封装成Class对象
5、内省---javabean
1、什么是javabean?
答:
javabean就是遵循一定编写规则的特殊java类,规则有:
1、必须提供一个公共的午餐的构造方法
2、必须具有的属性都是private的
3、必须提供get和set方法供外界操作和访问该javabean的属性,方法名一定是set和get后要紧跟属性名,属性名的第一个字母要大些
2、使用BeanUtils工具包操作javabean
1、常用的方法:
1、BeanUtils.popluate(Objectbean,Mapproperties)
2、BeanUtils.setPoperty(Objectbean,Stringname,Objectvalue)
3、BeanUtils.copybean(Objectdest,Objectsrc)
2、使用BeanUtils时,有些复杂类型,BeanUtils不能自动将值设置到javabean中,必须手动注册一个转换器
ConvertUtils.register(Converterconverter,Classclazz)
converter:
表示注册的自定义的类型转换器
clazz:
就是要将别类型转换成clazz字节码代表的类的类型
//定义一个转换成Date类型的转换器
publicstaticvoidcopybean(Objectdest,Objectsrc){
try{
ConvertUtils.register(newConverter(){
publicObjectconvert(Classtype,Objectvalue){
Stringstr=(String)value;
if(str==null||str.trim().equals("")){
returnnull;
}
DateFormatdf=newSimpleDateFormat("yyyy-MM-dd");
try{
returndf.parse(str);
}catch(ParseExceptione){
thrownewRuntimeException(e);
}
}
},Date.class);
BeanUtils.copyProperties(dest,src);
}catch(Exceptione){
thrownewRuntimeException(e);
}
}
细节:
1、Math.random()生成0-1的小数,包含0,不包含1
2、在拆箱,装箱方法调用时,原则:
使用jdk5.0与jdk1.4的结果相同
3、通过查看API知道,使用反射,若是调用getConstructor()方法不能生成一个对象,因为不是public的,getConstructor()方法只能是针对public修饰的若是硬要生成一个对象,那么应该是使用getDeclaredConstructor()方法。
javaweb第二天
1、xml
1、什么是xml?
答:
xml是可扩展标记语言
2、xml有那写特点?
答:
xml类似于html,但是xml中没有预定义的标签,最初设计是用来传输数据的。
3、xml的应用在哪里?
答:
1、存储和传输复杂关系模型数据2、作为配置文件
2、xml文档声明
xmlversion="1.0"encoding=“utf-8”standalone=”yes”?
>
encoding:
表示文档编码
standalone:
说明文档是否独立(文档如果依赖别的文档就是不独立)
3、XML元素指XML文件中出现的标签
4、对于XML标签中出现的所有空格和换行,XML解析程序都会当作标签内容进行处理
5、CDATA区
在编写xml时,有些内容不想让解析程序执行,须当做原始内容处理,那么将该数据放大CDATA区中
[CDATA[数据]]>
例如:
[CDATA[
]]>
6、DTD约束
1、xml文档为什么要引入约束?
答:
因为xml是可扩展的标记语言,在xml中没有预定义标签,那么程序员就可以随意书写xml的标签,这样在开发中就没有统一使用标准,这样的就会造成xml文档中的标签混乱。
所以引入约束,指定xml中可以使用那些标签,不可以使用那些标签。
这样就统一了使用标准。
2、DTD与xml三种关联的方式
DOCTYPE书架[
ELEMENT书架(书+)>
ELEMENT书(书名,作者,售价)>
ELEMENT书名(#PCDATA)>
ELEMENT作者(#PCDATA)>
ELEMENT售价(#PCDATA)>
]>
1、使用内部DTD
2、使用外部DTD
若关联的dtd文件在本地则使用:
DOCTYPE根元素SYSTEM“dtd文件的URL”>
3、使用公共DTD
若关联的是一个公共的dtd文件则使用:
DOCTYPE根元素PUBLIC“dtd名称”“dtd文件的URL”>
3、元素(Element)的定义
4、元素(Element)内容的定义
5、属性(ATTLIST)定义
属性类型中常用有:
CDATA,表示属性值为字符型数据
属性的约束有四种:
#REQUIRED表示属性是必须的,#IMPLIED表示可以忽略的,#FIXED表示只能是规定的值,Defaultvalue表示默认值
7、Schema约束
1、schema的使用例子
schema_view_books.xsd
xmlversion="1.0"encoding="UTF-8"standalone="no"?
>
//www.w3.org/2001/XMLSchema"
xmlns:
tns="itcast"
elementFormDefault="qualified"
targetNamespace="itcast">
schema_view_books.xml
xmlversion="1.0"encoding="UTF-8"?
>
xmlns:
xsi="http:
//www.w3.org/2001/XMLSchema-instance"
xsi:
schemaLocation="itcastschema_view_books.xsd">
zzz
xxx
1
2、schema文件不用指定约束他的约束文档在哪
答:
schema也是一个xml文档,为什么使用schema文档不用指定他的约束文档在哪里?
因为他所使用的约束文档是一个著名的约束文档,不用指定。
3、在使用schmea约束文档时,schmea文件中的targetNamespace与要约束的xml文档中声明的命名空间要相同,因为targetNamspace是自己定义的元素来自哪个命名空间
8、DOM与SAX解析xml文档的原理与优缺点?
DOM解析xml的原理:
将xml一次性装在到内存之中,以树状形式存贮,占用的内存比较大
优点:
对xml的crud速度快
缺点:
不合适解析大的xml文档
SAX解析xml原理:
逐行解析xml
优点:
适合解析比较大的文件
缺点:
不适合对xml文件的crud
9、在工程中文件的位置,路径问题?
?
?
?
答:
myeclipse下默认是从工程名下加载
10、在DOM解析中,所有的元素、属性、文本都是节点,都是Node的子类
11、DTD的数据类型
PCDATA是元素的标签体的数据类型
CDATA是属性的数据的类型
javaweb第四天
1、web通信详解
web系统通信是这样的:
客户在浏览器地址栏中输入要访问的URL地址,这时操作系统会查找C:
\WINDOW\system32\drivers\etc下的hosts文件,查看在host文件中是否注册了域名,在host文件中是ip与域名是映射关系,如果在host文件中没有查找到要访问的域名,这时操作系统会将这个域名发送到DNS服务器中,进行域名解析,解析完之后得到目标服务器的ip地址,然后浏览器再与目标服务器建立连接,通过HTTP协议将要请求的数据发送给目标服务器,服务器接收到请求,然后做出相应的处理,将相应结果发送给客户浏览器显示
2、配置虚拟目录
在server.xml中的标签中配置标签
例如:
\itcast”>
3、配置虚拟主机
配置虚拟主机\itcast">将映射在本地
1、配置虚拟主机时,appBase的值是相对路径,也可以是绝对路径,相对路径是相对tomcat安装目录的,默认值webapps,所以可以这样配置:
配置完之后必须在window的host文件中,进行域名注册,127.0.0.1
4、配置虚拟主机案例
输入不要访问XX,而是访问本地的首页index.jsp
1、配置虚拟主机
2、在main文件夹中新建一个文件夹WEB-INF,再在里面新建一个web.xml,在web.xml中配置欢迎页面
index.html
3、在tomcat的web.xml中修改端口号,改为80
4、在hosts文件中注册域名让他指向127.0.01
完成以上步骤,就可以是实现在浏览器输入访问本地文件
5、
javaweb第五天
1、servlet的生命周期?
当用户访问servlet时,服务器会首先会查看在内存中是否已经存在该servlet的实例,若存在那么就直接使用该servlet响应客户端的请求,若是不存在,则创建该servlet实例,并紧接着调用init方法初始化该servlet实例,然后调用service方法响应用户请求,当服务器被关闭或者web应用被卸载时servlet引擎调用destroy方法,摧毁servlet实例对象。
倘若用户再次请求该servlet,服务器将会使用刚才已经创建好了的servlet实例对象,响应客户端的请求,因为在servlet是单实例的的,在服务器的内存之中只有一个servlet实例对象,所以servlet的init方法也只会被调用一次。
这里小小的注意一点就是:
servlet并不一定在用户第一次访问时被创建,你可以在web.xml中配置load-up-startup参数。
让tomcat启动时就创建servlet对象。
2、线程与进程的区别?
进程是有线程组成,一个进程包含多个线程
进程是资源(内存)管理的最小单位
线程是程序执行的最小单位
Java多线程执行过程:
JVM启动时,向操作系统申请一块内存,然后线程启动时,向JVM申请内存
3、缺省servlet
当servlet的映射路径为“/”时,那么该servlet就成了当前web应用下的缺省servlet,
但访问tomcat中的静态页面或图片时,实际上访问的就是tomcat中的缺省的servlet
org.apache.catalina.servlets.DefaultServlet为tomcat中缺省servlet
4、在servlet初始化时,建议不要覆盖init(ServletConfigconfig),只需覆盖无参的init()
当servlet配置了初始化参数之后,web容器在创建servlet实例对象时,会自动将这些初始化参数封装到ServletConfig对象中,并在init(ServletConfigconfig)方法传递给servlet,程序员就可以通过ServletConfig对象获得servlet的初始化信息。
@Override
publicvoidinit(ServletConfigconfig)throwsServletException{
Stringvalue=config.getInitParameter("charset");
System.out.println("value:
"+value);
}
倘若覆盖
5、获得ServletContext对象两种方法:
servletConfig.getServletContext()
this.getServletContext()
6、web工程中读取文件的两种方法
1、文件系统路径(使用ServletContext)
ServletCont