Struts入門例項

harbor1981發表於2016-03-01

   在MyEcplise開發第一個Struts程式相當簡單,它已經整合了Struts了,所以不需要自己手動載入Struts的庫,只需要給建立的Web Project執行【MyEclipse】-【Project capabilities】-【add Struts capabilities】就自動會在src目錄下新增Struts.xml,並且web.xml也會自動做出相應的修改改。

今天的例項是一個圖書查詢系統例項,查詢介面是querybooks.jsp,結果顯示頁面是result.jsp,錯誤頁面時error.jsp。action是QueryAction.java

1.QueryAction.java

只要是action類就必定有execute() 方法,在execute() 方法中我們設定了action的跳轉頁面,比如在下面的程式碼中我們知道如果根據傳進來的引數能夠找到匹配的圖書的話,就會從action跳轉到return "result";介面,而如果沒有圖書與查詢條件相匹配,就會跳轉到return "error"; 這裡的result和error並不是真正的介面,只是一個欄位而已,不過我們將在後面的Struts.xml中配置這些欄位所對應的跳轉介面。

package chapter7.action;
import java.util.Map;
import chapter7.dao.BookDAO;
public class QueryAction {
    private String name;
    private Map<String,Integer> result;
    
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Map<String, Integer> getResult() {
        return result;
    }
    public void setResult(Map<String, Integer> result) {
        this.result = result;
    }
    //action類必定有一個execute()方法。
    public String execute() throws Exception
    {
        try
        {
            BookDAO book=new BookDAO();
            Map<String, Integer> books=book.getBooks(name);
            setResult(books);
            return "result";
        }
        catch(Exception e)
        {
            return "error";
        }
    }
}

2.BookDAO.java

這裡類是用於查詢圖書的。首先有一個靜態方法給Map<String,Integer> books 賦了初值,然後通過getBooks(String name)方法在books 物件中查詢是否有與name匹配的圖書,如果有則將其存放都專門的查詢結果物件中,最後返回這個物件,如果沒有返回空。

package chapter7.dao;
import java.util.LinkedHashMap;
import java.util.Map;
public class BookDAO {
    //定義一個儲存圖書資訊的靜態Map物件。
    private static Map<String,Integer> books=new LinkedHashMap<String,Integer>();
    static
    {
        books.put("J2EE整合詳解與典型案例",79);
        books.put("資料庫系統概念",69);
        books.put("C++程式設計",59);
        books.put("ASP.NET開發",49);
    }
    public static Map<String, Integer> getBooks(String name) {
    //定義一個儲存查詢結果的books物件    
        Map<String,Integer> books=new LinkedHashMap<String,Integer>();
        //對BookDAO.books的物件進行逐個掃描,如果物件中有匹配查詢條件的,則儲存到books物件中。
        for(Map.Entry<String, Integer>entry:BookDAO.books.entrySet())
        {
            if(entry.getKey().toLowerCase().contains(name.toLowerCase()))
                books.put(entry.getKey(), entry.getValue());
        }
        return books;
    }    
}

3.Struts.xml的配置

這個配置未見定義了result和error所對應的跳轉頁面分別是webroot根目錄下的result.jsp和error.jsp這兩個頁面。namespace="/" 這個很重要,如果沒有配置正確會出現錯誤,具體錯誤與解決方法參考另外一票部落格:http://blog.csdn.net/xw13106209/archive/2010/09/14/5884278.aspx .

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
    <package name="Struts2" namespace="/" extends="struts-default">
        <action name="query"  class="chapter7.action.QueryAction">
            <result name="result">/result.jsp</result>
            <result name="error">/error.jsp</result>
        </action></package>
</struts> 

4.result.jsp頁面

簡單的jsp頁面。用於顯示查詢結果。

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>查詢結果介面</title>
   </head>
  <body>
  <table border="1">
   <tr>
   <td>書名</td>
   <td>價格</td>
   </tr>
   <%
   Map<String,Integer> result=(Map<String,Integer>)request.getAttribute("result");
    for(Map.Entry<String,Integer>entry: result.entrySet())   
     {
    %>
   <tr>
   <td><%=entry.getKey() %></td>
   <td><%=entry.getValue() %></td>
   </tr>
  <%} %>
  </table>
  </body>
</html>

在result.jsp中我們可以發現使用request.getAttrbute()方法可以獲得在QueryAction中setResult(books)方法中所儲存的books物件的內容。

5.querybook.jsp介面

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>    
    <title>查詢圖書資訊</title>
      </head>
   <body>
  <s:form action="query">
  <s:textfield label="書名" name="name"/>
  <s:submit value="查詢"/>
  </s:form>
    </body>
</html>

從上面<s:form action="query">可以看出querybook.jsp介面的下一個跳轉action是query。而在Struts.xml中也正好定義了名為query的action,如Struts.xml設定所示,其中不僅定義了一個名為query的action,並且指出該action所對應的類是QueryAction,在result標籤中定義了“result”和“error”兩種情況所需要跳轉的頁面。

6.error.jsp介面

<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
     <title>My JSP 'error.jsp' starting page</title>
  </head> 
  <body>
   ERROR page. <br>
  </body>
</html>

相關文章