发新话题
移动帖子 加入精华 加入置顶 加入收藏 关注此帖

关于struts表单提交的问题..





关于struts表单提交的问题..

刚开始学struts好郁闷,还感觉不到它的好处..我用的是MyEclipse自带的struts1.3版本..

做一个发送Email的页面

在Action的execute方法里面验证成功后,我怎么使用Email发送的那个Servlet呢?还是直接在execute里面直接Email发送的代码..

如果直接在execute里面写代码,又有一个问题...Servlet里面是有一个public void init(ServletConfig sc){}这个方法的,但是Action没有,没有这个初始化方法,我不能获得工程的绝对目录吧..我以前是定义一个ServletContext sc变量,然后在init里面

this.sc = sc.getServletContext();

附件上传的时候用sc.getRealPath("/");就能获得到工程的路径!



编辑 回复 快速回复 TOP


Re:关于struts表单提交的问题..

发送应该在action里面直接调用发送的系统支持类。比如
MyEmail.send(....);
然后按照发送的结果转到不同的处理结果页面
快乐渡过每一天,减肥坚持每一天
编辑 回复 快速回复 TOP

Re:关于struts表单提交的问题..

/*
 * Generated by MyEclipse Struts
 * Template path: templates/java/JavaClass.vtl
 */
package com.sendemails.struts.action;

import java.io.File;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

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

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.mail.EmailAttachment;
import org.apache.commons.mail.EmailException;
import org.apache.commons.mail.MultiPartEmail;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.DynaActionForm;

/**
 * MyEclipse Struts Creation date: 08-11-2008
 * 
 * XDoclet definition:
 * 
 * @struts.action path="/sendemail" name="sendemailForm" input="/sendemail.jsp"
 *                scope="request" validate="true"
 * @struts.action-forward name="success" path="success.jsp"
 * @struts.action-forward name="fail" path="fail.jsp"
 */
public class SendemailAction extends Action {
	/*
	 * Generated Methods
	 */

	/**
	 * Method execute
	 * 
	 * @param mapping
	 * @param form
	 * @param request
	 * @param response
	 * @return ActionForward
	 */
	private Map<String, String> map = new HashMap<String, String>();

	public ActionForward execute(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response) {
		DynaActionForm sendemailForm = (DynaActionForm) form;
		File file = this.doAttachment(request);
		MultiPartEmail email = new MultiPartEmail();
		email.setHostName("smtp.sina.com");
		email.setAuthentication("coolhty2008", "huangti");
		email.setCharset("UTF-8");
		try {
			email.setFrom(map.get("from"));
			email.addTo(map.get("to"));
			email.setSubject(map.get("subject"));
			email.setMsg(map.get("message"));
			if (file != null) {
				EmailAttachment att = new EmailAttachment();
				att.setName(file.getName());
				att.setPath(file.getPath());
				att.setDisposition(EmailAttachment.ATTACHMENT);
				email.attach(att);
			}
			email.send();
			return mapping.findForward("success");
		} catch (EmailException e) {
			e.printStackTrace();
			return mapping.findForward("fail");
		}
	}

	private File doAttachment(HttpServletRequest request) {
		File file = null;
		try {
			List list = new ServletFileUpload(new DiskFileItemFactory())
					.parseRequest(request);
			for (Object obj : list) {
				FileItem item = (FileItem) obj;
				if (item.isFormField()) {
					map.put(item.getFieldName(), item.getString("UTF-8"));
				} else {
					file = new File("", new File(item.getName()).getName());
					item.write(file);
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		return file;
	}
}


怎么获得工程的绝对路径呢?还请大家帮我看一下..谢谢.
编辑 回复 快速回复 TOP
发新话题