siemens800 发表于 2013-1-28 23:36:39

JAVA EE WebBasic

J2EE1.4_API.rar
http://www.iteye.com/topics/download/00ef37b9-3fd5-3ffa-8981-c259054a3e93
 
Lindows的博客文章            backup
                        查看目录         

[*]1. Humor

[*]1.1 music
[*]1.2 http://dfwb.njnews.cn
[*]1.3 unearthly sms
[*]1.4 qiushibaike.com
[*]1.5 oop
[*]1.6 science
[*]1.7 joke
[*]1.8 domain
[*]1.9 girl

[*]2. Java

[*]2.1 vector
[*]2.2 java datastructural
[*]2.3 java image
[*]2.4 basic java
[*]2.5 java pattern
[*]2.6 javajdk / api
[*]2.7 java rsource
[*]2.8 java jdbc4.0
[*]2.9 java properties
[*]2.10 java jar
[*]2.11 java xml
[*]2.12 java socket
[*]2.13 java jvm / xVM
[*]2.14 java timer\date
[*]2.15 java temp
[*]2.16 com.javaeye.lindows.lang
[*]2.17 java RegExp
[*]2.18 java scjp
[*]2.19 java unicode
[*]2.20 java protocol
[*]2.21 java security

[*]3. Java EE

[*]3.1 framework Axis
[*]3.2 JAVA EE Resource
[*]3.3 JAVA EE WebBasic
[*]3.4 framework hibenate3
[*]3.5 JSP/Servlet/JSTL/JSF
[*]3.6 framework struts2
[*]3.7 JAVA EE SSH
[*]3.8 JAVA EE JSP
[*]3.9 framework log4j
[*]3.10 framework spring2.5
[*]3.11 framework jdon5.1
[*]3.12 product wiki confluence
[*]3.13 framework fckedit
[*]3.14 framework SiteMesh
[*]3.15 JAVA EE Projects
[*]3.16 framework junit
[*]3.17 JSP temp

[*]4. Java Tools

[*]4.1 My Eclipse 7.0.0 M2
[*]4.2 eclipse dorado plugin
[*]4.3 IBM WID 6.1
[*]4.4 JavaWeb FrontTools
[*]4.5 SAP BOE crystal report
[*]4.6 Linux + Emacs / VIM / SciTE /Gedit
[*]4.7 WinXP + EmEditor / Notepad++ /JCreator

[*]5. Web Server

[*]5.1 webServer Tomcat5
[*]5.2 appServer WebSphere
[*]5.3 appServer WebLogic
[*]5.4 appServer JBoss
[*]5.5 httpServer Apache HTTP Server
[*]5.6 httpServer IBM HTTP Server
[*]5.7 httpServer lighttpd 1.4
[*]5.8 httpServer nginx 0.6
[*]5.9 cacheServer MemCache
[*]5.10 cacheServer java*
[*]5.11 ProxyServer Squid
[*]5.12 Transaction Server CICS
[*]5.13 mailServer Apache James

[*]6. Web Script

[*]6.1 js resource
[*]6.2 script Ruby / Rails
[*]6.3 js Connection
[*]6.4 script VBS
[*]6.5 js jquery / ext /apanta
[*]6.6 script Groovy / Grails
[*]6.7 script ColdFusion
[*]6.8 script PHP / VHCS2
[*]6.9 script python / TurboGears

[*]7. Web Database

[*]7.1 db db2
[*]7.2 db oracledba
[*]7.3 db PostgreSQL 8.2.3
[*]7.4 db oracle scripts
[*]7.5 db oracle tools
[*]7.6 db mysql
[*]7.7 db sqlserver
[*]7.8 db oracle config
[*]7.9 db derby
[*]7.10 db Oracle Berkeley DB
[*]7.11 db oracle parser
[*]7.12 db oracle suning
[*]7.13 oracle temp
[*]7.14 oracle toad & plsql temp
[*]7.15 oracle sqlserver & oracle temp
[*]7.16 oracle mysql & oracle temp
[*]7.17 oracle sql tables temp
[*]7.18 oracle sql statement temp
[*]7.19 db mysql6 temp
[*]7.20 db sqlserver2005
[*]7.21 db db2 9c
[*]7.22 db web pagination
[*]7.23 db sql example
[*]7.24 db oracle imp/exp

[*]8. OS

[*]8.1 Win FTP \ BAT \ DOS \ REG \ NET
[*]8.2 Linux + IPC
[*]8.3 Linux + TSM
[*]8.4 Win + DOS
[*]8.5 Linux + USBsys
[*]8.6 Linux + Command
[*]8.7 Linux + Database
[*]8.8 Linux + PDF
[*]8.9 Linux/Aix analysisTool
[*]8.10 Linux + HtmlTools
[*]8.11 Linux + SCIM / Fitx / gcin /ibus
[*]8.12 Win + NET
[*]8.13 Win + Office
[*]8.14 UNIX + AIX
[*]8.15 UNIX + AIX HACMP
[*]8.16 Linux + DownloadTool
[*]8.17 Linux + Windows
[*]8.18 Linux + SVN / CVS
[*]8.19 Linux + zipTool
[*]8.20 Linux + IDS
[*]8.21 Linux + BusyBox
[*]8.22 Linux + JDK/TOMCAT/Dia(Planner)
[*]8.23 Linux + software
[*]8.24 Linux + safeTool
[*]8.25 Linux + ftpTool
[*]8.26 Linux + TranslateTool
[*]8.27 Linux + proxyTool / vpn
[*]8.28 Linux + resouces
[*]8.29 Linux + BackupTool
[*]8.30 Linux + browerTool
[*]8.31 Linux + themeTool
[*]8.32 Linux + Shell/Man
[*]8.33 linux + ClusterTool
[*]8.34 Linux + mediaTool
[*]8.35 Win + cygwin / gvim
[*]8.36 Linux + chmTool

[*]9. XML

[*]9.1 http://xml.apache.org/dist
[*]9.2 google Protocol Buffers
[*]9.3 xml dtd
[*]9.4 xml XHTML、DHTML、SHTML
[*]9.5 open protocol
[*]9.6 xml basic
[*]9.7 xml HTML、DIV、CSS
[*]9.8 xml RSS
[*]9.9 xml UML

[*]10. My Live

[*]10.1 my pc info
[*]10.2 Delicious
[*]10.3 my office
[*]10.4 software
[*]10.5 interview
[*]10.6 Read
[*]10.7 my music
[*]10.8 my games
[*]10.9 movie
[*]10.10 travel
[*]10.11 live temp
[*]10.12 Virus / Trojan / Worm / Hook

[*]11. My Projects
下载链接

http://lindows.iteye.com/blog/download_pdf/1163
 
 
 
reference:http://blog.163.com/ren_bozhou/blog/static/51689589200802474935458/
Information Technology
no commit...
http://seeitco.com/images/logo_288_42.gif
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。
 
 
 
Jbpm了解表结构,然后就能使用hibernate进行操作。
 
 
Struts的工作流程:
Struts是一个遵循mvc模式的web框架,说白了他就是一个大大的serverlet这个servlet名字叫actionservlet,我们可以在web.xml文件里面把一组请求影射给这个sevlet,也就是影射给这个struts框架,当actionservlet接受到请求后,会把请求交给一个action去处理,每一个请求到底映射给那一个action,是通过找配置文件。Struts-config.xml 其实这个文件的文件名和路径是可以配置的,      
   当他把请求交给action之前,会把请求参数封装成一个formbean,当效研有问题时就返回到原来的页面,当成功显示,用actionforward封装。
    支持国际化,也提供了相应的标签。剩下的是细节的应用。
千万不要把全局变量放在action中。整个对象被反复的调用,其值会被改变。
<html:form>显示自己action所指向的那个formbean对象的值。如果内存中不存在,则它new一个新的formbean.。
  和action所关联的域的对象在哪里呢,formbean默认是在session中。Jsp是从小的与到大的域去找。
 
 
Session 里面不能存储用户的机密信息,因为session是不安全的是可以伪装的。
 
 
如何防止表单提交: 有两种方法:1 、当第一次处理给客户端送表单 ,首先用隐藏字段的形式安排一个唯一的号码 并自己保存一份;当提交时会把,表单提交给第二个action, 第二个action中的处理流程是:首先拿着请求中的 唯一号码,在内存中是否存在(session)。
 
2、saveToken(request). Struts可以自动完成。
   Istokenvalidat() 
   resetToken
struts中有个 redirect属性,可以防止刷新。
 
 
面试题 有垃圾回收器 内存有没有 可能益处
 
我要在笔试题上进行扩展:传值 与 传引用,要说什么时候会用到传引用,如果想让方法返回多个对象,可以把这些对象作为引用传递进去,用作输出参数。另外,如果不是要返回结果,而是作为输入参数,要注意一些技巧:
Func(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.getName() + "cookie value:" +
         cookie.getValue());
   }
}


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

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


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

<div class="blog_content">在线用户列表 和 重复登陆

解决两个问题:
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);
       }
    }http://imgcache.qq.com/ac/b.gif
页: [1]
查看完整版本: JAVA EE WebBasic