1. 程式人生 > >9.Struts1.x專案程式碼

9.Struts1.x專案程式碼

專案目錄

ApplicationResources.properties

# Resources for parameter 'cn.struts.ApplicationResources'
# Project Struts1Project
mid.input.null=<li>\u767B\u5F55\u7528\u6237\u540D\u4E0D\u5141\u8BB8\u4E3A\u7A7A\!</li>
password.input.null=<li>\u767B\u5F55\u5BC6\u7801\u4E0D\u5141\u8BB8\u4E3A\u7A7A\!</li>
login.success=\u7528\u6237\u767B\u5F55\u6210\u529F\uFF0C\u6B22\u8FCE\u5149\u4E34\uFF01
login.failure=\u7528\u6237\u767B\u5F55\u5931\u8D25\uFF0C\u8BF7\u91CD\u65B0\u767B\u5F55\uFF01
code.input.null=<li>\u9A8C\u8BC1\u7801\u4E0D\u5141\u8BB8\u4E3A\u7A7A\uFF01</li>
noauth.mid.error=<li>\u6B64\u4E3A\u975E\u6CD5\u7528\u6237\u540D\u4E0D\u5141\u8BB8\u4F7F\u7528\uFF01</li>
code.input.error=<li>\u9A8C\u8BC1\u7801\u8F93\u5165\u9519\u8BEF\uFF01</li>

DeptAction.java

/*
 * Generated by MyEclipse Struts
 * Template path: templates/java/JavaClass.vtl
 */
package cn.struts.action;
import java.util.ArrayList;
import java.util.List;

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 cn.struts.form.DeptForm;
import cn.struts.vo.Dept;
public class DeptAction extends DispatchAction {
	public ActionForward insert(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response) {
		DeptForm deptForm = (DeptForm) form;// TODO Auto-generated method stub
		System.out.println("部門增加操作"+deptForm.getDept());
		return null;
	}
	public ActionForward list(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response) {
		Dept vo=new Dept();
		vo.setDeptno(10);
		vo.setDname("測試部");
		request.setAttribute("dept",vo);//傳遞單個引數
		List<Dept>all=new ArrayList<Dept>();
		for(int x=0;x<10;x++){
			vo=new Dept();
			vo.setDeptno(20+x);
			vo.setDname("測試部-"+x);
			all.add(vo);
		}
		request.setAttribute("allDepts",all);
		return mapping.findForward("list");
	}
	public ActionForward update(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response) {
		DeptForm deptForm = (DeptForm) form;// TODO Auto-generated method stub
		//假設通過此操作取得了一個已有的Dept物件,那麼最初的做法是將其設定在request範圍內,而後在JSP頁面取出資料
		Dept vo=new Dept();//假設這是通過查詢返回的內容
		vo.setDeptno(50);
		vo.setDname("RESERCH");
		deptForm.setDept(vo);//將VO的內容設定到ActionForm裡
		return mapping.findForward("update");
	}
	public ActionForward delete(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response) {
		DeptForm deptForm = (DeptForm) form;// TODO Auto-generated method stub
		System.out.println("部門刪除操作"+deptForm.getDept());
		return null;
	}
}

MyloginAction.java

/*
 * Generated by MyEclipse Struts
 * Template path: templates/java/JavaClass.vtl
 */
package cn.struts.action;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

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.ActionMessage;
import org.apache.struts.action.ActionMessages;

import cn.struts.form.MyloginForm;
public class MyloginAction extends Action {
	/** 
	 * 此操作主要時進行使用者的請求處理,類似doGet()或者時dopost方法功能
	 * @param mapping此類主要負責讀取struts-config.xml檔案的配置
	 * @param form表示要操作的ActionForm,使用它的目的時為了能夠接收引數
	 * @param request使用者的請求
	 * @param response使用者對應
	 * @return ActionForward表示返回的路徑資訊,通過配置檔案取出對映的key
	 */
	public ActionForward execute(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response) {
		MyloginForm myloginForm = (MyloginForm) form;
		if("amdin".equalsIgnoreCase(myloginForm.getMember().getMid())){//錯誤資訊
			//所有的錯誤資訊在之前的ActionForm中都儲存在了ActionErrors中
			//但是在新的Struts1.x版本里面提供了一個子類ActionMessage
			ActionMessages msg=new ActionMessages();
			msg.add("mid",new ActionMessage("noauth.mid.error"));
			super.addErrors(request, msg);//儲存資訊
			return mapping.getInputForward();//跑到input設定的路徑
		}
		if("mldn".equals(myloginForm.getMember().getMid())
				&&"java".equals(myloginForm.getMember().getPassword())){
			request.setAttribute("msg",
					super.getResources(request).getMessage("success"));
			return mapping.findForward("success");
		}else{
			request.setAttribute("msg", 
					super.getResources(request).getMessage("failure"));
			return mapping.findForward("failure");
		}
	}
}

UploadAction.java

package cn.struts.action;

import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.UUID;

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

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 cn.struts.form.UploadForm;

public class UploadAction extends Action {
	public ActionForward execute(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response) {
		UploadForm uploadForm=(UploadForm) form;
		System.out.println("【普通引數】mid="+uploadForm.getMember().getMid());
		try {
			System.out.println("【上傳檔案】名稱="+uploadForm.getPhoto().getFileName()
					+",大小="+uploadForm.getPhoto().getFileSize()
					+",資料="+uploadForm.getPhoto().getFileData()
					+",型別="+uploadForm.getPhoto().getContentType());
			if(uploadForm.getPhoto().getFileSize()>0){//有檔案上傳
				String fileName=UUID.randomUUID().toString()+"."+(uploadForm.getPhoto().getFileName().split("\\.")[1]);
				String filePath=request.getServletContext().getRealPath("/")+fileName;
				System.out.println(filePath);
				File file=new File(filePath);
				InputStream input=uploadForm.getPhoto().getInputStream();
				OutputStream output=new FileOutputStream(file);
				byte data[]=new byte[1024];
				int len=0;
				while((len=input.read(data))!=-1){
					output.write(data,0,len);
				}
				input.close();
				output.close();
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;//如果日後使用Ajax處理返回空
	}
}

DeptForm.java

package cn.struts.form;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;
import cn.struts.vo.Dept;
public class DeptForm extends ActionForm {
	private Dept dept=new Dept();
	private String status;
	public void setStatus(String status) {
		this.status = status;
	}
	public ActionErrors validate(ActionMapping mapping,
			HttpServletRequest request) {
		System.out.println("status="+this.status);
		return null;
	}
	public void reset(ActionMapping mapping, HttpServletRequest request) {
		
	}
	public Dept getDept() {
		return dept;
	}
	public void setDept(Dept dept) {
		this.dept = dept;
	}
}

MyloginForm.java

package cn.struts.form;
import javax.servlet.http.HttpServletRequest;

import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionMessage;

import cn.struts.vo.Member;
@SuppressWarnings("serial")
public class MyloginForm extends ActionForm {
	private Member member=new Member();//必須例項化物件
	private String code;
	public void setCode(String code) {
		this.code = code;
	}
	public String getCode() {
		return code;
	}
	public Member getMember(){
		return member;
	}
	/** 
	 * 此方法主要進行使用者輸入資料的驗證,如果輸入的資料有錯誤,則將錯誤資訊儲存在
	 * ActionMessage類物件裡面,並且所有的ActionMessage類物件可以統一儲存在
	 * ActionErrors,如果在返回的時候返回的是null或者ActionErrors返回的內容
	 * 沒有包含任何的錯誤資訊,那麼會將請求繼續交給Action進行處理,負責會返回到一個錯誤路徑
	 * @param mapping表示所有的對映資訊,此類一般不使用
	 * @param request可以接收使用者的請求引數
	 * @return ActionErrors 如果返回為null或者裡面儲存的錯誤資訊為0,那麼表示正確
	 */
	public ActionErrors validate(ActionMapping mapping,
			HttpServletRequest request) {
		ActionErrors errors=new ActionErrors();//儲存錯誤資訊
		// 當用戶傳送請求後所有的輸入的引數都回自動呼叫setter賦值,當執行到此方法是,一定是已經處理完引數了;
		if(this.member.getMid()==null||"".equals(this.member.getMid())){//輸入的mid引數內容為空
			//add()方法有兩個引數,第一個引數表示的時提交引數的名字
			//第二個引數表示讀取的錯誤的key,錯誤的資訊利用ActionMessage讀取
			errors.add("mid",new ActionMessage("mid.input.null"));
		}
		if(this.member.getPassword()==null||"".equals(this.member.getPassword())){
			errors.add("password",new ActionMessage("password.input.null"));
		}
		if(this.code==null||"".equals(this.code)){
			errors.add("code",new ActionMessage("code.input.null"));
		}else{//如果已經輸入了驗證碼,那麼需要判斷有效性
			String rand=(String)request.getSession().getAttribute("rand");
			if(!rand.equalsIgnoreCase(this.code)){
				errors.add("code",new ActionMessage("code.input.error"));
			}
		}
		return errors;
	}
	/** 
	 * Method reset
	 * @param mapping
	 * @param request
	 */
	public void reset(ActionMapping mapping, HttpServletRequest request) {
		
	}
}

UploadForm.java

package cn.struts.form;

import java.io.Serializable;

import javax.servlet.http.HttpServletRequest;

import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.upload.FormFile;

import cn.struts.vo.Member;
@SuppressWarnings("serial")
public class UploadForm extends ActionForm {
	private Member member=new Member();//必須例項化物件
	private FormFile photo;//表示接收上傳檔案
	public FormFile getPhoto() {
		return photo;
	}
	public void setPhoto(FormFile photo) {
		this.photo = photo;
	}
	public Member getMember(){
		return member;
	}
	public ActionErrors validate(ActionMapping mapping,
			HttpServletRequest request) {
		return null;
	}

	public void reset(ActionMapping mapping, HttpServletRequest request) {
		
	}
	
}

Dept.java

package cn.struts.vo;

import java.io.Serializable;

@SuppressWarnings("serial")
public class Dept implements Serializable {
   private Integer deptno;
   private String dname;
public Integer getDeptno() {
	return deptno;
}
public void setDeptno(Integer deptno) {
	this.deptno = deptno;
}
public String getDname() {
	return dname;
}
public void setDname(String dname) {
	this.dname = dname;
}
@Override
	public String toString() {
		return "【部門資訊】編號="+this.deptno+",名稱="+this.dname;
	}
}

Member.java

package cn.struts.vo;

import java.io.Serializable;

@SuppressWarnings("serial")
public class Member implements Serializable {
    private String mid;
	private String password;
	public String getMid() {
		return mid;
	}
	public void setMid(String mid) {
		this.mid = mid;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
}

errors.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>Struts</title>

  </head>
  
  <body>
    <html:errors/>
  </body>
</html>

list.jsp

<%@ page language="java" pageEncoding="UTF-8"%>
<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %>
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %>
<%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic" %>
<%@ taglib uri="http://struts.apache.org/tags-tiles" prefix="tiles" %>
<html:html lang="true">
  <head>
    <html:base />
    <title>list.jsp</title>
  </head>
  <body>
   <h1>EL輸出:${dept.dname}</h1>
   <h1>標籤輸出:<bean:write name="dept" property="dname"/></h1>
   <h1>資源資料:<bean:message key="login.success"/></h1>
   <div>
     <ul>
         <logic:present name="allDepts" scope="request">
             <logic:iterate id="vo" name="allDepts">
                <li>編號:${vo.deptno},名稱:${vo.dname}</li>
             </logic:iterate>
         </logic:present>
     </ul>
   </div>
  </body>
</html:html>

login.jsp

<%@ page language="java" pageEncoding="UTF-8"%>

<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %>
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %>
<%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic" %>
<%@ taglib uri="http://struts.apache.org/tags-tiles" prefix="tiles" %>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html:html lang="true">
  <head>
    <html:base />
    
    <title>login.jsp</title>

  </head>
  
  <body>
  <html:errors/>
  ${msg}
    <html:form action="mylogin.do" method="post" focus="login">
      <table border="0">
        <tr>
          <td>使用者名稱:</td>
          <td><html:text property="member.mid" /></td>
        </tr>
        <tr>
          <td>密碼:</td>
          <td><html:password property="member.password" /></td>
        </tr>
        <tr>
          <td colspan="2" align="center">
          <html:submit value="登入"/>
          <html:reset value="重置"/>
          </td>
        </tr>
      </table>
    </html:form>
  </body>
</html:html>

update.jsp

<%@ page language="java" pageEncoding="UTF-8"%>

<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %>
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %>
<%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic" %>
<%@ taglib uri="http://struts.apache.org/tags-tiles" prefix="tiles" %>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html:html lang="true">
  <head>
    <html:base />
    
    <title>update.jsp</title>

  </head>
  
  <body>
    <html:form action="dept.do" method="post" focus="login">
      <table border="0">
        <tr>
          <td>部門編號:</td>
          <td><html:text property="dept.deptno" /></td>
        </tr>
        <tr>
          <td>部門名稱:</td>
          <td><html:text property="dept.dname" /></td>
        </tr>
        <tr>
          <td colspan="2" align="center"><html:submit /></td>
        </tr>
      </table>
    </html:form>
  </body>
</html:html>

upload.jsp

<%@ page language="java" pageEncoding="UTF-8"%>

<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %>
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %>
<%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic" %>
<%@ taglib uri="http://struts.apache.org/tags-tiles" prefix="tiles" %>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html:html lang="true">
  <head>
    <html:base />
    
    <title>struts</title>

  </head>
  
  <body>
  <html:errors/>
  ${msg}
    <html:form action="upload.do" method="post" focus="login" enctype="multipart/form-data">
      <table border="0">
        <tr>
          <td>使用者名稱:</td>
          <td><html:text property="member.mid" /></td>
        </tr>
        <tr>
          <td>照片:</td>
          <td><html:file property="photo"/></td>
        </tr>
        <tr>
          <td colspan="2" align="center">
          <html:submit value="增加"/>
          <html:reset value="重置"/>
          </td>
        </tr>
      </table>
</html:form>
  </body>
</html:html>

struts-config.xml

<?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="myloginForm" type="cn.struts.form.MyloginForm" />
    <form-bean name="deptForm" type="cn.struts.form.DeptForm" />
    <form-bean name="uploadForm" type="cn.struts.form.UploadForm" />

  </form-beans>

  <global-exceptions />
  <global-forwards />
  <action-mappings >
    <action
      attribute="myloginForm"
      input="/login.jsp"
      name="myloginForm"
      path="/mylogin"
      scope="request"
      type="cn.struts.action.MyloginAction"
      cancellable="true">
      <forward 
      name="success" 
      path="/login.jsp"/>
      <forward name="failure" path="/login.jsp"/>
   </action>
    <action
      attribute="deptForm"
      input="/errors.jsp"
      name="deptForm"
      parameter="status"
      path="/dept"
      scope="request"
      type="cn.struts.action.DeptAction"
      cancellable="true">
      <forward name="list" path="list.jsp"/>
      <forward name="update" path="update.jsp"/>
      </action>
      <action
      attribute="uploddForm"
      input="/errors.jsp"
      name="uploadForm"
      parameter="status"
      path="/upload"
      scope="request"
      type="cn.struts.action.UploadAction"
      cancellable="true" />
  </action-mappings>

  <message-resources 
  parameter="cn.struts.ApplicationResources" />
</struts-config>

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
  <display-name>Struts1Project</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/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>
</web-app>