1. 程式人生 > >Struts2寫一個小專案

Struts2寫一個小專案


寫一個Struts2的增刪改查的專案

就以老師給的這道題目為例: 首先分析一下這道題目需要什麼: 這道題目完成查詢功能就可以了: 單條件查詢就需要一個搜尋框,寫在view層(jsp頁面) 多條件查詢就需要多個搜尋框了, 寫一個類似這樣的介面 好的開始寫這個頁面: 程式碼如下:
<%@ taglib prefix="s"  uri="/struts-tags"%>

<body>
<div align='center'>
<h2>單條件搜尋</h2>
<s:form action="Search" method="post">
<s:textfield name="book.Name" label="圖書名字"></s:textfield>
<s:submit value="搜尋"></s:submit>
</s:form>
</div>
<div align='center'>
<h2>多條件搜尋</h2>
<s:form action="MulSearch" method="post">
<s:textfield name="book.ISBN" label="圖書編號"></s:textfield>
<s:textfield name="book.Name" label="圖書名字"></s:textfield>
<s:textfield name="book.Author" label="圖書作者"></s:textfield>
<s:submit value="搜尋"></s:submit>
</s:form>
</div>
<a href="BookList">全部書籍</a>
</body>

寫好這個就可以了,接下來我習慣寫Model層
package com.zmy.model;

public class Book {
	private String bookISBN;
	private String bookName;
	private String bookAuthor;
	
	public String getBookISBN() {
		return bookISBN;
	}
	public void setBookISBN(String bookISBN) {
		this.bookISBN = bookISBN;
	}
	public String getBookName() {
		return bookName;
	}
	public void setBookName(String bookName) {
		this.bookName = bookName;
	}
	public String getBookAuthor() {
		return bookAuthor;
	}
	public void setBookAuthor(String bookAuthor) {
		this.bookAuthor = bookAuthor;
	}
}

把屬性都封裝了。 接下來寫操作SearchDao 實現單條件和多條件查詢
package com.zmy.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;

import com.zmy.dbpool.*;
import com.zmy.model.Book;

public class SearchDao {
	private Connection conn;
	private Statement state;
	private PreparedStatement pst;
	private ResultSet rs;
	private ArrayList<Book> books;
	
	public SearchDao(){
		if(conn==null)
		{
			try
			{
				conn=Dbpool.getConnection();
			}
			catch(Exception e)
			{
				e.printStackTrace();
			}
		}
	}
	
	
	public ArrayList<Book> getBookByName(String bookName){
		   books=new ArrayList<Book>();
		   
		   try {
			   state=conn.createStatement();
			   rs=state.executeQuery("select * from book where bookName='"+bookName+"'");
			   while(rs.next())
			   {
				   Book book=new Book();
				   book.setBookISBN(rs.getString(1));
				   book.setBookName(rs.getString(2));
				   book.setBookAuthor(rs.getString(3));
				   books.add(book);
			   }
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		   finally{
				
				try {
					rs.close();
					state.close();
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		   return books; 
	   }

	public ArrayList<Book> getBookByMul(String bookISBN,String bookName,String bookAuthor){
		   books=new ArrayList<Book>();
		   
		   try {
			   state=conn.createStatement();
			   rs=state.executeQuery("select * from book where bookName='"+bookName+"' and bookISBN='"+bookISBN+"' and bookAuthor='"+bookAuthor+"'");
			   while(rs.next())
			   {
				   Book book=new Book();
				   book.setBookISBN(rs.getString(1));
				   book.setBookName(rs.getString(2));
				   book.setBookAuthor(rs.getString(3));
				   books.add(book);
			   }
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		   finally{
				try {
					rs.close();
					state.close();
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		   return books; 
	   }
	
	
   public ArrayList<Book> getBookList(){
	   books=new ArrayList<Book>();
	   
	   try {
		   state=conn.createStatement();
		   rs=state.executeQuery("select * from book");
		   while(rs.next())
		   {
			   Book book=new Book();
			   book.setBookISBN(rs.getString(1));
			   book.setBookName(rs.getString(2));
			   book.setBookAuthor(rs.getString(3));
			   books.add(book);
		   }
	} catch (SQLException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
	   finally{
			
			try {
				rs.close();
				state.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	   return books; 
   }
   
}

這些就是三個查詢,其他的改變sql語句就可以了。 接下來是重點說的,發現有很多同學在傳值這一塊有問題,有很多同學思維定式,struts2傳值和servlet就不是一回事。 大家可以看我前面寫的帖子。我使用域模式傳值。 寫控制層Action
package com.zmy.action;

import java.util.ArrayList;
import java.util.List;

import com.opensymphony.xwork2.ActionSupport;
import com.zmy.dao.SearchDao;
import com.zmy.model.Book;

@SuppressWarnings("serial")
public class SearchAction extends ActionSupport {
	private List<Book> books;
	private SearchDao searchDao;
	private Book book;
	
	
	public List<Book> getBooks() {
		return books;
	}
	public void setBooks(List<Book> books) {
		this.books = books;
	}
	public SearchDao getSearchDao() {
		return searchDao;
	}
	public void setSearchDao(SearchDao searchDao) {
		this.searchDao = searchDao;
	}
	public Book getBook() {
		return book;
	}
	public void setBook(Book book) {
		this.book = book;
	}
	public SearchAction()
	{
		searchDao=new SearchDao();
	}

	public String getAllBook()
	{
		this.books=searchDao.getBookList();
		return SUCCESS;
	}


	public String getBookByBookName()
	{
		this.books=searchDao.getBookByName(book.getBookName());
		return SUCCESS;
	}
	
	public String getBookByMul()
	{
		books=searchDao.getBookByMul(book.getBookISBN(), book.getBookName(), book.getBookAuthor());
		return SUCCESS;
	}
}

這就是他的控制層,通過呼叫searchDao()得出結果。 再寫的就是資料庫連線程式:
package com.zmy.dbpool;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class Dbpool {
	public static Connection getConnection(){
		String driver="com.mysql.jdbc.Driver";
		String url="jdbc:mysql://localhost/db_library?characterEncoding=utf8&zeroDateTimeBehavior=convertToNull";
		Connection conn=null;
		
		try{
			Class.forName(driver);
			try{
				conn=DriverManager.getConnection(url,"root",null);
			}catch(SQLException e){
				e.printStackTrace();
			}
		}catch(ClassNotFoundException e){
			e.printStackTrace();
		}
		System.out.println("Successfully connected to the database");
		return conn;
	}
}

建議大家每次寫程式碼時都寫一些提示性語句,這樣就容易得出出問題的位置,方便排查。 到了這而之後就寫配置檔案: struts.xml檔案
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
	"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
	"http://struts.apache.org/dtds/struts-2.3.dtd">

<struts>

    <constant name="struts.enable.DynamicMethodInvocation" value="false" />
    <constant name="struts.devMode" value="true" />

    <package name="default" extends="struts-default">
    
    <action name="Search" class="com.zmy.action.SearchAction" method="getBookByBookName">
    	<result name="success">/bookList.jsp</result>
    </action>
	
	<action name="MulSearch" class="com.zmy.action.SearchAction" method="getBookByMul">
			<result name="success">/bookList.jsp</result>
	</action>
	
	<action name="BookList" class="com.zmy.action.SearchAction" method="getAllBook">  
		    <result name="success">/bookList.jsp</result>
	</action>
    </package>
</struts>
這樣就快接近尾聲了 最後一步迭代輸出
<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<table border="1">
<tr bgcolor="#33ccff">
<td>編號</td><td>書名</td><td>作者</td>
</tr>
<s:iterator value="books" status="st">
<tr <s:if test="#st.odd">style="background-color:#bbbbbb"</s:if>>
				<td align="center">
					<s:property value="bookISBN"></s:property>
				</td>
				<td align="center">
					<s:property value="bookName"></s:property>
				</td>
				<td align="center">
					<s:property value="bookAuthor"></s:property>
				</td>
			</tr>
</s:iterator>
</table>
</body>
</html>


這樣整個流程就搞定了,當然我寫的時候是沒這麼順利的,出過一些問題,不過錯誤在控制檯會爆出來的,
把錯誤改掉就可以了

相關推薦

Struts2一個專案

寫一個Struts2的增刪改查的專案 就以老師給的這道題目為例: 首先分析一下這道題目需要什麼: 這道題目完成查詢功能就可以了: 單條件查詢就需要一個搜尋框,寫在view層(jsp頁面) 多條件查詢就需要多個搜尋框了, 寫一個類似這樣的介面 好的開始寫這個頁面:

用Python一個遊戲

python 小腳本 剛學Python時間不長,但也知道了一點,看別人的參考寫了一個猜數字小遊戲,也算是禹學於樂吧。#!/usr/bin/env python #coding=utf-8

Struts2框架使用(一)之用Struts2一個HelloWorld

同時 style test 框架 exceptio world utf-8 dispatch har 這裏記一下第一次Struts2框架的使用方法,首先學會使用Struts2寫一個HelloWorld。 首先導入Struts2所依賴得jar包 首先創建一個web工程

無監控不運維——使用 Python 一個小小的專案監控

在公司裡做的一個介面系統,主要是對接第三方的系統介面,所以,這個系統裡會和很多其他公司的專案互動。隨之而來一個很蛋疼的問題,這麼多公司的介面,不同公司介面的穩定性差別很大,訪問量大的時候,有的不怎麼行的介面就各種出錯了。   這個介面系統剛剛開發不久,整個系統中,處於比較邊緣的位置,不像其他專案

第一階段基本結束,獨自完成了一個專案。雖然還有許多不足,但自己依舊在進步!加油!!!!

package com.jbit.sms; /**  * 學生資訊管理系統  * @author Administrator  *  */ import java.util.Arrays; import java.util.Scanner; impor

用python一個程式,解決買水果的問題?

問題: 商店總共有三種水果,香蕉/蘋果/葡萄,單價分別為3.5/5.0/3.0元/500克。 寫一個小程式實現:          1、輸出一個選單:列印每種水果的價格:          2、尋問客戶欲購買水果?          3、客戶想購買的克數?    

React Native 一個專案其中一些主要功能實現 (頂部導航欄(可滑動),網路解析,上拉重新整理,下拉載入)

//網路解析 import React, { Component } from "react"; import { View, Text, TouchableOpacity } from "react-native"; import RefreshListView, { Re

用Java語言如何一個日曆

利用GregorianCalendar物件內部的get方法 getFirstDayweek方法獲得當地星期的起始日。 我們不必知道GregorianCalendar類如何計算星期數與天數。掌握set與get,add方法。 在這裡插入程式碼片 ```package

audio-基於Vue的一個專案(上傳音樂連結)

1 標籤定義聲音,比如音樂或其他音訊流。 2 設定為自動播放的 audio 元素:autoplay=“autoplay” 但是隻有pc端可以實現 移動端不行(pc端的瀏覽器要比移動端的完善很多,對有些屬性支援也會好很多) 3 audio不單單是個標籤 他也是window下的一個物件,物件

ssi(spring struts ibatis)框架下 搭建一個新包一個的系統理解

ssi(spring struts ibatis)框架下 搭建一個新包寫一個小的系統理解 不同公司有不同的結構,再此就本公司的結構簡要介紹一下: servers專案下放的是tomcat伺服器啟動的配置檔案 context.xml 中可以找到資料庫 資訊 url

Java一個日曆練習Calendar和Dated的用法

首先執行效果:  附原始碼: package cn.henu.houyongkang_Calendar; import java.text.DateFormat; import java.text.ParseException; import java.text.Simp

老司機教你如何優雅地完成一個專案測試

一、概述 本文以寫實風格記錄TBS Studio開發除錯工具測試全過程。包括測試人力申請、測試策略制定、系統測試以及眾測體驗。對於測試初學者可以瞭解到整個流程是如何一步一步走下來的。對於有一定經驗的同學可以領略到測試策略制定過程中基於風險和成本的測試理念。 二、

用繼承來一個故事

package com.zr.java.textam; public class TextAm {public static void main(String[] args) {// TODO Auto-generated method stubxigua axigua = new xigua();axigu

JAVA基礎(一)&一個專案的解決思想

本週我們對java基礎知識進行復習,首先把一些重要內容記錄下來: 1.基本常識類:jdk安裝及環境配置;                           註釋(單行、多行、文件)的分類及使用;                           識別符號的命名規範;   

基於Bmob後臺雲一個程式

學習一段時間小程式後,想簡單的寫一個小程式,由於沒有伺服器,所以選擇了Bmob後臺雲,打算分成幾次記錄實現這個小程式所用到的知識點: 主要如下: 實現效果圖 原始碼下載 前期準備 1、Bmob賬號

一個專案

案例包括 資料快取+listview分頁載入+日夜間模式切換 下面開始貼程式碼: MainActivity import android.content.BroadcastReceiver; import android.content.Context; import a

一個專案的技術選型

        幫人做一個小小的線上登陸驗證模組。         需求背景:大約有200人線上的狀況,客戶端有個登陸介面。         很簡單的一個專案,主要分:通訊模組和服務模組。         客戶端採用Delphi開發,通訊方面考慮:Midas技術或Webse

一個專案 --- C++實現記憶體洩漏檢查器

先貼出程式碼: .h: // 注意, 我們的標頭檔案是要被包含進被測試的.cpp 的, 所以標頭檔案中不要出現"多餘的"程式碼及庫檔案, 以免影響被測檔案 #ifndef LEAK_DETECTOR_H_ #define LEAK_DETECTOR_H_ // 有個小技

一個專案帶你瞭解rest framework

這邊宣告一下,以下是參考官方文件來的。 新建專案 新建名為dimples的django專案 在其中建立一個名為astart的APP: 新建目錄 # 新建目錄 mkdir dimples cd dimples 新建虛擬環境 virtualenv env e

React Native 從零到一個專案

前陣子開始學習 React Native,一個人摸滾帶爬的也算是能寫個 小專案 了,在這裡分享一下自己從零開始學習的過程,也推薦一些比較優秀的學習資源,讓大家學習過程可以提高一些效率。 在路上 一、環境搭建和 IDE 選型 React Native 環境搭建可以看