• J2EE学习笔记


    中国企业培训的人民银行-J2EE

    1.HTTP超文本传输协定。应用层协议。

    HTTP是基于请求、响应模式的,无状态的协议。

    2.HTTP1.0通信过程:client发起连接->客户发送请求->server响应请求->server关闭连接;须要不断建立连接,开销大。

    3.HTTP1.1通信过程(默认使用持续连接):client发起连接->客户发送请求->server响应请求->client继续发送请求->服务端响应->server关闭连接。

    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: estWebRoot” reloadable=true””/>

    6.Servlet编程:写类继承自HttpServlet->重写doGetdoPost->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.处理方法不同。doGetdoPost

    9.JSP运行过程:请求某JSP->转换成Servlet->返回响应。

    10.JSP中声明变量为<%! int a=0;%>与不加!的差别:声明的变量为成员变量。

    不适用。声明的是局部变量。

    11.JSP重点内置对象:requestresponsesessionapplication

    12.JSP中的事务处理一般有JAVA BEAN完毕。<jsp:useBean>

    13.Java Bean要求:公共的public类。含有无參构造和gettersetterJava Bean范围:pagerequestsessionapplication

    14.Servlet生命周期:

    A.初始化:init

    三种情况装载Servlet:①Servlet容器自己主动装载某些ServletServlet容器启动后。客户首次向Servlet发出请求③Servlet类文件更新后,又一次装载ServletServlet装载后,创建Servlet演示样例并调用init方法初始化。整个Servlet周期中中,init仅仅调用一次。

    B.请求响应阶段:serviceService方法通过servletrequest获取client请求信息、处理该请求并返回响应结果servletresponse

    C.终止阶段:destroyWeb应用终止或servlet容器停止工作时,释放占用的资源。

    15.通常自己定义servlet直接集成HttpServlet就可以,这样便不用事先service方法。Service參数为ServletRequestServletResponse

    16.Servlet对象创建时机:①Web客户第一次请求servlet②设置<servlet>元素的<load-on-startup>。启动Web应用时会依照指定顺序创建servlet

    17.Servlet容器启动Web应用时,为每一个Web应用创建一个ServletContext对象。ServletContext能够存放共享数据:主要方法:setAttributegetAttribute

    18.Servlet是单例的,仅仅有一个对象。

    并且Servlet是多线程运行的。因此,编写时注意多线程问题。

    因此。servlet中尽量不要定义成员变量。定义成员变量easy出现多线程问题。能够通过定义局部变量解决(局部变量属于单个线程、统一对象成员变量可被多个线程訪问)。解决多线程同步问题方法:

    A.实现javax.servlet.SingleThreadMode。这样servlet单线程执行。

    B.去除成员变量,全是用局部变量

    C.是用同步代码块:synchronized{...}

    19.Cookie的使用(Cookie从server发出。存在于client硬盘上):

    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中不能取得,client须要发送两次请求)

    Response.sendRedirect(“test.jsp”);

    21.Web跟踪client状态方法:

    A.建立具有跟踪数据的隐藏字段

    B.重写包括额外參数的URL

    C.使用持续的Cookie

    D.使用Servlet API中的Session

    Session位于servlet容器,cookie位于client硬盘上。会话cookie位于浏览器进程中。

    22.HttpSession接口:getIdinvalidate()使当前session失效、setAttributegetAttributeisNewsetMaxInactiveInterval设定session处于不活动状态的最大间隔。

    23.Listener监听器用于发生一定动作时触发操作。

    比如,HttpSessionListener监听HttpSession的操作。创建Session时,激发sessionCreated方法;销毁Session时,激发sessionDestroy方法。HttpSessionAttributeListener监听HttpSession属性操作。

    Session添加属性,激发attributeAdded方法;Session删除属性时,激发attributeRemoved方法;Session属性被又一次设置时,激发attributeReplaced方法。

    Servlet也有对应的监听器。

    24.Filter过滤器对servlet容器的请求和响应对象进行检查和过滤。

    Filter而已过滤的对象能够是ServletJsp或者HTML

    Filter类方法:init(初始化,读取web.xml中过滤器的初始化參数)->doFilter(运行过滤操作)->destroy(释放过滤器资源)

    25.EL表达式语言,用于降低JSP中的脚本:${expr}EL默认对象:pageContextpage/request/session/application/Scopeparam(请求參数)paramValuesheaderheaderValuescookie

    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中配置structFilter。工作过程:请求->web.xml过滤器到structs->structs.xml->请求action->处理类action->返回标志->跳转

    29.在Action中,成员变量名跟表单名字同样并生成gettersetter方法,struct完毕表单变量传递。

    30.Structs类型转换:对于常见类型。structs2从client获取后,尝试性的自己主动转换成Action中定义的类型。

    假设转换不成功。抛出异常,输出字符串。对于自己定义类型。比如输入坐标,我们须要进行类型转换。

    定义Point类,然后在PointAction中增加Point成员变量,生成gettersetter,然后写配置文件: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优先于executeaddActionError加入错误信息,JSP中使用<s:actionerror/>显示错误。

    Structs会自己主动生成field级别的校验消息,使用<s:fielderror/>显示。Action中新建RegisterAction.properties实现国际化。

    使用structs标签自带错误输出功能。

    B.校验框架方式:action包下定义配置文件:(Action-validation.xml)RegisterAction-validation.xml。校验框架分为属性优先(field)或者校验器优先(validator)

    首先运行类型转换,然后是相应的校验框架,然后是特定方法的validate(比如formmethod属性设置为test方法。action中方法为validateTest()),然后是validate方法。假设上述过程中出现错误,都不会运行execute方法,转而页面装转向struts.xmlinput相应的页面。

    34.国际化。

    命名方式:文件名称_国家代码_properties。位于src目录下。

    35.拦截器Interceptor:类似于过滤器。

    Interceptorstructs2的核心。

    须要实现方法:initintercept(在请求前或处理后处理)destroy方法。

    定义拦截器类须要实现Interceptor接口->structs.xml中进行配置(interceptors)->structs.xmlaction引用拦截器。注意:使用自己定义拦截器后。默认拦截器不再起作用。须要加上默认的拦截器。且自己定义拦截器位于默认拦截器之上。使用拦截器<param>能够传值。Interceptor接口要求必须实现initinterceptdestroy方法,能够使用AbstractInterceptor。拦截器、过滤器运行过程:interceptor1.invoke->interceptor2.invoke->validate->interceptor2返回并结束->interceptor1返回并结束。

    36.Struts2提供支持文件上传<s:form action=”upload” enctype=”multipart/form-data”>

    Uploadaction继承ActionSupportStruts默认是运行请求转发,刷新一次就运行一次。能够改为重定向:<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”);//加载驱动

    DriverManagergetConnection用于建立连接

    Connection类的close方法用于关闭数据库连接

    ConnectioncreateStatement发送SQL语句。使用Statement对象{statementpreparestatementCallableStatement},经常用法executeQueryexecuteUpdateclose

    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.须要gettersetter.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!经常用法:savaupdatedeleteget

    D.Transation:事务处理。

    44.可编写HibernateUtil类完毕对session的操作(静态SessionFactory、静态代码块处理sessionFactory)。

    45.编写DBPerson处理数据库和Person对象。Hql针对的是类对象而言(select * form PersonPerson是类不是表 ),sql针对的是数据库。

    46.数据库中的blob类型用于存二进制文件。Hibernatexml中用binary转换,持久化类用byte[]转换。

     

    47.1对多关系双向关联关系(就2个),多的通过外键參照1的那一方。使用key元素设置外键。Cascade的理解:1的那份保存,然后依照外键所有保存多的。

    48.1对多双向自身关联关系(树形结构,子类11父类,子类1n孙类),比如Category{private Long id;private String name;private Category parentCategory;//父 private Set childCategories;//子类别}。数据库表中使用有三个字段:idnameparentID(外键,指向本身的ID)

    版权声明:本文博客原创文章,博客,未经同意,不得转载。

  • 相关阅读:
    树的可视化
    图的可视化
    1+1=2
    用xapian来做索引
    学习的快乐
    项目小结
    z=sin(xy)
    Min Stack
    互联网公司的文化
    为什么要读数学书
  • 原文地址:https://www.cnblogs.com/gcczhongduan/p/4644456.html
Copyright © 2020-2023  润新知