少年阿賓

          那些青春的歲月

            BlogJava :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
            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下載的時(shí)候需要解析header里面頭文件,所以費(fèi)時(shí)
           * 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 閱讀(2744) | 評論 (1)編輯 收藏

          郵件的回復(fù)的代碼很簡單,在迭代郵件的信息的時(shí)候調(diào)用MimeMessage reply = (MimeMessage) messages[i].reply(Boolean )  TRUE 是郵件回復(fù)給發(fā)送者,F(xiàn)ALSE恢復(fù)給所有人。如果要回復(fù)到新的收件人請使用SetReply-to。
          同時(shí)可以使用 reply.setSubject(“***”)設(shè)置回復(fù)的標(biāo)題,不設(shè)置的話默認(rèn)是Re: 加上接收到郵件的標(biāo)題。同理,也可以自己設(shè)置正文內(nèi)容。
          這里一定要設(shè)置發(fā)送郵件的地址,而且必須要和郵件認(rèn)證的用戶名一致,不然會報(bào)錯(cuò)。
          最后調(diào)用Transport.send(reply)將郵件發(fā)出去
          注意:1、reply.setFrom() 必須要設(shè)置而且要和郵件認(rèn)證的用戶名一致,不然會報(bào)以下錯(cuò)誤:
          com.sun.mail.smtp.SMTPSendFailedException: 501 mail from address must be same as authorization user
          2、建議使用郵件認(rèn)證登陸郵件服務(wù)器,不然會出現(xiàn)以下錯(cuò)誤:
          javax.mail.AuthenticationFailedException: failed to connect, no password specified?
          3、代碼雖然很簡單,但是程序難免會出現(xiàn)各種異常。如果大家在調(diào)試程序的時(shí)候出現(xiàn)錯(cuò)誤,請給我留言。



          給一個(gè)成功例子大家參考:.

          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 + "個(gè):" + 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("這是回復(fù)郵件,不知道能否成功!"); 
                           replyMessage.saveChanges();
                           Transport transport = session.getTransport("smtp");
                           transport.connect(SEND_HOST_NAME,  USER_NAME, PASSWORD);
                           transport.send(replyMessage);
                           System.out.println("回復(fù)成功");               
                       }  
                   }
                   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 閱讀(2038) | 評論 (0)編輯 收藏

          Mysql數(shù)據(jù)庫建表語句:

          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驅(qū)動,要不會報(bào)錯(cuò)的

          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("表單數(shù)據(jù)的名稱是:" + fileItem.getFieldName()

          + ":表單的內(nèi)容是:" + 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">

             標(biāo)題:<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 閱讀(958) | 評論 (0)編輯 收藏

          準(zhǔn)備工作:要到http://commons.apache.org/fileupload/download_fileupload.cgi下載上傳文件需要的組件類庫并且到
          http://commons.apache.org/io/download_io.cgi上下載其IO組件,再有了這兩個(gè)組件之后我們就可以編寫一個(gè)上傳的Servlet程序了。
          1.建立一個(gè)jsp文件里面有文件域,能夠提交給要處理數(shù)據(jù)的servlet程序的映射路徑,form標(biāo)簽中有enctype="multipart/form-data"這條屬性。
          2.然后我們新建一個(gè)處理該P(yáng)ost方法的servlet程序,設(shè)置映射路徑為jsp文件中對應(yīng)的映射路徑,讓后,我們修改配置文件,在servlet啟動時(shí),添加一條屬性,是存放文件的目錄。
          3.在servlet init()方法里讀取項(xiàng)目路徑和上傳文件存放目錄,然后編寫doPost()方法。具體如下:
          第一、在init()方法中利用config取得保存路徑和工程文件位置。
          第二、在doPost方法中實(shí)現(xiàn)上傳的數(shù)據(jù)處理。首先需要設(shè)置一下數(shù)據(jù)的編碼格式response.setCharacterEncoding("UTF-8");,以防下面出現(xiàn)亂碼現(xiàn)象。然后,創(chuàng)建一個(gè)DiskFileItemFactory對象factory,再用ServletFileUpload類創(chuàng)建一個(gè)對象file,將factory對象包裝起來,再用file的parseRequest()方法接收request的數(shù)據(jù),放入List對象lst中,用迭代器it接收遍歷file內(nèi)容,用FileItem對象fileItem循環(huán)接收,讀取數(shù)據(jù),用fileItem的isFormField()方法判斷是否是上傳文件還是表單數(shù)據(jù)項(xiàng),如果是上傳文件,那么我們先需要?jiǎng)?chuàng)建一個(gè)tempFile對象,利用其getName()方法獲得文件除了路徑外的真實(shí)名稱,再用init()方法獲得的ServletContent對象獲得工程的路徑(sc.getRealPath("/")),加上獲得的保存目錄,構(gòu)成上傳文件的具體目錄,在新建一個(gè)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("表單數(shù)據(jù)的 名稱:"+fileItem.getFieldName()+
                 "   表單數(shù)據(jù)的內(nèi)容"+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

           

          如果遇到下面錯(cuò)誤,那么解決辦法是:

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

           

           

          簡而言之,是因?yàn)楫?dāng)commons-fileupload包從版本1.0升到1.1時(shí),DeferredFileOutputStream.class被移走了。如果Tomcat使用1.1及其以上版本,你得為它找到這個(gè)類。解決方法:          進(jìn)入目錄:$CATALINA/server/webapps/manager/WEB-INF/lib,檢查是否存在三個(gè)包:                     commons-io                     catalina-manager.jar                     commons-fileupload.jar           如果缺少commons-io,拷一個(gè)過來。           或者直接使用老版本的commons-fileupload.jar

           

          posted @ 2012-02-08 00:02 abin 閱讀(1094) | 評論 (0)編輯 收藏

          概述

                 WAP2.0是1.2協(xié)議的升級版本。 WAP2.0 將通過促進(jìn)下一代無線應(yīng)用和終端的發(fā)展從而加快移動互聯(lián)網(wǎng)的發(fā)展進(jìn)程。以下是WAP2.0對無線互聯(lián)網(wǎng)價(jià)值鏈上各環(huán)節(jié)的意義。

          終端用戶  WAP2.0是為加強(qiáng)WAP的實(shí)用性而設(shè)計(jì)的,迎合了市場的需求,并且適應(yīng)了當(dāng)前更高帶寬、更快的數(shù)據(jù)傳輸速度、更強(qiáng)大的接入能力和不同的屏規(guī)格大小等最新的行業(yè)發(fā)展趨勢。利用先進(jìn)的網(wǎng)絡(luò)和新增的服務(wù)功能,支持WAP2.0的終端將可以接入到各種基于互聯(lián)網(wǎng)的內(nèi)容、應(yīng)用和服務(wù),我們也可以將這視為從PC非常有價(jià)值的一個(gè)擴(kuò)展。

          開發(fā)商

            由于新的標(biāo)準(zhǔn)支持XHTML,這樣開發(fā)商就可以利用公共的語言基礎(chǔ)和開發(fā)工具編寫PC和WAP客戶通用的應(yīng)用程序,從而縮減開發(fā)費(fèi)用。XHTML的模結(jié)構(gòu)同時(shí)也使得開發(fā)商在更短的時(shí)間更容易地構(gòu)建能在硬件環(huán)境中適應(yīng)變化的應(yīng)用。

            通過CSS的應(yīng)用,開發(fā)商可以把一個(gè)或多個(gè)XML文件中的風(fēng)格屬性從實(shí)際內(nèi)容中分離出來,從而縮減貯存在瀏覽器記憶中標(biāo)識語言代碼的容量。

          終端制造商

            終端制造商將可以借新技術(shù)開發(fā)的機(jī)會研發(fā)制造支持優(yōu)化的WAP應(yīng)用的手機(jī)終端。新手機(jī)的功能將可以包括彩色顯示、多媒體信息、大容量文件的下載、改良的導(dǎo)航功能和友好的用戶菜單等。

          網(wǎng)絡(luò)運(yùn)營商

            WAP2.0將為移動網(wǎng)絡(luò)運(yùn)營商帶來巨大的利益。網(wǎng)絡(luò)商將利用WAP2.0的技術(shù)優(yōu)勢開發(fā)更加有吸引力的新服務(wù)。這些新服務(wù)將具備促進(jìn)用戶使用量的巨大潛力,為移動網(wǎng)絡(luò)商在2.5G和3G網(wǎng)絡(luò)中的投資帶

            WAP2.0受到業(yè)界的廣泛支持

            “GSM協(xié)會非常歡迎WAP2.0的標(biāo)準(zhǔn)協(xié)議,并且對WAP語言向 XHTML標(biāo)識語言發(fā)展的方向表示贊許”, GSM協(xié)會的CEO--Rob Conway說,WAP標(biāo)準(zhǔn)持續(xù)發(fā)展的重要性不可忽略--WAP2.0將使發(fā)展商更加容易地在移動互聯(lián)網(wǎng)上構(gòu)建更加引人注目的移動應(yīng)用。“WAP2.0的發(fā)布還將對移動商務(wù)的發(fā)展和普及進(jìn)程帶來重大的影響”。

            據(jù)悉,三大手機(jī)制造廠商N(yùn)okia、愛立信以及Motorola公司也聲稱將在下一代手機(jī)產(chǎn)品中支持最新版本的WAP協(xié)議。

          技術(shù)的演變和WAP2.0帶來的利益

            隨著WAP日益向互聯(lián)網(wǎng)規(guī)范的靠攏和融合,最新的版本W(wǎng)AP2.0將全面支持:XHTML,TCP/IP, 超文本傳輸協(xié)議 (HTTP/1.1), 和 傳輸層安全(TLS)。

            利用W3C開發(fā)的標(biāo)準(zhǔn),WAP采用了XHTML 和 CSS作為WML2.0的一部分,以減少創(chuàng)建和測試為不同終端開發(fā)應(yīng)用和操作內(nèi)容所需要的時(shí)間。在協(xié)議層,WAP2.0采用了IETF以下的規(guī)范:在傳輸層,WAP2.0支持TCP/IP,實(shí)現(xiàn)在IP網(wǎng)絡(luò)上傳輸數(shù)據(jù)的能力。在session層,WAP 2.0采用HTTP/1.1作為協(xié)定。此外,WAP2.0還加強(qiáng)了傳輸?shù)陌踩阅埽@包括TLS協(xié)議的采用,保證了更可靠的端到端安全,結(jié)合有線網(wǎng)絡(luò)的安全措施,使得移動商務(wù)、移動銀行應(yīng)用和相關(guān)服務(wù)的提供變得更加安全可靠。

            對WAP2.0來說,可以顯著提高用戶體驗(yàn)的新技術(shù)主要包括數(shù)據(jù)同步功能、多媒體信息(MMS)、穩(wěn)定的存儲界面、Provisioning 以及 Pictograms。此外的WTA(Wireless Telephony Application )、push、和UAPROF (vser Agent Profile) 也將使WAP2.0具備比以往版本更加先進(jìn)的功能。

          功能和應(yīng)用

            *WAP2.0的數(shù)據(jù)同步特色采用了SyncML協(xié)議,為不同的終端提供通用的解決方案框架--SyncML同時(shí)支持WSP(Wireless Session Protocol)和HTTP/1.1協(xié)議。

            *MMS為開發(fā)支持更豐富的信息服務(wù)提供了基礎(chǔ)架構(gòu)。基于MMS的信息服務(wù)將使短信更加的多采,更加趨向個(gè)性化。

            *穩(wěn)定的存儲界面為終端用戶提供了一套完整的存儲服務(wù),包括在無線終端上的信息管理、接入、

            儲存和獲取。

            *“Provisioning”使得網(wǎng)絡(luò)運(yùn)營商可以通過一套通用的工具管理網(wǎng)絡(luò)覆蓋下的移動終端設(shè)備。

            *而“Pictogram”將允許一些小圖象的傳輸,這是對傳統(tǒng)的語言傳送的一個(gè)跨越。

            *PUSH技術(shù)允許值得信任的應(yīng)用服務(wù)器向終端用戶發(fā)送個(gè)性化的內(nèi)容,例如用戶可能會感興趣的打折銷售信息、新郵件到達(dá)提醒、或者本地的促銷信息。push 技術(shù)是對傳統(tǒng)互聯(lián)網(wǎng)“pull”模式的有效補(bǔ)足。

            *UAPROF使得應(yīng)用服務(wù)器非常“聰明”地向用戶發(fā)送適當(dāng)?shù)膬?nèi)容,并且可以自動識別終端的性能,譬如屏幕的大小和顏色、最大運(yùn)行能力等,提高服務(wù)的人性化程度。

            *WTA提供了應(yīng)用服務(wù)環(huán)境內(nèi)先進(jìn)的電話服務(wù)。當(dāng)用戶在進(jìn)行數(shù)據(jù)操作時(shí),可以非常方便地進(jìn)行撥叫和應(yīng)答電話、來電等待、來電轉(zhuǎn)接等功能的操作。這些新服務(wù)的提供使運(yùn)營商將可以為客戶提供獨(dú)特的用戶操作界面去控制復(fù)雜的網(wǎng)絡(luò)功能。

          posted @ 2012-01-31 13:19 abin 閱讀(359) | 評論 (0)編輯 收藏

          1.hibernate的優(yōu)缺點(diǎn)

          1.sql語句不用寫了,它使用時(shí)只需要操縱對象,使開發(fā)更對象化,為我們提高了生產(chǎn)力;

          2.移植性會很好;

          3.它實(shí)現(xiàn)了透明持久化,如POJO,這個(gè)對象沒有實(shí)現(xiàn)第三方框架或者接口;

          4.它沒有侵入性,即所謂的輕量級框架;

          5.對象之間有很清晰的關(guān)系 一般場合:

          針對某一對象(單個(gè)對象)簡單的查\改\刪\增,不是批量修改、刪除,適合用Hibernate;

          而對于批量修改、刪除,不適合用Hibernate,這也是OR框架的弱點(diǎn);

          要使用數(shù)據(jù)庫的特定優(yōu)化機(jī)制的時(shí)候,不適合用Hibernate



          2.hibernate的工作原理

          1.配置好hibernate的配置文件和與類對應(yīng)的配置文件后,啟動服務(wù)器

          2.服務(wù)器通過實(shí)例化Configeration對象,讀取hibernate.cfg.xml文件的配置內(nèi)容,并根據(jù)相關(guān)的需求建好表或者和表建立好映射關(guān)系

          3.通過實(shí)例化的Configeration對象就可以建立sessionFactory實(shí)例,進(jìn)一步,通過sessionFactory實(shí)例可以創(chuàng)建 session對象

          4.得到session之后,便可以對數(shù)據(jù)庫進(jìn)行增刪改查操作了,除了比較復(fù)雜的全文搜索外,簡單的操作都可以通過hibernate封裝好的 session內(nèi)置方法來實(shí)現(xiàn)

          5.此外,還可以通過事物管理,表的關(guān)聯(lián)來實(shí)現(xiàn)較為復(fù)雜的數(shù)據(jù)庫設(shè)計(jì)

          優(yōu)點(diǎn):hibernate相當(dāng)于java類和數(shù)據(jù)庫表之間溝通的橋梁,通過這座橋我們就可以做很多事情了





          Hibernate 的初始化.

          讀取Hibernate 的配置信息-〉創(chuàng)建Session Factory

          1)創(chuàng)建Configeration類的實(shí)例。

          它的構(gòu)造方法:將配置信息(Hibernate config.xml)讀入到內(nèi)存。

          一個(gè)Configeration 實(shí)例代表Hibernate 所有Java類到Sql數(shù)據(jù)庫映射的集合。

          2)創(chuàng)建SessionFactory實(shí)例

          把Configeration 對象中的所有配置信息拷貝到SessionFactory的緩存中。

          SessionFactory的實(shí)例代表一個(gè)數(shù)據(jù)庫存儲員源,創(chuàng)建后不再與Configeration 對象關(guān)聯(lián)。

          緩存(cache):指Java對象的屬性(通常是一些集合類型的屬性--占用內(nèi)存空間。

          SessionFactory的緩存中:Hibernate 配置信息。OR映射元數(shù)據(jù)。 3)調(diào)用SessionFactory創(chuàng)建Session的方法

          1】用戶自行提供JDBC連接。

          Connection con=dataSource.getConnection();

          Session s=sessionFactory.openSession(con);

          2】讓SessionFactory提供連接

          Session s=sessionFactory.openSession();

          4)通過Session 接口提供的各種方法來操縱數(shù)據(jù)庫訪問。

          Hibernate 的緩存體系 一級緩存:

          Session 有一個(gè)內(nèi)置的緩存,其中存放了被當(dāng)前工作單元加載的對象。

          每個(gè)Session 都有自己獨(dú)立的緩存,且只能被當(dāng)前工作單元訪問。 SessionFactory的外置的可插拔的緩存插件。其中的數(shù)據(jù)可被多個(gè)Session共享訪問。

          SessionFactory的內(nèi)置緩存:存放了映射元數(shù)據(jù),預(yù)定義的Sql語句。 Hibernate 中Java對象的狀態(tài)

          1.臨時(shí)狀態(tài) (transient) 1】不處于Session 緩存中

          2】數(shù)據(jù)庫中沒有對象記錄

          Java如何進(jìn)入臨時(shí)狀態(tài)

          1】通過new語句剛創(chuàng)建一個(gè)對象時(shí)

          2】當(dāng)調(diào)用Session 的delete()方法,從Session 緩存中刪除一個(gè)對象時(shí)。 2.持久化狀態(tài)(persisted) 1】處于Session 緩存中

          2】持久化對象數(shù)據(jù)庫中設(shè)有對象記錄

          3】Session 在特定時(shí)刻會保持二者同步

          Java如何進(jìn)入持久化狀態(tài)

          1】Session 的save()把臨時(shí)-》持久化狀態(tài)

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

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

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

          3.游離狀態(tài)(detached) 1】不再位于Session 緩存中

          2】游離對象由持久化狀態(tài)轉(zhuǎn)變而來,數(shù)據(jù)庫中可能還有對應(yīng)記錄。

          Java如何進(jìn)入持久化狀態(tài)-》游離狀態(tài)

          1】Session 的close()方法

          2】Session 的evict()方法,從緩存中刪除一個(gè)對象。提高性能。少用。

          2.異常的種類運(yùn)行時(shí)異常是系統(tǒng)運(yùn)行時(shí)發(fā)出的異常,程序員控制不了的,這類異常不需要try,catch和throws exception語句,是由java虛擬機(jī)拋出的,并且自動捕獲拋出的main方法 中,我們 不能對這個(gè)異常進(jìn)行處理,它會直接終止程序。一般遇到的就是空指針異常,數(shù)組越界異常等,這些異常一般是我們可以在前臺控制臺可以看到的,相信你也看到過吧。 受檢測異 常指的就是我們可以處理的異常,我們可以通過try catch語句捕獲并且處理(也可以不處理直接向上層拋出),處理之后程序還可以繼續(xù)執(zhí)行,不會終止程序,如果每一 層都每一 處理,則會終止程序。

          4.hibernate的緩存機(jī)制一級緩存 指的是session(對數(shù)據(jù)進(jìn)行增刪查改)

          二級緩存 值的是sessionfactory,對一些數(shù)據(jù)庫進(jìn)行變化的時(shí)候 主要是為了減少資源浪費(fèi),對一些不經(jīng)常改變的數(shù)據(jù)進(jìn)行緩存,select * from 這種的語句就是為了減少無謂的浪費(fèi)資源
          posted @ 2012-01-31 10:04 abin 閱讀(335) | 評論 (0)編輯 收藏

               摘要:   接口選擇:  osworkflow提供幾種實(shí)現(xiàn)com.opensymphony.workflow.Workflow接口的類。     BasicWorkflow:  不提供事務(wù)支持,你可以通過持久層來實(shí)現(xiàn)事務(wù)處理。  Workflow wf = new BasicWorkflow(username)  這里的username是用來關(guān)聯(lián)當(dāng)前請求的用戶。     EJ...  閱讀全文
          posted @ 2011-12-27 12:40 abin 閱讀(1524) | 評論 (0)編輯 收藏

          //web.xml

          <?xml version="1.0" encoding="UTF-8"?>
          <web-app xmlns:xsi="  <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這個(gè)放置在src目錄下面

          <?xml version="1.0" encoding="UTF-8"?>
          <!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.3//EN" "

          <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這個(gè)放置在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" "
          <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這個(gè)放置在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" "
          <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>


          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="當(dāng)前瀏覽器不支持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 閱讀(776) | 評論 (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 閱讀(3003) | 評論 (0)編輯 收藏

          僅列出標(biāo)題
          共50頁: First 上一頁 42 43 44 45 46 47 48 49 50 下一頁 
          主站蜘蛛池模板: 拉萨市| 会理县| 西乌| 阜平县| 青冈县| 贺兰县| 娄底市| 台湾省| 阆中市| 康乐县| 门头沟区| 永丰县| 德阳市| 蕲春县| 饶平县| 武穴市| 岳阳县| 桓台县| 伊金霍洛旗| 建平县| 彰化市| 长武县| 嘉鱼县| 丽水市| 吴江市| 广西| 营山县| 赤峰市| 平南县| 荃湾区| 九江市| 陇南市| 亳州市| 南宁市| 元氏县| 方正县| 大邑县| 美姑县| 兴文县| 淳化县| 白朗县|