热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Struts2框架图书管理系统

Struts2框架图书管理系统1.首先需要在原有的Struts2框架为基础。要在src下创建各个分层这分别需要在按层级建包。首先创建com包再在com包下建hnpi包再在com.

Struts2框架图书管理系统

1.首先需要在原有的Struts2框架为基础。
要在src下创建各个分层
在这里插入图片描述
这分别需要在按层级建包。首先创建com包再在com包下建hnpi包再在com.hnpi包下建action,been,dao,interceptor,service,util包,还要在com.hnpi.service,com.hnpi.dao下建impl包,如上图所示。
2.下面创建视图层,注意还是需要按层级,不同的视图需要放在创建不同的文件下:如图;
在这里插入图片描述
在这里,我们创建了book和user两个文件夹,用来区分不同的视图,两个文件夹下有booklist.jsp和login.jsp.其中的代码段如下:
login.jsp:

<%&#64; page language&#61;"java" import&#61;"java.util.*" pageEncoding&#61;"utf-8"%>
<%
String path &#61; request.getContextPath();
String basePath &#61; request.getScheme()&#43;"://"&#43;request.getServerName()&#43;":"&#43;request.getServerPort()&#43;path&#43;"/";
%>
">用户名&#xff1a;
密码&#xff1a;

booklist.jsp&#xff1a;

<%&#64; page language&#61;"java" import&#61;"java.util.*" pageEncoding&#61;"UTF-8"%>
<%&#64; taglib prefix&#61;"s" uri&#61;"/struts-tags" %>
<%
String path &#61; request.getContextPath();
String basePath &#61; request.getScheme()&#43;"://"&#43;request.getServerName()&#43;":"&#43;request.getServerPort()&#43;path&#43;"/";
%>

book/toAddBook&#39;>新增图书

ID书名作者ISBN出版社操作
更新  删除

下面要编写各包下action的代码了
首先action层下的代码如下&#xff1a;
BookAction.java:

package com.hnpi.action;import java.util.ArrayList;
import java.util.List;import javax.servlet.http.HttpServletRequest;import org.apache.struts2.ServletActionContext;import com.hnpi.bean.Book;
import com.hnpi.service.BookService;
import com.hnpi.service.impl.BookServiceImpl;
import com.opensymphony.xwork2.ActionSupport;public class BookAction extends ActionSupport {private Book book;public Book getBook() {return book;}public void setBook(Book book) {this.book &#61; book;}/*** 图书列表* &#64;return*/public String bookList() {BookService bookService &#61; new BookServiceImpl();List books &#61; new ArrayList();books &#61; bookService.selectBooks();//问题1:如果不通过request 设置属性的方式传值 可不可以通过传递 字符串(json字符串)的方式放在页面进行显示//问题2:action 传递给页面的json字符串 页面怎么处理?HttpServletRequest request &#61; ServletActionContext.getRequest();request.setAttribute("books", books);return "success";}}

LoginAction.java:

package com.hnpi.action;import java.util.Map;import javax.servlet.http.HttpSession;import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;public class LoginAction extends ActionSupport {private String name;private String pwd;public String getName() {return name;}public void setName(String name) {this.name &#61; name;}public String getPwd() {return pwd;}public void setPwd(String pwd) {this.pwd &#61; pwd;}public String login(){System.out.println(name&#43;":"&#43;pwd);if(name !&#61;null &&!"".equals(name) && pwd !&#61;null &&!"".equals(pwd)){//判断if(name.equals("fuxian")&&pwd.equals("123")){Map session &#61; ActionContext.getContext().getSession();session.put("user", name);return "success";}else{return "error";}}else{return "error";}}}

been层的代码如下&#xff1a;
Been.java:

package com.hnpi.bean;public class Book {private int id;private String bookName;private String bookAuthor;private String bookIsbn;private String bookPublish;public int getId() {return id;}public void setId(int id) {this.id &#61; id;}public String getBookName() {return bookName;}public void setBookName(String bookName) {this.bookName &#61; bookName;}public String getBookAuthor() {return bookAuthor;}public void setBookAuthor(String bookAuthor) {this.bookAuthor &#61; bookAuthor;}public String getBookIsbn() {return bookIsbn;}public void setBookIsbn(String bookIsbn) {this.bookIsbn &#61; bookIsbn;}public String getBookPublish() {return bookPublish;}public void setBookPublish(String bookPublish) {this.bookPublish &#61; bookPublish;}public Book() {super();}public Book(int id, String bookName, String bookAuthor, String bookIsbn,String bookPublish) {super();this.id &#61; id;this.bookName &#61; bookName;this.bookAuthor &#61; bookAuthor;this.bookIsbn &#61; bookIsbn;this.bookPublish &#61; bookPublish;}public String toString() {return "Book [bookAuthor&#61;" &#43; bookAuthor &#43; ", bookIsbn&#61;" &#43; bookIsbn&#43; ", bookName&#61;" &#43; bookName &#43; ", bookPublish&#61;" &#43; bookPublish&#43; ", id&#61;" &#43; id &#43; "]";}}

dao层的代码如下&#xff1a;
BookDao.java:

package com.hnpi.dao;import java.util.List;import com.hnpi.bean.Book;public interface BookDao {public List selectBooks();}

dao下的impl层代码如下&#xff1a;
BookDaoFileImpl.java

package com.hnpi.dao.impl;import java.util.List;import com.hnpi.bean.Book;
import com.hnpi.dao.BookDao;public class BookDaoFileImpl implements BookDao{public List selectBooks() {// TODO 读取文件的代码return null;}}

BookDaoImpl.java&#xff1a;

package com.hnpi.dao.impl;import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;import com.hnpi.bean.Book;
import com.hnpi.dao.BookDao;
import com.hnpi.util.DBUtil;public class BookDaoImpl implements BookDao {public List selectBooks() {Connection conn &#61; DBUtil.getConn();String sql &#61; "select * from book";PreparedStatement ps &#61; null;ResultSet rs &#61; null;List books &#61; new ArrayList();try {ps &#61; conn.prepareStatement(sql);rs &#61; ps.executeQuery();while(rs.next()){Book book &#61; new Book();book.setId(rs.getInt(1));book.setBookName(rs.getString(2));book.setBookAuthor(rs.getString(3));book.setBookIsbn(rs.getString(4));book.setBookPublish(rs.getString(5));books.add(book);}} catch (Exception e) {e.printStackTrace();} finally {DBUtil.closeConn(conn, ps, null);}return books;}}

BookDaoRedisImpl.java

package com.hnpi.dao.impl;import java.util.List;import com.hnpi.bean.Book;
import com.hnpi.dao.BookDao;public class BookDaoRedisImpl implements BookDao{public List selectBooks() {// TODO 访问缓存的代码return null;}}

interceptor层下的代码&#xff1a;
UserInterceptor.java&#xff1a;

package com.hnpi.interceptor;import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;public class UserInterceptor extends AbstractInterceptor{&#64;Overridepublic String intercept(ActionInvocation invocation) throws Exception {String user&#61;(String) ActionContext.getContext().getSession().get("user");if (user&#61;&#61;null||"".equals(user)) {return "fail";}return invocation.invoke();}}

service层下的代码&#xff1a;
BookService.java&#xff1a;

package com.hnpi.service;import java.util.List;import com.hnpi.bean.Book;public interface BookService {/*** 查询所有图书* &#64;return*/public List selectBooks();}

service层下impl的代码&#xff1a;
BookServiceImpl.java

package com.hnpi.service.impl;import java.util.List;import com.hnpi.bean.Book;
import com.hnpi.dao.BookDao;
import com.hnpi.dao.impl.BookDaoFileImpl;
import com.hnpi.dao.impl.BookDaoImpl;
import com.hnpi.service.BookService;public class BookServiceImpl implements BookService {public List selectBooks() {BookDao bookDao &#61; new BookDaoImpl();
// BookDao bookDao &#61; new BookDaoRedisImpl();
// BookDao bookDao &#61; new BookDaoFileImpl();return bookDao.selectBooks();}}

util层下代码&#xff1a;
DBUtil.java&#xff1a;
package com.hnpi.util;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class DBUtil {

public static Connection getConn() {String url &#61; "jdbc:sqlserver://localhost:1433;databaseName&#61;MyDB";String user &#61; "sa";String pwd &#61; "1";Connection conn &#61; null;try {Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");conn &#61; DriverManager.getConnection(url, user, pwd);} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (ClassNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();}return conn;
}public static void closeConn(Connection conn, PreparedStatement ps,ResultSet rs) {try {if (conn !&#61; null) {conn.close();}} catch (SQLException e) {e.printStackTrace();}try {if (ps !&#61; null) {ps.close();}} catch (SQLException e) {e.printStackTrace();}try {if (rs !&#61; null) {rs.close();}} catch (SQLException e) {e.printStackTrace();}}

}
最后需要配置struts.xml


/bookbookListbookList/user/login.jsp/user/login.jsp/book/bookList.jsp

以上就是Struts2框架下的图书管理系统方法和代码&#xff0c;希望可以对学者有所帮助。


推荐阅读
  • Java实战之电影在线观看系统的实现
    本文介绍了Java实战之电影在线观看系统的实现过程。首先对项目进行了简述,然后展示了系统的效果图。接着介绍了系统的核心代码,包括后台用户管理控制器、电影管理控制器和前台电影控制器。最后对项目的环境配置和使用的技术进行了说明,包括JSP、Spring、SpringMVC、MyBatis、html、css、JavaScript、JQuery、Ajax、layui和maven等。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • springmvc学习笔记(十):控制器业务方法中通过注解实现封装Javabean接收表单提交的数据
    本文介绍了在springmvc学习笔记系列的第十篇中,控制器的业务方法中如何通过注解实现封装Javabean来接收表单提交的数据。同时还讨论了当有多个注册表单且字段完全相同时,如何将其交给同一个控制器处理。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 本文介绍了使用PHP实现断点续传乱序合并文件的方法和源码。由于网络原因,文件需要分割成多个部分发送,因此无法按顺序接收。文章中提供了merge2.php的源码,通过使用shuffle函数打乱文件读取顺序,实现了乱序合并文件的功能。同时,还介绍了filesize、glob、unlink、fopen等相关函数的使用。阅读本文可以了解如何使用PHP实现断点续传乱序合并文件的具体步骤。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • 本文介绍了通过ABAP开发往外网发邮件的需求,并提供了配置和代码整理的资料。其中包括了配置SAP邮件服务器的步骤和ABAP写发送邮件代码的过程。通过RZ10配置参数和icm/server_port_1的设定,可以实现向Sap User和外部邮件发送邮件的功能。希望对需要的开发人员有帮助。摘要长度:184字。 ... [详细]
  • 本文介绍了如何使用C#制作Java+Mysql+Tomcat环境安装程序,实现一键式安装。通过将JDK、Mysql、Tomcat三者制作成一个安装包,解决了客户在安装软件时的复杂配置和繁琐问题,便于管理软件版本和系统集成。具体步骤包括配置JDK环境变量和安装Mysql服务,其中使用了MySQL Server 5.5社区版和my.ini文件。安装方法为通过命令行将目录转到mysql的bin目录下,执行mysqld --install MySQL5命令。 ... [详细]
  • 本文介绍了django中视图函数的使用方法,包括如何接收Web请求并返回Web响应,以及如何处理GET请求和POST请求。同时还介绍了urls.py和views.py文件的配置方式。 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • FeatureRequestIsyourfeaturerequestrelatedtoaproblem?Please ... [详细]
  • 开发笔记:Java是如何读取和写入浏览器Cookies的
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了Java是如何读取和写入浏览器Cookies的相关的知识,希望对你有一定的参考价值。首先我 ... [详细]
author-avatar
执笔W写下我们的故事
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有