javaweb复习总结全.docx
- 文档编号:15107478
- 上传时间:2023-06-30
- 格式:DOCX
- 页数:17
- 大小:173.50KB
javaweb复习总结全.docx
《javaweb复习总结全.docx》由会员分享,可在线阅读,更多相关《javaweb复习总结全.docx(17页珍藏版)》请在冰点文库上搜索。
javaweb复习总结全
javaweb第一天
1、junit测试框架
Arrsert.assertEquals(longexecpted,longactual)测试两个long类型的值execpted与actual是否相等,相等返回true,否则返回false;
2、泛型类型的转换
1、泛型的实际类型参数不具备继承关系、
List
Collection
下面这一行代码会报错:
不能不能进行换。
因为List集合中装的是Integer类型,而Collection中装的Number类型,泛型的实际类型参数不具备继承关系。
打个比方:
List和Collection都是集合,是容器,是用来装东西的,所以将他们比喻成两个不同的房子,List房子中住的是人,Collection房子中住的是猪,将住人的List房子赋给住猪的房子,将人变成猪,这是不可能的,所以泛型的实际类型参数不具备继承关系
2、泛型的作用:
jdk5.0之前,将对象保存到集合中,对象会失去他自己特有的信息,在从集合中取出该集合时,程序员必须手动的强制类型转换,这样不免在给程序带来安全性的问题,但是泛型的出现使得程序员在编码时可以限制集合中的处理类型,从而把运行时的可能发生的问题,转变为编译时的问题,以此提高程序的可读性和安全性。
结论:
通过限制集合中的处理类型,使得程序更具可读性和安全性
3、自定义泛型方法
public
注意:
在泛型方法中只有对象类型才能作为实际参数
/*编写一个泛形方法,实现指定位置上数组元素的交换。
*/
public
Ttemp=arr[index1];
arr[index1]=arr[index2];
arr[index2]=temp;
}
/*编写一个泛形方法,接收一个任意数组,并颠倒数组中的所有元素*/
public
for(inti=0;i Ttemp=arr[i]; arr[i]=arr[arr.length-1-i]; arr[arr.length-1-i]=temp; } } 另外一方法: 数组顺序反转,使用Collections.reverseOrder() /*使用自定义泛型封装formbean*/ public 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 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(List } } 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"> 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中配置欢迎页面 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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- javaweb 复习 总结
![提示](https://static.bingdoc.com/images/bang_tan.gif)