<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    少年阿賓

    那些青春的歲月

      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 閱讀(2746) | 評(píng)論 (1)編輯 收藏

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



    給一個(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 閱讀(2040) | 評(píng)論 (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ū)動(dòng),要不會(huì)報(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/>

       請(qǐng)選擇您要上傳的圖片:<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) | 評(píng)論 (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文件中對(duì)應(yīng)的映射路徑,讓后,我們修改配置文件,在servlet啟動(dòng)時(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對(duì)象factory,再用ServletFileUpload類創(chuàng)建一個(gè)對(duì)象file,將factory對(duì)象包裝起來,再用file的parseRequest()方法接收request的數(shù)據(jù),放入List對(duì)象lst中,用迭代器it接收遍歷file內(nèi)容,用FileItem對(duì)象fileItem循環(huán)接收,讀取數(shù)據(jù),用fileItem的isFormField()方法判斷是否是上傳文件還是表單數(shù)據(jù)項(xiàng),如果是上傳文件,那么我們先需要?jiǎng)?chuàng)建一個(gè)tempFile對(duì)象,利用其getName()方法獲得文件除了路徑外的真實(shí)名稱,再用init()方法獲得的ServletContent對(duì)象獲得工程的路徑(sc.getRealPath("/")),加上獲得的保存目錄,構(gòu)成上傳文件的具體目錄,在新建一個(gè)File對(duì)象,利用已得到的文件完全路徑建立新對(duì)象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

     

     

    簡(jiǎn)而言之,是因?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) | 評(píng)論 (0)編輯 收藏

    概述

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

    終端用戶  WAP2.0是為加強(qiáng)WAP的實(shí)用性而設(shè)計(jì)的,迎合了市場(chǎng)的需求,并且適應(yīng)了當(dāng)前更高帶寬、更快的數(shù)據(jù)傳輸速度、更強(qiáng)大的接入能力和不同的屏規(guī)格大小等最新的行業(yè)發(fā)展趨勢(shì)。利用先進(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í)語言代碼的容量。

    終端制造商

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

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

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

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

      “GSM協(xié)會(huì)非常歡迎WAP2.0的標(biāo)準(zhǔn)協(xié)議,并且對(duì)WAP語言向 XHTML標(biāo)識(shí)語言發(fā)展的方向表示贊許”, GSM協(xié)會(huì)的CEO--Rob Conway說,WAP標(biāo)準(zhǔn)持續(xù)發(fā)展的重要性不可忽略--WAP2.0將使發(fā)展商更加容易地在移動(dòng)互聯(lián)網(wǎng)上構(gòu)建更加引人注目的移動(dòng)應(yīng)用。“WAP2.0的發(fā)布還將對(duì)移動(dòng)商務(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)建和測(cè)試為不同終端開發(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ò)的安全措施,使得移動(dòng)商務(wù)、移動(dòng)銀行應(yīng)用和相關(guān)服務(wù)的提供變得更加安全可靠。

      對(duì)WAP2.0來說,可以顯著提高用戶體驗(yàn)的新技術(shù)主要包括數(shù)據(jù)同步功能、多媒體信息(MMS)、穩(wěn)定的存儲(chǔ)界面、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)定的存儲(chǔ)界面為終端用戶提供了一套完整的存儲(chǔ)服務(wù),包括在無線終端上的信息管理、接入、

      儲(chǔ)存和獲取。

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

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

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

      *UAPROF使得應(yīng)用服務(wù)器非常“聰明”地向用戶發(fā)送適當(dāng)?shù)膬?nèi)容,并且可以自動(dòng)識(shí)別終端的性能,譬如屏幕的大小和顏色、最大運(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)營(yíng)商將可以為客戶提供獨(dú)特的用戶操作界面去控制復(fù)雜的網(wǎng)絡(luò)功能。

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

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

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

    2.移植性會(huì)很好;

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

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

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

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

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

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



    2.hibernate的工作原理

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

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

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

    4.得到session之后,便可以對(duì)數(shù)據(jù)庫進(jìn)行增刪改查操作了,除了比較復(fù)雜的全文搜索外,簡(jiǎn)單的操作都可以通過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 對(duì)象中的所有配置信息拷貝到SessionFactory的緩存中。

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

    緩存(cache):指Java對(duì)象的屬性(通常是一些集合類型的屬性--占用內(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 的緩存體系 一級(jí)緩存:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    1】Session 的close()方法

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

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

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

    二級(jí)緩存 值的是sessionfactory,對(duì)一些數(shù)據(jù)庫進(jìn)行變化的時(shí)候 主要是為了減少資源浪費(fèi),對(duì)一些不經(jīng)常改變的數(shù)據(jù)進(jìn)行緩存,select * from 這種的語句就是為了減少無謂的浪費(fèi)資源
    posted @ 2012-01-31 10:04 abin 閱讀(335) | 評(píng)論 (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)前請(qǐng)求的用戶。     EJ...  閱讀全文
    posted @ 2011-12-27 12:40 abin 閱讀(1524) | 評(píng)論 (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 閱讀(779) | 評(píng)論 (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) | 評(píng)論 (0)編輯 收藏

    僅列出標(biāo)題
    共50頁: First 上一頁 42 43 44 45 46 47 48 49 50 下一頁 
    主站蜘蛛池模板: 18禁亚洲深夜福利人口| 亚洲AⅤ无码一区二区三区在线 | 亚洲国产一成人久久精品| 亚洲成aⅴ人片久青草影院按摩| 台湾一级毛片永久免费 | 亚洲欧洲日韩国产一区二区三区| 男人进去女人爽免费视频国产 | 又大又硬又爽免费视频| 男男gvh肉在线观看免费| 国产免费直播在线观看视频| 成人亚洲国产精品久久| 免费无遮挡无码视频网站| 亚洲成熟丰满熟妇高潮XXXXX| 日韩在线免费看网站| 亚洲国产欧美国产综合一区 | 亚洲尤码不卡AV麻豆| 国产性生大片免费观看性| 亚洲av永久无码制服河南实里| 国产精品免费无遮挡无码永久视频 | 18禁免费无码无遮挡不卡网站| 亚洲成人福利在线观看| 久久久www成人免费毛片| 亚洲爆乳无码专区www| 免费在线观看理论片| 一个人看的hd免费视频| 亚洲AV无码一区二区三区DV| 2015日韩永久免费视频播放 | 亚洲色图在线观看| 一个人看www在线高清免费看 | 亚洲国产日韩精品| 亚洲国产成人精品久久久国产成人一区二区三区综 | 亚洲国产成人久久精品99| 中文字幕在线免费观看视频| 亚洲一区二区三区首页| 噜噜嘿在线视频免费观看| 一本到卡二卡三卡免费高| 亚洲美女精品视频| 亚洲AV日韩精品一区二区三区| 青青青国产手机频在线免费观看| 亚洲日本久久久午夜精品| 国产亚洲情侣一区二区无|