A main can fail many times,
but he is not a failure
until he begins to blame somebody else.
2008年8月31日星期日
2008年8月27日星期三
-> Ajax在jsp java中的案例-1
学习Ajax技术请先不要使用ajax的框架,因为如DWR等优秀的框架虽然有很多的优势但其封装了ajax技术的细节,对初学者来说先了解其原理,对以后使用框架开发有相当大的帮助。
- 先看图片了解一下Ajax的运行机理。
(点击图片看大图)
- 看看下面案例:(摘自Ajaxa hack):
调用过程是这样的:
首先由:ajax_hack3.html提交请求到后台的ActionServlet.java,然后由其将处理结果异步返回给请求页面ajax_hack3.html,此页面根据返回状态回调事先写好的回调函数将异步接受到的结果(可以接受xml或者txt两种格式的返回结果数据)写入到此页面适当的位置。
(当然此html页面在以后的应用中也可换成 jsp,提交方式也可改为js的事件焦点改变触发) - 分析代码:(关于j2ee的运行环境和serlet的配置在这里就不在罗嗦了,google一下了)
ajax_hack3.html —— (发送,接受数据的页面)
hack3.js ——(Ajax支持的javascript)
ActionServlet.java —— (后台serlvet)
ajax_hack3.html
[因不能显示html代码,故右键查看源码,可以看到]
--------------------------------------------------------------
--------------------------------------------------------------
hack3.js
--------------------------------------------------------------
var request;
var queryString; //将要被post的数据;
function sendData(){
setQueryString();
var url="http://localhost:8080/Ajax/actionSerlvet";//处理请求的serlvet映射地址
httpRequest("POST",url,true);
}
//,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,事件处理函数
function handleResponse(){
if(request.readyState == 1){
//,,,,,,,,,,,,,,,,,,,,readyState 五状态:(0)未初始化 (1)载入 (2)载入完成 (3)交互 (4)完成
//,,,,,,,,,,,,,,,,,,,,, 当readyState是1,显示loading gif动画,可以从网上下载一个合适的gif
var loadgif = "loading ... ...";
loadingDiv(loadgif,document.getElementById("loading"));
}
if(request.readyState == 2){
var loadgif = ".";
loadingDiv(loadgif,document.getElementById("loading"));
}
if(request.readyState == 4){
//,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, actionServlet处理成功,则返回200!
if(request.status == 200){
alert(request.responseText);
var doc = request.responseXML;
var info = getDocInfo(doc);
//,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,显示结果到div docDisplay
stylizeDiv(info,document.getElementById("docDisplay"));
} else {
alert("A problem occurred with communicating between the XMLHttpRequest object and the server program.");
}
}//end outer if
}
/* 初始化request对象 */
function initReq(reqType,url,bool){
/*指定回调的事件处理函数来处理HTTP的回应 */
request.onreadystatechange=handleResponse;
request.open(reqType,url,bool);
request.setRequestHeader("Content-Type",
"application/x-www-form-urlencoded; charset=UTF-8");
/* 网景,火狐*/
//request.overrideMimeType("text/XML");
request.send(queryString);
}
/* 根据浏览器到不同构造一个HttpRequest对象.
参数:
reqType: HTTP 请求类型可以是 GET or POST.
url: 服务器后台处理地址.
asynch: 是否是异步. */
function httpRequest(reqType,url,asynch){
//Mozilla-浏览器
if(window.XMLHttpRequest){
request = new XMLHttpRequest();
} else if (window.ActiveXObject){
// IE 浏览器
request=new ActiveXObject("Msxml2.XMLHTTP");
if (! request){
request=new ActiveXObject("Microsoft.XMLHTTP");
}
}
if(request){
initReq(reqType,url,asynch);
} else {
alert("Your browser does not permit the use of all "+
"of this application's features!");}
}
function setQueryString(){
queryString="";
var frm = document.forms[0];
var numberElements = frm.elements.length;
for(var i = 0; i <>
if(i <>
queryString += frm.elements[i].name+"="+
encodeURIComponent(frm.elements[i].value)+"&";
} else {
queryString += frm.elements[i].name+"="+
encodeURIComponent(frm.elements[i].value);
}
}
}
function stylizeDiv(bdyTxt,div){
//reset DIV content
div.innerHTML="";
div.style.backgroundColor="yellow";
div.innerHTML=bdyTxt;
}
function loadingDiv(bdyTxt,div){
div.innerHTML="";
div.style.backgroundColor="white";
div.innerHTML=bdyTxt;
}
function getDocInfo(doc){
var root = doc.documentElement;
var info = "Document root element name:
"+ root.nodeName;
var nds;
if(root.hasChildNodes()) {
nds=root.childNodes;
info+= "Root node's child node names/values:
";
for (var i = 0; i <>
info+= nds[i].nodeName;
if(nds[i].hasChildNodes()){
info+= " : \""+nds[i].firstChild.nodeValue+"\"
";
} else {
info+= " : Empty
";
}
}
}
return info;
}
--------------------------------------------------------------
ActionServlet.java
【记得导入apache的commons betwixt包,可以在apache.org网站下载】
--------------------------------------------------------------
package com.ata;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Iterator;
import java.util.Map;
import org.apache.commons.betwixt.XMLUtils;
public class ActionServlet extends HttpServlet{
protected void doGet
(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws ServletException, IOException {
doPost(httpServletRequest, httpServletResponse);
}
protected void doPost(HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse) throws ServletException,
IOException {
Map reqMap = httpServletRequest.getParameterMap();
String val=null;
String tag = null;
StringBuffer body = new StringBuffer("\n");
boolean wellFormed = true;
Map.Entry me = null;
//,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,为了演示loading效果,在此sleep一秒钟。
try {
System.out.println("sleep 1s");
Thread.sleep(6000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,遍历j拿到传递的值并封装成xml格式。
for(Iterator iter= reqMap.entrySet().iterator();iter.hasNext();) {
me=(Map.Entry) iter.next();
val= ((String[])me.getValue())[0];
tag = (String) me.getKey();
//,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,apache的XMLUtils工具类,检查标签
if (! XMLUtils.isWellFormedXMLName(tag)){
wellFormed=false; break;
}
body.append("<").append(tag).append(">").
append(XMLUtils.escapeBodyValue(val)).append("
append(">\n");
}
if(wellFormed) {
body.append("");
//,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,如果格式没问题,就将封装好的xml格式结果返回
sendXML(httpServletResponse,body.toString());
} else {
sendXML(httpServletResponse,"");
}
}
private void sendXML(HttpServletResponse response,String body) throws
IOException{
response.setContentType("text/xml; charset=UTF-8");
response.setHeader("Cache-Control", "no-cache");
String content = ""+body;
System.out.println(content);
response.getWriter().write(content);
}
}
--------------------------------------------------------------
2008年8月26日星期二
-> JAVA mail 发送电邮 案例(Apache Commons Mail)
apache 提供了一个非常方便的Java Mail接口。
仅仅从其网站上下载commons-email-jar-1.1.jar包,即可轻松使用java编写mail程序。
仅仅从其网站上下载commons-email-jar-1.1.jar包,即可轻松使用java编写mail程序。
- 到官方下载页面下载commons-email-jar-1.1.jar包,并导入到Eclipse相应的工程里面;
- 建立java类:SimpleEmail .java 并导入相关的类;
- 写方法:sentByGmai() 此方法是通过gmail信箱向163信箱发送电邮的案例;
public static void sentByGmail() throws Exception{
SimpleEmail email = new SimpleEmail();
email.setDebug(true); //,,,,,,,,,,,,,,,,,,,,,,,,,,, 设置调试信息,对排查错误非常有帮助。
//,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 通过Gmail Server 发送邮件
email.setHostName("smtp.gmail.com"); //设定smtp服务器
email.setSSL(Boolean.TRUE); //,,,,,,,,设定是否使用SSL
email.setSslSmtpPort("465"); //,,,,,,,,,设定SSL端口
//,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,设定smtp服务器的认证资料信息
email.setAuthentication("yourMailAdd@gmail.com", "yourPassword");
email.addTo("mincatjava@163.com","Mincat"); //,,,,,,,,,设定收信地址和名字
email.setCharset("UTF-8");//,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,设定内容的语言集
email.setFrom("liyang.javadoor@gmail.com");//,,,,,,设定发件人的地址
email.setSubject("Hello,用java发来的问候!");//,,,设定电邮的主题
email.setMsg("中国\n 你好!");//,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,设定邮件内容
email.send();//,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,发送邮件
} - 将此方法在main方法中运行即可。
订阅:
博文 (Atom)
