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>


这样整个流程就搞定了,当然我写的时候是没这么顺利的,出过一些问题,不过错误在控制台会爆出来的,

把错误改掉就可以了
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值