少年阿宾

那些青春的岁月

  BlogJava :: 首页 :: 联系 :: 聚合  :: 管理
  500 Posts :: 0 Stories :: 135 Comments :: 0 Trackbacks

#

package org.apache.abin.mail;
import java.util.Properties;
import javax.mail.FetchProfile;
import javax.mail.Folder;
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Store;
import javax.mail.UIDFolder;
import javax.mail.URLName;
import javax.mail.internet.MimeMessage;
import com.sun.mail.pop3.POP3Folder;
/**
*    UID速度要比messageID快好多倍,messageID下载的时候需要解析header里面头文件,所以费时
 * UID接收邮件
 * @author abin
 * 2012-2-15 下午04:33:26
 */
public class ReceiveMail {
public static void main(String args[]) throws Exception {
String host = "POP3.sohu.com";// 【POP3.163.com】
String username = "leeeee";// 【yuxia2217】
String password = "***";// 【........】
Properties props = new Properties();
Session session = Session.getDefaultInstance(props, null);
Store store = session.getStore("pop3");
store.connect(host, username, password);
Folder folder = store.getFolder("INBOX");
folder.open(Folder.READ_ONLY);
FetchProfile profile = new FetchProfile(); 
profile.add(UIDFolder.FetchProfileItem.UID); 
profile.add(FetchProfile.Item.ENVELOPE);
if (folder instanceof POP3Folder) {
POP3Folder inbox = (POP3Folder) folder;
Message message[] = inbox.getMessages();
System.out.println("Messages's length: " + message.length);
for (int i = 0; i < message.length; i++) {
MimeMessage mimeMessage = (MimeMessage) message[i];
String uid = inbox.getUID(mimeMessage);
System.out.println("uid=" + uid);
int UnreadMessageCount = inbox.getUnreadMessageCount();
System.out.println("UnreadMessageCount="+UnreadMessageCount);
int NewMessageCount = inbox.getNewMessageCount();
System.out.println("NewMessageCount="+NewMessageCount);
URLName urlName = inbox.getURLName();
System.out.println("urlName="+urlName);
}
}
}
}







package org.apache.abin.mail;
import java.util.Properties;
import javax.mail.Folder;
import javax.mail.Message;
import javax.mail.Part;
import javax.mail.Session;
import javax.mail.Store;
import javax.mail.internet.MimeMessage;
import com.eastelsoft.etos.email.PraseMimeMessage;
/**
 * MessageId接收邮件
 * @author abin
 * 2012-2-16 下午01:24:30
 */
public class GetMail {
public static void main(String args[]) throws Exception {
String host = "POP3.163.com";// 【POP3.163.com】
String username = "liiiii";// 【yuxia2217】
String password = "****";// 【........】
Properties props = new Properties();
Session session = Session.getDefaultInstance(props, null);
Store store = session.getStore("pop3");
store.connect(host, username, password);
Folder folder = store.getFolder("INBOX");
folder.open(Folder.READ_ONLY);
Message message[] = folder.getMessages();
System.out.println("Messages's length: " + message.length);
for (int i = 0; i < message.length; i++) {
MimeMessage pmm=  (MimeMessage) message[i];
System.out
.println("Message " + i + " subject: " + pmm.getSubject());
System.out.println("Message " + i + " sentdate: "
+ pmm.getSentDate());
System.out.println("Message " + i + " form: " + pmm.getFrom());
System.out.println("Message" + i + " sentdate: "
+ pmm.getSentDate());
System.out.println("Message " + i + " Message-ID: "
+ pmm.getMessageID());
System.out.println("Message " + i + " reply: "
+ pmm.reply(true));
}
}
}
posted @ 2012-02-16 13:28 abin 阅读(2715) | 评论 (1)编辑 收藏

邮件的回复的代码很简单,在迭代邮件的信息的时候调用MimeMessage reply = (MimeMessage) messages[i].reply(Boolean )  TRUE 是邮件回复给发送者,FALSE恢复给所有人。如果要回复到新的收件人请使用SetReply-to。
同时可以使用 reply.setSubject(“***”)设置回复的标题,不设置的话默认是Re: 加上接收到邮件的标题。同理,也可以自己设置正文内容。
这里一定要设置发送邮件的地址,而且必须要和邮件认证的用户名一致,不然会报错。
最后调用Transport.send(reply)将邮件发出去
注意:1、reply.setFrom() 必须要设置而且要和邮件认证的用户名一致,不然会报以下错误:
com.sun.mail.smtp.SMTPSendFailedException: 501 mail from address must be same as authorization user
2、建议使用邮件认证登陆邮件服务器,不然会出现以下错误:
javax.mail.AuthenticationFailedException: failed to connect, no password specified?
3、代码虽然很简单,但是程序难免会出现各种异常。如果大家在调试程序的时候出现错误,请给我留言。



给一个成功例子大家参考:.

import java.io.*;
  import java.util.*;
 
  import javax.mail.*;
  import javax.mail.internet.*;
 
  public class ReplyMail {
 
     private static final String HOST_NAME = "pop.qq.com";
     private static final String SEND_HOST_NAME = "smtp.qq.com";
     private static final String PASSWORD = "*******";
     private static final String EMAIL_FROM = "flyingsam@qq.com";
     private static final String USER_NAME = "flyingsam@qq.com";
     private static final String PROTOCOL = "pop3";
     private static final String SEND_PROTOCOL = "smtp";
    
     public static void listMail() throws Exception {
         Properties props = new Properties();
         props.put("mail.smtp.host", SEND_HOST_NAME);
         props.put("mail.pop.host", HOST_NAME);
         props.put("mail.transport.protocol","smtp");
         props.put("mail.smtp.auth", "true");
 
        
         Session session = Session.getDefaultInstance(props, new SimpleAuthenticator(USER_NAME, PASSWORD));    
         Store store = session.getStore(ReplyMail.PROTOCOL);  
         store.connect(HOST_NAME, USER_NAME, PASSWORD);
         Folder folder = store.getFolder("INBOX");
         folder.open(Folder.READ_ONLY); 
         Message[] messages = folder.getMessages();  
         InternetAddress address;  
         for (int i = messages.length-1; i >= 0; i--) {  
             address = (InternetAddress)messages[i].getFrom()[0];  
             if(address != null) {  
                 System.out.println(address.getPersonal());  
             }
             if (null != address && "秋天的童话".equals(address.getPersonal())) {  
                 System.out.println("第" + i + "个:" + messages[i].getSubject());  
                 MimeMessage replyMessage = (MimeMessage) messages[i].reply(false);  
  //                replyMessage.setFrom(new InternetAddress(EMAIL_FROM));
 
                 replyMessage.setRecipients(MimeMessage.RecipientType.TO, address.getAddress());
                 replyMessage.setText("这是回复邮件,不知道能否成功!"); 
                 replyMessage.saveChanges();
                 Transport transport = session.getTransport("smtp");
                 transport.connect(SEND_HOST_NAME,  USER_NAME, PASSWORD);
                 transport.send(replyMessage);
                 System.out.println("回复成功");               
             }  
         }
         folder.close(true);  
         store.close();
     }
    
     public static void main(String[] args) {
         try {
             ReplyMail.listMail();
         } catch (Exception e) {
             e.printStackTrace();
         }
     }
 
 }



类SimpleAuthenticator的代码:
public class SimpleAuthenticator extends Authenticator {
    
     private String username;
    
     private String password;
    
     public SimpleAuthenticator(String username, String password) {
         this.username = username;
         this.password = password;
     }
 
     public PasswordAuthentication getPasswordAuthentication() {   
         return new PasswordAuthentication(this.username, this.password);
 
     }
    
 }
posted @ 2012-02-16 10:30 abin 阅读(2035) | 评论 (0)编辑 收藏

Mysql数据库建表语句:

CREATE TABLE `photo` (

  `id` int(11) NOT NULL AUTO_INCREMENT,

  `title` varchar(100) NOT NULL,

  `image` blob NOT NULL,

  PRIMARY KEY (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=latin1







//DBClassMysql.java  自己添加mysql的java驱动,要不会报错的

package com.abin.upload.image;



import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.Statement;



public final class DBClassMysql {

//Mysql

private static String driver="com.mysql.jdbc.Driver";

private static String url="jdbc:mysql://localhost:3306/test";

private static String user="root";

private static String password="";


public DBClassMysql ()throws ClassNotFoundException{


}


//Mysql

public static Connection getMysql(){

Connection conn=null;

try{

if(null==conn||conn.isClosed()){

Class.forName(driver).newInstance();

conn=DriverManager.getConnection(url,user,password);

}

}catch(Exception e){

e.printStackTrace();

throw new RuntimeException(e);

}

return conn;

}

}



//ImageServlet.java  保存文件流的servlet
package com.abin.upload.image;



import java.io.IOException;

import java.io.InputStream;

import java.sql.Connection;

import java.sql.PreparedStatement;

import java.util.Iterator;

import java.util.List;



import javax.servlet.ServletConfig;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;



import org.apache.commons.fileupload.FileItem;

import org.apache.commons.fileupload.disk.DiskFileItemFactory;

import org.apache.commons.fileupload.servlet.ServletFileUpload;



public class ImageServlet extends HttpServlet {



public void init(ServletConfig config) throws ServletException {

super.init(config);

}



public void doGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

super.doPost(request, response);

}



public void doPost(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

Connection conn = null;

PreparedStatement ps=null;

String title = null;

int imageLength = 0;

byte[] buffer = new byte[imageLength];



InputStream in = null;

int total = 0;

int once = 0;

DiskFileItemFactory factory = new DiskFileItemFactory();

ServletFileUpload file = new ServletFileUpload(factory);

try {

List lst = file.parseRequest(request);

Iterator it = lst.iterator();

while (it.hasNext()) {

FileItem fileItem = (FileItem) it.next();

if (fileItem.isFormField()) {

title = fileItem.getString("UTF-8");

System.out.println("表单数据的名称是:" + fileItem.getFieldName()

+ ":表单的内容是:" + fileItem.getString("UTF-8"));

} else {

if (fileItem.getName() != null

&& !fileItem.getName().equals("")) {

imageLength = Integer.parseInt(String.valueOf(fileItem

.getSize()));

in = fileItem.getInputStream();

System.out.println("上传文件的名称:" + fileItem.getName());

System.out.println("上传文件的大小:" + fileItem.getSize());

System.out.println("上传文件的类型:"

+ fileItem.getContentType());

System.out.println("上传文件的类型:"

+ fileItem.getInputStream());

}

String sql="insert into photo (title,image) values (?,?)";

conn=DBClassMysql.getMysql();

ps=conn.prepareStatement(sql);

ps.setString(1, title);

ps.setBinaryStream(2, in,in.available());

ps.executeUpdate();


}



}

request.getSession().setAttribute("message", "operate success.");

request.getRequestDispatcher("message.jsp").forward(request, response);

} catch (Exception e) {

// TODO: handle exception

e.printStackTrace();

}finally{

try {

if(ps!=null){

ps.close();

}

if(conn!=null){

conn.close();

}

} catch (Exception e) {

e.printStackTrace();

}


}



}



public void destroy() {

super.destroy();

}



}




//web.xml

<?xml version="1.0" encoding="UTF-8"?>

<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://java.sun.com/xml/ns/javaee

http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">



<servlet>

<servlet-name>ImageServlet</servlet-name>

<servlet-class>com.abin.upload.image.ImageServlet</servlet-class>

</servlet>



<servlet-mapping>

<servlet-name>ImageServlet</servlet-name>

<url-pattern>/ImageServlet</url-pattern>

</servlet-mapping>



<welcome-file-list>

<welcome-file>index.jsp</welcome-file>

</welcome-file-list>

</web-app>



//message.jsp WebRoot下面
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

  <head>

    <title>servlet upload</title>

  </head>

 

  <body>

   <%=session.getAttribute("message") %>

  </body>

</html>










//index.jsp  WebRoot下面

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

  <head>

    <title>servlet upload</title>

  </head>

 

  <body>

   <form method="post" action="ImageServlet" enctype="multipart/form-data">

   标题:<br/>

   <input name="title" type="text" /><br/>

   请选择您要上传的图片:<br/>

   <input name="myimage" type="file" /><br/>

   <input type="submit" value="提交" />

   <input type="reset" value="重置" />

  

   </form>

  </body>

</html>

posted @ 2012-02-08 10:10 abin 阅读(952) | 评论 (0)编辑 收藏

准备工作:要到http://commons.apache.org/fileupload/download_fileupload.cgi下载上传文件需要的组件类库并且到
http://commons.apache.org/io/download_io.cgi上下载其IO组件,再有了这两个组件之后我们就可以编写一个上传的Servlet程序了。
1.建立一个jsp文件里面有文件域,能够提交给要处理数据的servlet程序的映射路径,form标签中有enctype="multipart/form-data"这条属性。
2.然后我们新建一个处理该Post方法的servlet程序,设置映射路径为jsp文件中对应的映射路径,让后,我们修改配置文件,在servlet启动时,添加一条属性,是存放文件的目录。
3.在servlet init()方法里读取项目路径和上传文件存放目录,然后编写doPost()方法。具体如下:
第一、在init()方法中利用config取得保存路径和工程文件位置。
第二、在doPost方法中实现上传的数据处理。首先需要设置一下数据的编码格式response.setCharacterEncoding("UTF-8");,以防下面出现乱码现象。然后,创建一个DiskFileItemFactory对象factory,再用ServletFileUpload类创建一个对象file,将factory对象包装起来,再用file的parseRequest()方法接收request的数据,放入List对象lst中,用迭代器it接收遍历file内容,用FileItem对象fileItem循环接收,读取数据,用fileItem的isFormField()方法判断是否是上传文件还是表单数据项,如果是上传文件,那么我们先需要创建一个tempFile对象,利用其getName()方法获得文件除了路径外的真实名称,再用init()方法获得的ServletContent对象获得工程的路径(sc.getRealPath("/")),加上获得的保存目录,构成上传文件的具体目录,在新建一个File对象,利用已得到的文件完全路径建立新对象realFile最后永fileItem的write()方法包装realFile将其写入硬盘,完成上传的功能
init()方法代码
public void init(ServletConfig config) throws ServletException {
   savePath=config.getInitParameter("savePath");
   sc=config.getServletContext();
   super.init();

} 
doPost()方法代码
public void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
   response.setCharacterEncoding("UTF-8");
   DiskFileItemFactory factory=new DiskFileItemFactory();
   ServletFileUpload file=new ServletFileUpload(factory);
try {
   List lst=file.parseRequest(request);
   Iterator it=lst.iterator();
   while(it.hasNext()){
    FileItem fileItem=(FileItem)it.next();
    if(fileItem.isFormField()){
     System.out.println("表单数据的 名称:"+fileItem.getFieldName()+
       "   表单数据的内容"+fileItem.getString("UTF-8"));
    }
    else{
     if(fileItem.getName()!=null&&!fileItem.getName().equals("")){
      System.out.println("上传文件的名称:"+fileItem.getName());
      System.out.println("上传文件的大小:"+fileItem.getSize());
      System.out.println("上传文件的类型:"+fileItem.getContentType());
      File tempFile=new File(fileItem.getName());
      File realFile=new File(sc.getRealPath("/")+savePath,tempFile.getName());
      try {
       fileItem.write(realFile);
       request.setAttribute("upLoad message","上传成功");
      } catch (Exception e) {
       request.setAttribute("upLoad message","上传失败");
       e.printStackTrace();
      }
     }
    }
   }
} catch (FileUploadException e) {
   request.setAttribute("upLoad message","上传失败");
   e.printStackTrace();
}
}

 

来自: http://hi.baidu.com/yaoweinan/blog/item/710f29f8c2206c2f4e4aea5f.html

 

如果遇到下面错误,那么解决办法是:

java.lang.ClassNotFoundException: org.apache.commons.io.output.DeferredFileOutputStream

 

 

简而言之,是因为当commons-fileupload包从版本1.0升到1.1时,DeferredFileOutputStream.class被移走了。如果Tomcat使用1.1及其以上版本,你得为它找到这个类。解决方法:          进入目录:$CATALINA/server/webapps/manager/WEB-INF/lib,检查是否存在三个包:                     commons-io                     catalina-manager.jar                     commons-fileupload.jar           如果缺少commons-io,拷一个过来。           或者直接使用老版本的commons-fileupload.jar

 

posted @ 2012-02-08 00:02 abin 阅读(1059) | 评论 (0)编辑 收藏

概述

       WAP2.0是1.2协议的升级版本。 WAP2.0 将通过促进下一代无线应用和终端的发展从而加快移动互联网的发展进程。以下是WAP2.0对无线互联网价值链上各环节的意义。

终端用户  WAP2.0是为加强WAP的实用性而设计的,迎合了市场的需求,并且适应了当前更高带宽、更快的数据传输速度、更强大的接入能力和不同的屏规格大小等最新的行业发展趋势。利用先进的网络和新增的服务功能,支持WAP2.0的终端将可以接入到各种基于互联网的内容、应用和服务,我们也可以将这视为从PC非常有价值的一个扩展。

开发商

  由于新的标准支持XHTML,这样开发商就可以利用公共的语言基础和开发工具编写PC和WAP客户通用的应用程序,从而缩减开发费用。XHTML的模结构同时也使得开发商在更短的时间更容易地构建能在硬件环境中适应变化的应用。

  通过CSS的应用,开发商可以把一个或多个XML文件中的风格属性从实际内容中分离出来,从而缩减贮存在浏览器记忆中标识语言代码的容量。

终端制造商

  终端制造商将可以借新技术开发的机会研发制造支持优化的WAP应用的手机终端。新手机的功能将可以包括彩色显示、多媒体信息、大容量文件的下载、改良的导航功能和友好的用户菜单等。

网络运营商

  WAP2.0将为移动网络运营商带来巨大的利益。网络商将利用WAP2.0的技术优势开发更加有吸引力的新服务。这些新服务将具备促进用户使用量的巨大潜力,为移动网络商在2.5G和3G网络中的投资带

  WAP2.0受到业界的广泛支持

  “GSM协会非常欢迎WAP2.0的标准协议,并且对WAP语言向 XHTML标识语言发展的方向表示赞许”, GSM协会的CEO--Rob Conway说,WAP标准持续发展的重要性不可忽略--WAP2.0将使发展商更加容易地在移动互联网上构建更加引人注目的移动应用。“WAP2.0的发布还将对移动商务的发展和普及进程带来重大的影响”。

  据悉,三大手机制造厂商Nokia、爱立信以及Motorola公司也声称将在下一代手机产品中支持最新版本的WAP协议。

技术的演变和WAP2.0带来的利益

  随着WAP日益向互联网规范的靠拢和融合,最新的版本WAP2.0将全面支持:XHTML,TCP/IP, 超文本传输协议 (HTTP/1.1), 和 传输层安全(TLS)。

  利用W3C开发的标准,WAP采用了XHTML 和 CSS作为WML2.0的一部分,以减少创建和测试为不同终端开发应用和操作内容所需要的时间。在协议层,WAP2.0采用了IETF以下的规范:在传输层,WAP2.0支持TCP/IP,实现在IP网络上传输数据的能力。在session层,WAP 2.0采用HTTP/1.1作为协定。此外,WAP2.0还加强了传输的安全性能,这包括TLS协议的采用,保证了更可靠的端到端安全,结合有线网络的安全措施,使得移动商务、移动银行应用和相关服务的提供变得更加安全可靠。

  对WAP2.0来说,可以显著提高用户体验的新技术主要包括数据同步功能、多媒体信息(MMS)、稳定的存储界面、Provisioning 以及 Pictograms。此外的WTA(Wireless Telephony Application )、push、和UAPROF (vser Agent Profile) 也将使WAP2.0具备比以往版本更加先进的功能。

功能和应用

  *WAP2.0的数据同步特色采用了SyncML协议,为不同的终端提供通用的解决方案框架--SyncML同时支持WSP(Wireless Session Protocol)和HTTP/1.1协议。

  *MMS为开发支持更丰富的信息服务提供了基础架构。基于MMS的信息服务将使短信更加的多采,更加趋向个性化。

  *稳定的存储界面为终端用户提供了一套完整的存储服务,包括在无线终端上的信息管理、接入、

  储存和获取。

  *“Provisioning”使得网络运营商可以通过一套通用的工具管理网络覆盖下的移动终端设备。

  *而“Pictogram”将允许一些小图象的传输,这是对传统的语言传送的一个跨越。

  *PUSH技术允许值得信任的应用服务器向终端用户发送个性化的内容,例如用户可能会感兴趣的打折销售信息、新邮件到达提醒、或者本地的促销信息。push 技术是对传统互联网“pull”模式的有效补足。

  *UAPROF使得应用服务器非常“聪明”地向用户发送适当的内容,并且可以自动识别终端的性能,譬如屏幕的大小和颜色、最大运行能力等,提高服务的人性化程度。

  *WTA提供了应用服务环境内先进的电话服务。当用户在进行数据操作时,可以非常方便地进行拨叫和应答电话、来电等待、来电转接等功能的操作。这些新服务的提供使运营商将可以为客户提供独特的用户操作界面去控制复杂的网络功能。

posted @ 2012-01-31 13:19 abin 阅读(353) | 评论 (0)编辑 收藏

1.hibernate的优缺点

1.sql语句不用写了,它使用时只需要操纵对象,使开发更对象化,为我们提高了生产力;

2.移植性会很好;

3.它实现了透明持久化,如POJO,这个对象没有实现第三方框架或者接口;

4.它没有侵入性,即所谓的轻量级框架;

5.对象之间有很清晰的关系 一般场合:

针对某一对象(单个对象)简单的查\改\删\增,不是批量修改、删除,适合用Hibernate;

而对于批量修改、删除,不适合用Hibernate,这也是OR框架的弱点;

要使用数据库的特定优化机制的时候,不适合用Hibernate



2.hibernate的工作原理

1.配置好hibernate的配置文件和与类对应的配置文件后,启动服务器

2.服务器通过实例化Configeration对象,读取hibernate.cfg.xml文件的配置内容,并根据相关的需求建好表或者和表建立好映射关系

3.通过实例化的Configeration对象就可以建立sessionFactory实例,进一步,通过sessionFactory实例可以创建 session对象

4.得到session之后,便可以对数据库进行增删改查操作了,除了比较复杂的全文搜索外,简单的操作都可以通过hibernate封装好的 session内置方法来实现

5.此外,还可以通过事物管理,表的关联来实现较为复杂的数据库设计

优点:hibernate相当于java类和数据库表之间沟通的桥梁,通过这座桥我们就可以做很多事情了





Hibernate 的初始化.

读取Hibernate 的配置信息-〉创建Session Factory

1)创建Configeration类的实例。

它的构造方法:将配置信息(Hibernate config.xml)读入到内存。

一个Configeration 实例代表Hibernate 所有Java类到Sql数据库映射的集合。

2)创建SessionFactory实例

把Configeration 对象中的所有配置信息拷贝到SessionFactory的缓存中。

SessionFactory的实例代表一个数据库存储员源,创建后不再与Configeration 对象关联。

缓存(cache):指Java对象的属性(通常是一些集合类型的属性--占用内存空间。

SessionFactory的缓存中:Hibernate 配置信息。OR映射元数据。 3)调用SessionFactory创建Session的方法

1】用户自行提供JDBC连接。

Connection con=dataSource.getConnection();

Session s=sessionFactory.openSession(con);

2】让SessionFactory提供连接

Session s=sessionFactory.openSession();

4)通过Session 接口提供的各种方法来操纵数据库访问。

Hibernate 的缓存体系 一级缓存:

Session 有一个内置的缓存,其中存放了被当前工作单元加载的对象。

每个Session 都有自己独立的缓存,且只能被当前工作单元访问。 SessionFactory的外置的可插拔的缓存插件。其中的数据可被多个Session共享访问。

SessionFactory的内置缓存:存放了映射元数据,预定义的Sql语句。 Hibernate 中Java对象的状态

1.临时状态 (transient) 1】不处于Session 缓存中

2】数据库中没有对象记录

Java如何进入临时状态

1】通过new语句刚创建一个对象时

2】当调用Session 的delete()方法,从Session 缓存中删除一个对象时。 2.持久化状态(persisted) 1】处于Session 缓存中

2】持久化对象数据库中设有对象记录

3】Session 在特定时刻会保持二者同步

Java如何进入持久化状态

1】Session 的save()把临时-》持久化状态

2】Session 的load(),get()方法返回的对象

3】Session 的find()返回的list集合中存放的对象

4】Session 的update(),saveOrupdate()使游离-》持久化

3.游离状态(detached) 1】不再位于Session 缓存中

2】游离对象由持久化状态转变而来,数据库中可能还有对应记录。

Java如何进入持久化状态-》游离状态

1】Session 的close()方法

2】Session 的evict()方法,从缓存中删除一个对象。提高性能。少用。

2.异常的种类运行时异常是系统运行时发出的异常,程序员控制不了的,这类异常不需要try,catch和throws exception语句,是由java虚拟机抛出的,并且自动捕获抛出的main方法 中,我们 不能对这个异常进行处理,它会直接终止程序。一般遇到的就是空指针异常,数组越界异常等,这些异常一般是我们可以在前台控制台可以看到的,相信你也看到过吧。 受检测异 常指的就是我们可以处理的异常,我们可以通过try catch语句捕获并且处理(也可以不处理直接向上层抛出),处理之后程序还可以继续执行,不会终止程序,如果每一 层都每一 处理,则会终止程序。

4.hibernate的缓存机制一级缓存 指的是session(对数据进行增删查改)

二级缓存 值的是sessionfactory,对一些数据库进行变化的时候 主要是为了减少资源浪费,对一些不经常改变的数据进行缓存,select * from 这种的语句就是为了减少无谓的浪费资源
posted @ 2012-01-31 10:04 abin 阅读(330) | 评论 (0)编辑 收藏

     摘要:   接口选择:  osworkflow提供几种实现com.opensymphony.workflow.Workflow接口的类。     BasicWorkflow:  不提供事务支持,你可以通过持久层来实现事务处理。  Workflow wf = new BasicWorkflow(username)  这里的username是用来关联当前请求的用户。     EJ...  阅读全文
posted @ 2011-12-27 12:40 abin 阅读(1501) | 评论 (0)编辑 收藏

//web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaeehttp://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
  <display-name>struts</display-name>
 
  <servlet>
    <servlet-name>action</servlet-name>
    <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
    <init-param>
      <param-name>config</param-name>
      <param-value>/WEB-INF/classes/struts-config.xml</param-value>
    </init-param>
    <init-param>
      <param-name>debug</param-name>
      <param-value>3</param-value>
    </init-param>
    <init-param>
      <param-name>detail</param-name>
      <param-value>3</param-value>
    </init-param>
    <load-on-startup>0</load-on-startup>
  </servlet>
 
   <servlet-mapping>
     <servlet-name>action</servlet-name>
     <url-pattern>*.do</url-pattern>
   </servlet-mapping>
 
 <!--  
   <jsp-config>
    <taglib>
     <taglib-uri>/WEB-INF/struts-html</taglib-uri>
     <taglib-location>WEB-INF/struts-html.tld</taglib-location>
    </taglib>
    <taglib>
     <taglib-uri>/WEB-INF/struts-bean</taglib-uri>
     <taglib-location>WEB-INF/struts-bean.tld</taglib-location> 
    </taglib> 
    <taglib>
     <taglib-uri>/WEB-INF/struts-logic</taglib-uri>
     <taglib-location>WEB-INF/struts-logic.tld</taglib-location>
    </taglib> 
   
   </jsp-config>
  -->  
 
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
</web-app>

 

 

//struts-config.xml这个放置在src目录下面

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.3//EN" "http://struts.apache.org/dtds/struts-config_1_3.dtd">

<struts-config>
  <form-beans >
    <form-bean name="userForm" type="com.abin.struts1.form.UserForm" ></form-bean>
  </form-beans>
  <global-exceptions />
  <global-forwards />
  <action-mappings >
    <action
      path="/userAction"
      type="com.abin.struts1.action.UserAction"
      name="userForm"
      parameter="method"
      scope="request"
      validate="true"
      input="/add.jsp"
      >
      <forward name="add" path="/index.jsp"/>
   </action>
  </action-mappings>
  <message-resources parameter="com.yourcompany.struts.ApplicationResources" />
</struts-config>

 

 

 

//UserAction.java

package com.abin.struts1.action;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.actions.DispatchAction;

import com.abin.struts1.form.UserForm;

public class UserAction extends DispatchAction {

 public ActionForward user(ActionMapping mapping, ActionForm form,
   HttpServletRequest request, HttpServletResponse arg3) throws Exception {
  UserForm userForm = (UserForm) form;
  String un = userForm.getUsername();
  String pw = userForm.getPassword();
  
  System.out.println("username="+un);
  System.out.println("password="+pw);
  
  return mapping.findForward("add");
 }

}

 

 

//UserForm.java

package com.abin.struts1.form;

import org.apache.struts.action.ActionForm;

public class UserForm extends ActionForm{
 private int id;
 private String username;
 private String password;
 
 public int getId() {
  return id;
 }
 public void setId(int id) {
  this.id = id;
 }
 public String getUsername() {
  return username;
 }
 public void setUsername(String username) {
  this.username = username;
 }
 public String getPassword() {
  return password;
 }
 public void setPassword(String password) {
  this.password = password;
 }
 
 
}

 

 

//index.jsp这个放置在WebContent下面(我这里使用的eclipse,如果是Myeclipse就直接放置在WebRoot下面)

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>struts1.3 test</title>
</head>
<body>
 <a href="add.jsp" target="_blank" >新增</a>
</body>
</html>

 

 

//add.jsp这个放置在WebContent下面(我这里使用的eclipse,如果是Myeclipse就直接放置在WebRoot下面)

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>struts1.3 test</title>
</head>
<body>
 <form action="userAction.do" method="post">
  <input type="hidden" name="method" value="user" />
  用户名:<br/>
  <input type="text" name="username" id="username" /><br/>
  密码:<br/>
  <input type="text" name="password" id="password" /><br/>
  <input type="submit" value="提交" />
  <input type="reset" value="重置"/>
 
 </form>
</body>
</html>

posted @ 2011-12-24 21:50 abin 阅读(1050) | 评论 (0)编辑 收藏

function CreateXmlRequest(){
 var xmlHttp=null;
 if(window.XMLHttpRequest){
  xmlHttp=new XMLHttpRequest();
 }else if(window.ActiveXObject){
  try {
   xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
  } catch (e) {
   try {
    xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
   } catch (failed) {
    xmlHttp=false;
   }
  }
  
 }
 return xmlHttp;
}

function CreateAdd(){
 var username=document.getElementById("username").value;
 var password=document.getElementById("password").value;
 alert("password="+password)
 var request=CreateXmlRequest();
 if(!request){
  document.getElementById("show").innerHTML="当前浏览器不支持javascript";
 }else{
  var content="username="+username+"&password="+password;
  request.open("post","addObj",false);
  request.setRequestHeader("Content-type","application/x-www-form-urlencoded");
  request.send(content);
  request.onreadystatechange=function(){
   if(request.readyState==4){
    document.getElementById("show").innerHTML="loading...";
    if(request.status==200){
     var result=request.responseText;
     alert(result)
     if(result=="add"){
      document.getElementById("show").innerHTML="增加成功";
     }else if(result=="notadd"){
      document.getElementById("show").innerHTML="增加失败";
     }
    }
    
   }
  }
  
  
  
  document.getElementById("show").innerHTML="";
 }
}

posted @ 2011-12-24 17:04 abin 阅读(752) | 评论 (0)编辑 收藏

1、struts2代码:

Map session=ActionContext.getContext().getSession();

List<User> list=userServiceImpl.listUser();
session.put("list", list);

//list.jsp

<s:iterator value="#session.list" id="li" status="st" var="x">
   用户名:<s:property value="username"/>---
   密码:<s:property value="password"/>---

<a href="update.jsp?id=<s:property value='id' />" href="_blank">修改</a>

<br/>
  </s:iterator>

 

2、struts2代码

HttpServletRequest request=ServletActionContext.getRequest();

List<User> list=userServiceImpl.listUser();
request.setAttribute("list", list);

//list.jsp

 <s:iterator value="#request.list" id="li" status="st" var="x">
   用户名:<s:property value="username"/>---
   密码:<s:property value="password"/>---

<a href="update.jsp?id=<s:property value='id' />" href="_blank">修改</a>

<br/>
  </s:iterator>

 

3、struts2代码:

Map session=ActionContext.getContext().getSession();

List<User> list=userServiceImpl.listUser();
session.put("list", list);

//list.jsp

<s:iterator value="#session.list" id="li" status="st" var="lee">
   用户名:<s:property value="#lee.username"/>---
   密码:<s:property value="#lee.password"/>---

<a href="update.jsp?id=<s:property value='#lee.id' />" href="_blank">修改</a>

<br/>
  </s:iterator>

 

4、struts2代码

HttpServletRequest request=ServletActionContext.getRequest();

List<User> list=userServiceImpl.listUser();
request.setAttribute("list", list);

//list.jsp

 <s:iterator value="#request.list" id="li" status="st" var="lee">
   用户名:<s:property value="#lee.username"/>---
   密码:<s:property value="#lee.password"/>---

<a href="update.jsp?id=<s:property value='#lee.id' />" href="_blank">修改</a>

<br/>
  </s:iterator>

posted @ 2011-12-24 00:48 abin 阅读(2999) | 评论 (0)编辑 收藏

仅列出标题
共50页: First 上一页 42 43 44 45 46 47 48 49 50 下一页