`

JAVA EE WebBasic

阅读更多

J2EE1.4_API.rar

http://www.iteye.com/topics/download/00ef37b9-3fd5-3ffa-8981-c259054a3e93

 

Lindows的博客文章 backup
查看目录

下载链接

http://lindows.iteye.com/blog/download_pdf/1163

 

 

 

reference:http://blog.163.com/ren_bozhou/blog/static/51689589200802474935458/

Information Technology
no commit...

http://www.seeitco.com


vo 值对象《====》to传输对象《====》pojo最根本的java对象
即:只包含get();set();方法的类

PO/POJO/BO/DTO/VO的区别
PO :persistent object持久对象
1 .有时也被称为Data对象,对应数据库中的entity,可以简单认为一个PO对应数据库中的一条记录。
2 .在hibernate持久化框架中与insert/delet操作密切相关。
3 .PO中不应该包含任何对数据库的操作。
---------------------------------------------------------
POJO :plain ordinary java object 无规则简单java对象
一个中间对象,可以转化为PO、DTO、VO。
1 .POJO持久化之后==〉PO
(在运行期,由Hibernate中的cglib动态把POJO转换为PO,PO相对于POJO会增加一些用来管理数据库entity状态的属性和方法。PO对于programmer来说完全透明,由于是运行期生成PO,所以可以支 持增量编译,增量调试。)
2 .POJO传输过程中==〉DTO
3 .POJO用作表示层==〉VO
PO 和VO都应该属于它。
----------------------------------------------------------
BO :business object 业务对象
封装业务逻辑为一个对象(可以包括多个PO,通常需要将BO转化成PO,才能进行数据的持久化,反之,从DB中得到的PO,需要转化成BO才能在业务层使用)。
关于BO主要有三种概念
1 、只包含业务对象的属性;
2 、只包含业务方法;
3 、两者都包含。
在实际使用中,认为哪一种概念正确并不重要,关键是实际应用中适合自己项目的需要。
----------------------------------------------------------
VO :value object值对象 / view object表现层对象
1 .主要对应页面显示(web页面/swt、swing界面)的数据对象。
2 .可以和表对应,也可以不,这根据业务的需要。
注 :在struts中,用ActionForm做VO,需要做一个转换,因为PO是面向对象的,而ActionForm是和view对应的,要将几个PO要显示的属性合成一个ActionForm,可以使用BeanUtils的copy方法。
----------------------------------------------------------
D TO (TO) :Data Transfer Object数据传输对象
1 .用在需要跨进程或远程传输时,它不应该包含业务逻辑。
2 .比如一张表有100个字段,那么对应的PO就有100个属性(大多数情况下,DTO 内的数据来自多个表)。但view层只需显示10个字段,没有必要把整个PO对象传递到client,这时我们就可以用只有这10个属性的DTO来传输数据到client,这样也不会暴露server端表结构。到达客户端以后,如果用这个对象来对应界面显示,那此时它的身份就转为VO。
----------------------------------------------------------
DAO :data access object数据访问对象
1 .主要用来封装对DB的访问(CRUD操作)。
2 .通过接收Business层的数据,把POJO持久化为PO。

 

 

 

J bpm了解表结构,然后就能使用hibernate进行操作。

 

 

Struts的工作流程:

S truts是一个遵循mvc模式的web框架,说白了他就是一个大大的serverlet这个servlet名字叫actionservlet,我们可以在web.xml文件里面把一组请求影射给这个sevlet,也就是影射给这个struts框架,当actionservlet接受到请求后,会把请求交给一个action去处理,每一个请求到底映射给那一个action,是通过找配置文件。 S truts-config.xml 其实这个文件的文件名和路径是可以配置的,      

   当他把请求交给action之前,会把请求参数封装成一个formbean,当效研有问题时就返回到原来的页面,当成功显示,用actionforward封装。

    支持国际化,也提供了相应的标签。剩下的是细节的应用。

千万不要把全局变量放在action中。整个对象被反复的调用,其值会被改变。

<html:form>显示自己action所指向的那个formbean对象的值。如果内存中不存在,则它new一个新的formbean.。

  和action所关联的域的对象在哪里呢,formbean默认是在session中。 J sp是从小的与到大的域去找。

 

 

S ession 里面不能存储用户的机密信息,因为session是不安全的是可以伪装的。

 

 

如何防止表单提交: 有两种方法:1 、当第一次处理给客户端送表单 ,首先用隐藏字段的形式安排一个唯一的号码 并自己保存一份;当提交时会把,表单提交给第二个action, 第二个action中的处理流程是:首先拿着请求中的 唯一号码,在内存中是否存在(session)。

 

2、saveToken(request).  S truts可以自动完成。

    I stokenvalidat() 

   resetToken

struts中有个 redirect属性,可以防止刷新。

 

 

面试题 有垃圾回收器 内存有没有 可能益处

 

我要在笔试题上进行扩展:传值 与 传引用,要说什么时候会用到传引用,如果想让方法返回多个对象,可以把这些对象作为引用传递进去,用作输出参数。另外,如果不是要返回结果,而是作为输入参数,要注意一些技巧:

F unc(map){  mapclone = map.clone(); mapclone  .. }

Func(map){  mapa = c  }

 

 

 

 

 

 


Session与Cookie的区别

http://chenyubo.iteye.com/blog/219775

Session是由应用服务器维持的一个服务器端的存储空间,用户在连接服务器时,会由服务器生成一个唯一的SessionID,用该SessionID 为标识符来存取服务器端的Session存储空间。而SessionID这一数据则是保存到客户端,用Cookie保存的,用户提交页面时,会将这一 SessionID提交到服务器端,来存取Session数据。这一过程,是不用开发人员干预的。所以一旦客户端禁用Cookie,那么Session也 会失效。

服务器也可以通过URL重写的方式来传递SessionID的值,因此不是完全依赖Cookie。如果客户端Cookie禁用,则服务器可以自动通过重写URL的方式来保存Session的值,并且这个过程对程序员透明。

可以试一下,即使不写Cookie,在使用request.getCookies();取出的Cookie数组的长度也是1,而这个Cookie的名字就是JSESSIONID,还有一个很长的二进制的字符串,是SessionID的值。

Cookie是客户端的存储空间,由浏览器来维持。
在一些投票之类的场合,我们往往因为公平的原则要求每人只能投一票,在一些WEB开发中也有类似的情况,这时候我们通常会使用COOKIE来实现,例如如下的代码:
< % cookie[]cookies = request.getCookies();
if (cookies.lenght == 0 || cookies == null)
doStuffForNewbie();
//没有访问过
}

else
{
doStuffForReturnVisitor(); //已经访问过了
}

% >


这是很浅显易懂的道理,检测COOKIE的存在,如果存在说明已经运行过写入COOKIE的代码了,然而运行以上的代码后,无论何时结果都是执行 doStuffForReturnVisitor(),通过控制面板-Internet选项-设置-察看文件却始终看不到生成的cookie文件,奇怪, 代码明明没有问题,不过既然有cookie,那就显示出来看看。
cookie[]cookies = request.getCookies();
if (cookies.lenght == 0 || cookies == null)
out.println("Has not visited this website");
}

else
{
for (int i = 0; i < cookie.length; i++)
{
out.println("cookie name:" + cookies[i].getName() + "cookie value:" +
cookie[i].getValue());
}
}


运行结果:
cookie name:JSESSIONID cookie value:KWJHUG6JJM65HS2K6

为什么会有cookie呢,大家都知道,http是无状态的协议,客户每次读取web页面时,服务器都打开新的会话,而且服务器也不会自动维护客 户的上下文信息,那么要怎么才能实现网上商店中的购物车呢,session就是一种保存上下文信息的机制,它是针对每一个用户的,变量的值保存在服务器 端,通过SessionID来区分不同的客户,session是以cookie或URL重写为基础的,默认使用cookie来实现,系统会创造一个名为 JSESSIONID的输出cookie,我们叫做session cookie,以区别persistent cookies,也就是我们通常所说的cookie,注意session cookie是存储于浏览器内存中的,并不是写到硬盘上的,这也就是我们刚才看到的JSESSIONID,我们通常情是看不到JSESSIONID的,但 是当我们把浏览器的cookie禁止后,web服务器会采用URL重写的方式传递Sessionid,我们就可以在地址栏看到sessionid= KWJHUG6JJM65HS2K6之类的字符串。
明白了原理,我们就可以很容易的分辨出persistent cookies和session cookie的区别了,网上那些关于两者安全性的讨论也就一目了然了,session cookie针对某一次会话而言,会话结束session cookie也就随着消失了,而persistent cookie只是存在于客户端硬盘上的一段文本(通常是加密的),而且可能会遭到cookie欺骗以及针对cookie的跨站脚本攻击,自然不如 session cookie安全了。
通常session cookie是不能跨窗口使用的,当你新开了一个浏览器窗口进入相同页面时,系统会赋予你一个新的sessionid,这样我们信息共享的目的就达不到 了,此时我们可以先把sessionid保存在persistent cookie中,然后在新窗口中读出来,就可以得到上一个窗口SessionID了,这样通过session cookie和persistent cookie的结合我们就实现了跨窗口的session tracking(会话跟踪)。
在一些web开发的书中,往往只是简单的把Session和cookie作为两种并列的http传送信息的方式,session cookies位于服务器端,persistent cookie位于客户端,可是session又是以cookie为基础的,明白的两者之间的联系和区别,我们就不难选择合适的技术来开发web service了。


http://yueguc.iteye.com/blog/245449

在线用户列表 和 重复登陆

解决两个问题
1. 实现在线用户列表
2. 当用户在异地登录后,使前一次登录自动退出
实现方法
用户登录时,会创建一个session ,用于保存用户信息。将所有用户登录时的session 值与ID 存入ServletContext 中,显示在线列表的时候,就从ServletContext中取得用户登录的session值,从中取得用户信息。
1. 登录:
先从ServletContext 中取出存放用户登录的session 相关信息,检查这个列表,如果已经存在相同的登录信息,则说明用户之前已经登录过,移除前面一条记录。
再把此次登录的信息加入到ServletContext 中。
2.监听:
实现SessionListener类,当session失效的时候,从ServletContext中移除相应记录。
3.过滤:
过滤所有页面,sesison失效后转向登录页面。但是要实现用户二次登录后强制先前的登录失效,需要在这里控制。
登录时存入的是session值和session ID,用户二次登录时移除了前线记录,存入的session值是相同的,但是ID却不同。
当第一次登录的页面请求的时候,在这里检查ServletContext中是否存在当前的session值与ID记录。如果没有就销毁这个session。

参考代码:
存放的时候有很多中方法,我选择的是将session 值与ID 先存入一个List ,在将这个List 存入另一个List ,再存到ServletContext 中。
代码仅供参考,有不合理的地方,希望大家给出意见。
============================1. 登录部分============================
//先从ServletContext中获得存放sessioninfo的List
List userlist = (List) this .servlet.getServletContext()
                         .getAttribute("userlist");
//如果是首个用户登录,sessionlist为空,new一个
if (userlist == null ) {
       userlist = new ArrayList();
    }
//遍历List
for (int i = 0; i < userlist.size(); i++) {
       List sessionInfoTemp = (List) userlist.get(i);
       //检查是否存在一个与当前session值相同,但是ID不同的记录
if (sessionInfoTemp.get(0).toString().equals(session.getAttribute("emp").toString())&& !(sessionInfoTemp.get(1).equals(session.getId()))) {
                         //如果存在,remove这一记录
                         userlist.remove(sessionInfoTemp);
              }
    }
// 把session值、ID 存入 sessioninfo
List sessioninfo = new ArrayList();
sessioninfo.add(session.getAttribute("emp"));
sessioninfo.add(session.getId());
//sessioninfo 存入 List
userlist.add(sessioninfo);
//List存入ServletContext
this .servlet.getServletContext().setAttribute("userlist", userlist);

============================2. 监听部分============================
public void sessionDestroyed(HttpSessionEvent arg0) {
       // TODO Auto-generated method stub
    HttpSession session = arg0.getSession();
    if (session.getAttribute("emp")!=null ){
    List list = (List)session.getServletContext().getAttribute("userlist");
    List userTemp = new ArrayList();
    userTemp.add(session.getAttribute("emp"));
    userTemp.add(session.getId());
    list.remove(userTemp);
    session.getServletContext().setAttribute("userlist", list);
    }
}

============================3. 过滤部分============================
public void doFilter(ServletRequest req, ServletResponse res,
           FilterChain chain) throws IOException, ServletException {

       HttpServletRequest request = (HttpServletRequest) req;
       HttpServletResponse response = (HttpServletResponse) res;
       HttpSession session = request.getSession();

       /**
* 同一用户二次登陆问题 用户请求的提交到这里,通过检查List总的记录销毁session
        */
       // 从ServletContext中取出List
List sessionlist = (List) session.getServletContext().getAttribute(
              "userlist");
       if (sessionlist == null ) {
           sessionlist = new ArrayList();
       }
       // 用于记录状态
       boolean temp = false ;
       Iterator it = sessionlist.iterator();
       while (it.hasNext()) {
           List sessioninfo = (List) it.next();

           /**
            * 判断: 如果sessioninfo中没有当前session的值与ID信息,则表明该用户已经第二次登陆了
            * 登陆的时候第一次登陆时候的信息被从List中移除了。
            */
           if (sessioninfo.get(0).toString().equals(
                  session.getAttribute("emp").toString())
                  && sessioninfo.get(1).equals(session.getId())) {
              // session值与当前ID匹配
              temp = true ;
           }
       }
       // 存在了第二次登陆,销毁session
        if (!temp) {
           session.invalidate();
       }

       String strSession = null ;
       try {
           strSession = session.getAttribute("emp").toString();
       } catch (Exception e) {
       }
       /**
        * 如果session为空,返回登陆页面
        */
       if (strSession == null ) {
           response.setCharacterEncoding("gb2312");
           response
                  .getOutputStream()    .print("<script>window.top.location.href='/index.jsp'; alert('超时或账号在其它地方登录,请重新登录!');</script>");
       } else {
           chain.doFilter(req, res);
       }
    }

 

----------------------end------------------------------------

分享到:
评论

相关推荐

    Java EE 7 Developer Handbook.pdf

    《Java EE 7 Developer Handbook》是一本专为Java EE 7开发者编写的参考指南,它旨在帮助读者开发出专业级别的应用程序。该手册为Java EE 7技术栈提供了详尽的指导和参考资料,是Java EE开发者必备的专业文献。书中...

    java ee基础使用教程

    Java EE(Java Platform, Enterprise Edition)是Java平台上用于构建企业级Web应用的框架集合,它提供了丰富的服务和组件,使得开发者能够快速开发出分布式、多层架构的应用程序。本教程由知名讲师郑阿奇编著,旨在...

    Java EE 7 tutorial 中的examples代码

    Java EE 7(Java Platform, Enterprise Edition 7)是Java平台的一个版本,专注于为企业级应用程序开发提供服务。这个教程中的examples代码是学习Java EE 7技术的重要资源,它与官方教程紧密配合,帮助开发者深入...

    精通Java EE:精通Java EE 整合应用案例\源代码第五章

    《精通Java EE:精通Java EE 整合应用案例》是一本深入探讨Java企业级开发的专著,其第五章的源代码着重展示了如何在实际项目中整合和运用Java EE技术。这一章节的内容涵盖了多种Java EE核心组件的实战应用,旨在...

    java ee api

    Java EE(Java Platform, Enterprise Edition)是Oracle公司提供的一个企业级应用开发平台,它构建在Java SE(标准版)的基础上,为开发和部署分布式、多层的企业级应用程序提供了丰富的API和工具支持。Java EE旨在...

    精通Java EE:精通Java EE 整合应用案例\源代码\源代码2-9章.

    Java EE,全称为Java Platform, Enterprise Edition,是Java平台针对企业级应用开发的版本,它提供了丰富的组件和服务,用于构建分布式、多层架构的企业应用程序。本资料包包含"精通Java EE:精通Java EE 整合应用...

    Java EE Web编程(Eclipse平台)源文件

    Java EE Web编程是企业级应用开发的重要领域,它基于Java平台,为构建分布式、多层架构的Web应用程序提供了丰富的框架和API。Eclipse作为一款强大的集成开发环境(IDE),广泛用于Java开发,包括Java EE项目。这个...

    Java EE: XML Schemas for Java EE Deployment Descriptors

    Java EE(Java Platform, Enterprise Edition)是用于构建和部署企业级Web应用程序的框架。XML Schemas在Java EE中扮演着至关重要的角色,特别是在部署描述符(Deployment Descriptors)的定义和验证方面。本文将...

    Beginning JAVA EE 7经典

    本书《Beginning JAVA EE 7经典》是一本专注于Java EE(Java Platform, Enterprise Edition)7规范的入门到高级技术指导书籍,涵盖了Java EE核心技术如JSF(JavaServer Faces)、CDI(Contexts and Dependency ...

    JAVA EE中文文档

    JAVA EE,全称为Java Platform, Enterprise Edition,是Java平台企业版的简称,是Oracle公司推出的一种用于构建企业级分布式应用程序的框架。它为开发者提供了在服务器端开发应用程序的一系列标准和API,包括Web组件...

    Java EE期末考试试题

    Java EE,全称为Java Platform, Enterprise Edition,是Java平台下的企业版,主要用于构建分布式、多层的企业级应用程序。它提供了一系列的API和服务,包括Servlet、JSP、EJB(Enterprise JavaBeans)、JMS(Java ...

    Java EE架构师认证指南

    Java EE 架构师认证指南 本资源提供了 Sun 官方的 Java EE 架构师认证考试所需要准备的知识.pointer。该考试由三部分组成:多选题测试、任务指派和对指派的任务进行陈述和测试。 体系结构 Java EE 架构师需要了解...

    精通Java EE项目案例-基于Eclipse Spring Struts Hibernate光盘源码.rar

    精通Java EE项目案例-基于Eclipse Spring Struts Hibernate光盘源码.rar精通Java EE项目案例-基于Eclipse Spring Struts Hibernate光盘源码.rar精通Java EE项目案例-基于Eclipse Spring Struts Hibernate光盘源码....

    java EE教程

    Java EE(Java Platform, Enterprise Edition)是Oracle公司提供的一个企业级应用开发平台,它构建在Java SE基础之上,为开发和部署分布式、多层的企业级应用程序提供了丰富的API和工具。本教程旨在帮助读者全面理解...

    Java EE 6 tutorial

    Java EE 6(Java Platform, Enterprise Edition 6)是Java技术在企业级开发中的一个里程碑,它为构建可扩展、高性能、分布式的企业级应用程序提供了全面的框架和规范。本教程由Sun Microsystems(后被Oracle收购)...

    精通Java EE:精通Java EE 整合应用案例\源代码第三章

    《精通Java EE:精通Java EE 整合应用案例\源代码第三章》是关于Java企业级应用开发的深度学习资源,主要聚焦于实际项目中的整合应用。本章内容可能涵盖多个Java EE技术的综合运用,如Servlet、JSP、EJB、JPA、JSF、...

Global site tag (gtag.js) - Google Analytics