首页 > 代码库 > J2EE学习笔记
J2EE学习笔记
中国人民银行企业培训-J2EE
1.HTTP超文本传输协议,应用层协议。 HTTP是基于请求、响应模式的,无状态的协议。
2.HTTP1.0通信过程:客户端发起连接->客户发送请求->服务器响应请求->服务器关闭连接;需要不断建立连接,开销大。
3.HTTP1.1通信过程(默认使用持续连接):客户端发起连接->客户发送请求->服务器响应请求->客户端继续发送请求->服务端响应->服务器关闭连接;
4.HTTP组成:请求行、消息包头、请求正文。
请求行:Method Request-URI|HTTP-Version CRLF(回车)。
例如:GET /test.html HTTP/1.1 CRLF
Method包括GET/POST/HEAD等。其中HEAD只返回响应消息包头。
5.Tomcat中通过如下语句配置项目:
<Context path=”/test” docBase=”D:\test\WebRoot” reloadable=true””/>
6.Servlet编程:写类继承自HttpServlet->重写doGet、doPost->在web.xml中注册Servlet->编写处理函数:
resp.setContentType(“text/html”);PrintWriter out=resp.getWriter();
out.println(“<HTML>代码”);
7.JSP编程:在JSP中使用<%%>包含Java代码。
8.表单提交GET/POST区别。
A.处理方式不一样。GET添加参数在地址栏,POST添加参数在HTTP请求体中。
B.处理方法不同。doGet和doPost。
9.JSP执行过程:请求某JSP->转换成Servlet->返回响应。
10.JSP中声明变量为<%! int a=0;%>与不加!的区别:声明的变量为成员变量。不适用!声明的是局部变量。
11.JSP重点内置对象:request、response、session、application。
12.JSP中的事务处理一般有JAVA BEAN完成。<jsp:useBean>
13.Java Bean要求:公共的public类,含有无参构造和getter和setter。Java Bean范围:page、request、session、application。
14.Servlet生命周期:
A.初始化:init。三种情况装载Servlet:①Servlet容器自动装载某些Servlet②Servlet容器启动后,客户首次向Servlet发出请求③Servlet类文件更新后,重新装载Servlet。Servlet装载后,创建Servlet示例并调用init方法初始化。整个Servlet周期中中,init只调用一次。
B.请求响应阶段:service。Service方法通过servletrequest获取客户端请求信息、处理该请求并返回响应结果servletresponse。
C.终止阶段:destroy。Web应用终止或servlet容器停止工作时,释放占用的资源。
15.通常自定义servlet直接集成HttpServlet即可,这样便不用事先service方法。Service参数为ServletRequest和ServletResponse。
16.Servlet对象创建时机:①Web客户第一次请求servlet②设置<servlet>元素的<load-on-startup>,启动Web应用时会按照指定顺序创建servlet。
17.Servlet容器启动Web应用时,为每个Web应用创建一个ServletContext对象。ServletContext可以存放共享数据:主要方法:setAttribute和getAttribute。
18.Servlet是单例的,只有一个对象。而且Servlet是多线程执行的。因此,编写时注意多线程问题。因此,servlet中尽量不要定义成员变量,定义成员变量容易出现多线程问题。可以通过定义局部变量解决(局部变量属于单个线程、统一对象成员变量可被多个线程访问)。解决多线程同步问题方法:
A.实现javax.servlet.SingleThreadMode。这样servlet单线程运行。
B.去除成员变量,全是用局部变量
C.是用同步代码块:synchronized{...}
19.Cookie的使用(Cookie从服务器发出,存在于客户端硬盘上):
Cookie ck = new Cookie(“key”,”value”);response.addCookie(ck);
Cookie c = request.getCookies();
20.在servlet中使用如下语句请求转发:(还是当前页面,setAttribute的数据能够在test.jsp中取得)
request.getRequestDispatcher(“/test.jsp”).forward(request,response);
使用如下语句重定向:(转到新页面,setAttibute数据在test.jsp中不能取得,客户端需要发送两次请求)
Response.sendRedirect(“test.jsp”);
21.Web跟踪客户端状态方法:
A.建立具有跟踪数据的隐藏字段
B.重写包含额外参数的URL
C.使用持续的Cookie
D.使用Servlet API中的Session。Session位于servlet容器,cookie位于client硬盘上,会话cookie位于浏览器进程中。
22.HttpSession接口:getId、invalidate()使当前session失效、setAttribute、getAttribute、isNew、setMaxInactiveInterval设定session处于不活动状态的最大间隔。
23.Listener监听器用于发生一定动作时触发操作。例如,HttpSessionListener监听HttpSession的操作。创建Session时,激发sessionCreated方法;销毁Session时,激发sessionDestroy方法。HttpSessionAttributeListener监听HttpSession属性操作。Session增加属性,激发attributeAdded方法;Session删除属性时,激发attributeRemoved方法;Session属性被重新设置时,激发attributeReplaced方法。Servlet也有相应的监听器。
24.Filter过滤器对servlet容器的请求和响应对象进行检查和过滤。Filter而已过滤的对象可以是Servlet、Jsp或者HTML。Filter类方法:init(初始化,读取web.xml中过滤器的初始化参数)->doFilter(执行过滤操作)->destroy(释放过滤器资源)。
25.EL表达式语言,用于减少JSP中的脚本:${expr}。EL默认对象:pageContext、page/request/session/application/Scope、param(请求参数)、paramValues、header、headerValues、cookie。
26.客户化JSP标签,使用tag标签,减少JSP中代码量。创建标签步骤:①创建标签处理类②创建爱你标签库描述文件③在web.xml文件中声明(servlet2.4以后不需要)④在JSP中引入标签库。
27.Struts2.1是基于请求响应模式的应用框架。主要包括:控制器、业务逻辑层和数据逻辑层。工作过程:客户请求->过滤器->拦截器Interceptors->Action->JSP。
28.Struts2使用过程:新建Web项目->加入structs2.0支持(commons-fileupload/commons-logging/ognl/struts2-core/xwork/freemarker.jar)->编写处理类Action->编写配置文件(src目录下structs.xml,在WEB-INFO/class中自动复制出一份)->在web.xml中配置struct的Filter。工作过程:请求->web.xml过滤器到structs->structs.xml->请求action->处理类action->返回标志->跳转
29.在Action中,成员变量名跟表单名字相同并生成getter和setter方法,struct完成表单变量传递。
30.Structs类型转换:对于常见类型,structs2从客户端获取后,尝试性的自动转换成Action中定义的类型。如果转换不成功,抛出异常,输出字符串。对于自定义类型,例如输入坐标,我们需要进行类型转换。定义Point类,然后在PointAction中加入Point成员变量,生成getter和setter,然后写配置文件:PointAction-conversion.properties(待处理类包中,里面设置待处理类和处理类(继承自DefaultTypeConverter)),最后在处理类中实现类型转换。处理类也可继承自StrutsTypeConverter,完成批量转换从待处理类和String的相互转换。对于多个坐标,处理Action中可使用list<Point>成员变量,完成批量转换。
31.上面为局部转换,针对的是每个action。全局转换可针对全部action,属性文件(在src文件下,不带包)为:xwork-conversion.properties。
32.Structs定义的状态变量:SUCCESS/ERROR/INPUT/LOGIN/NONE.
33.Struts输入校验(服务端验证),分为编码方式校验和校验框架两部分。如果输入信息不正确,返回INPUT。
A.编码方式:Action中重写validate方法。Validate优先于execute。addActionError添加错误信息,JSP中使用<s:actionerror/>显示错误。Structs会自动生成field级别的校验消息,使用<s:fielderror/>显示。Action中新建RegisterAction.properties实现国际化。使用structs标签自带错误输出功能。
B.校验框架方式:action包下定义配置文件:(Action名-validation.xml)RegisterAction-validation.xml。校验框架分为属性优先(field)或者校验器优先(validator)。首先执行类型转换,然后是对应的校验框架,然后是特定方法的validate(例如form的method属性设置为test方法,action中方法为validateTest()),然后是validate方法。如果上述过程中出现错误,都不会执行execute方法,转而页面装转向struts.xml中input对应的页面。
34.国际化。命名方式:文件名_国家代码_properties,位于src文件夹下。
35.拦截器Interceptor:类似于过滤器。Interceptor是structs2的核心。需要实现方法:init、intercept(在请求前或处理后处理)、destroy方法。定义拦截器类需要实现Interceptor接口->在structs.xml中进行配置(interceptors)->structs.xml中action引用拦截器。注意:使用自定义拦截器后,默认拦截器不再起作用。需要加上默认的拦截器,且自定义拦截器位于默认拦截器之上。使用拦截器<param>可以传值。Interceptor接口要求必须实现init、intercept和destroy方法,可以使用AbstractInterceptor。拦截器、过滤器执行过程:interceptor1.invoke->interceptor2.invoke->validate->interceptor2返回并结束->interceptor1返回并结束。
36.Struts2提供支持文件上传<s:form action=”upload” enctype=”multipart/form-data”>。Uploadaction继承ActionSupport。Struts默认是执行请求转发,刷新一次就执行一次,可以改为重定向:<result type=”redirect”>
37.JAVA访问数据库方式:
A.JDBC-ODBC桥加ODBC驱动程序。ODBC驱动提供JDBC访问。
B.本地API:部分用Java编写的驱动程序。
C.JDBC网络纯Java驱动。将驱动转换为与DBMS无关的网络协议。
D.本地协议纯Java驱动程序。与DBMS有关的网络协议。
数据库连接的一般过程:
载入JDBC驱动程序->定义连接URL->建立连接->创建Statement_>执行查询或者更新->结果处理->关闭连接。
Class.forname(“oracle.jdbc.driver.OracleDriver”);//载入驱动
DriverManager类getConnection用于建立连接
Connection类的close方法用于关闭数据库连接
Connection的createStatement发送SQL语句。使用Statement对象{statement、preparestatement、CallableStatement},常用方法executeQuery、executeUpdate和close。Preparestatement可以用?预留参数;callablestatement提供存储过程支持。
38.应用程序的分层:四层{表述层structs、业务逻辑层、持久化层Hibernate、数据库层};spring可以管理前三层。
39.数据库知识:
A.主键。代理主键机制,代理主键不代表业务,不会被改变。
B.表与表之间的参照完整性连接表表示多对多,一对多用外键。
40.ORM模式:对象-关系映射。在单个组件中负责所有实体域对象的映射。类与表对应,示例与表中记录对应。MVC模式;DAO模式:Data Access Object。
41.使用Hibernate步骤:创建Hibernate配置文件->创建持久化类->创建对象-关系映射文件->通过HibernateAPI编写数据库访问代码
42.MyEclipse添加Hibernate功能时,需要更改默认选项,添加jar文件到WEB-INF/lib下。hibernate.cfg.xml配置:
<session-factory> <property name=”connection.url”>jdbc:mysql://localhost:3306/hibernate /> <property name=”connection.username”>root /> <property name=”connection.password”>root /> <property name=”connection.driver_class”>com.mysql.jdbc.Driver /> <property name=”connection.dialect”>org.hibernate.dialect.MySQLDialect /> </session-factory> |
数据库建表person->针对这张表新建持久化类com.hibernate.model.Person{1.需要getter和setter.2.需要id属性,称之为OID(对象标示符).3.提供默认构造}->编写映射文件Person.hbm.xml,放到src下而不是包下:(用hib内置的编辑器打开)
<class name=”com.hibernate.model.Person” table=”person”> <id name=”id”column=”id” type=”int”> <generator class=”increment”/>//主键id的生成方式 </id> <property name=”username” column=”username” type=”string” ... </class> |
在主配置文件hibernate.cfg.xml中配置:<mapping resource=”Person.hbm.xml”/>
43.Hibernate提供的SQL操作类:
A.Configuration:配置数据库。
B.SessionFactory:创建session。一个SessionFactory对应于一个数据库存储源,它是线程安全的(可被多个线程访问),重量级的。可以理解为一个SessionFactory对应于一个数据库。
C.Session:相当于以此数据库操作过程。Session不是线程安全的,轻量级的。可理解为一次数据库sql执行过程。此session非彼session!常用方法:sava、update、delete、get
D.Transation:事务处理。
44.可编写HibernateUtil类完成对session的操作(静态SessionFactory、静态代码块处理sessionFactory)。
45.编写DBPerson处理数据库和Person对象。Hql针对的是类对象而言(select * form Person,Person是类不是表 ),sql针对的是数据库。
46.数据库中的blob类型用于存二进制文件,Hibernate的xml中用binary转换,持久化类用byte[]转换。
47.1对多关系双向关联关系(就2个),多的通过外键参照1的那一方。使用key元素设置外键。Cascade的理解:1的那份保存,然后按照外键全部保存多的。
48.1对多双向自身关联关系(树形结构,子类1对1父类,子类1对n孙类),例如Category{private Long id;private String name;private Category parentCategory;//父 private Set childCategories;//子类别}。数据库表中使用有三个字段:id、name和parentID(外键,指向本身的ID)。