J2EE自定义mvc【框架配置及功能】

这篇具有很好参考价值的文章主要介绍了J2EE自定义mvc【框架配置及功能】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、配置步骤

二、配置框架前三步

导入相应的jar

导入相应的Class

导入xml文件

三、优化基本操作(增删改)

1、基础优化

编写实体类

编写BookDao类

优化BookDao

JUnit测试

2、后台优化

3、前端优化


一、配置步骤

  1. 将框架打成jar包,然后导入新工程,并且把框架的依赖jar包导入进去
  2. 将分页标签相关文件、及相关助手类导入
  3. 框架的配置文件添加、以及web.xml的配置-以后开源框架的使用从这一步开始
  4. 完成Book实体类及bookDao的编写
  5. 完成通用的增删改方法
  6. 完成BookAction
  7. 完成mvc.xml的配置
  8. 完成前台代码的编写

二、配置框架前三步

导入相应的jar

J2EE自定义mvc【框架配置及功能】,java-ee,mvc,java

导入之后我们选中所有的jar包===》右键===》Build Path===》Add to Build Path

J2EE自定义mvc【框架配置及功能】,java-ee,mvc,java

导入相应的Class

J2EE自定义mvc【框架配置及功能】,java-ee,mvc,java

导入xml文件

<?xml version="1.0" encoding="UTF-8"?>
<config>
	<action path="/book" type="com.tgq.web.BookAction">
		<forward name="list" path="/bookList.jsp" redirect="false" />
		<forward name="toList" path="/book.action?methodName=list"
			redirect="true" />
		<forward name="toEdit" path="/bookEdit.jsp" redirect="false" />
	</action>

</config>

测试我们的数据库能否连接

J2EE自定义mvc【框架配置及功能】,java-ee,mvc,java

三、优化基本操作(增删改)

1、基础优化

编写实体类

package com.tgq.entity;

/**
 * 实体类
 * 
 * @author tgq
 *
 */
public class Book {
	private int bid;
	private String bname;
	private float price;

	public int getBid() {
		return bid;
	}

	public void setBid(int bid) {
		this.bid = bid;
	}

	public String getBname() {
		return bname;
	}

	public void setBname(String bname) {
		this.bname = bname;
	}

	public float getPrice() {
		return price;
	}

	public void setPrice(float price) {
		this.price = price;
	}

	@Override
	public String toString() {
		return "Book [bid=" + bid + ", bname=" + bname + ", price=" + price + "]";
	}

	public Book(int bid, String bname, float price) {
		super();
		this.bid = bid;
		this.bname = bname;
		this.price = price;
	}

	public Book() {
		// TODO Auto-generated constructor stub
	}
}

编写BookDao类

编写增删改查的方法

package com.tgq.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.util.List;

import com.tgq.entity.Book;
import com.tgq.util.BaseDao;
import com.tgq.util.DBAccess;
import com.tgq.util.PageBean;
import com.tgq.util.StringUtils;

public class BookDao extends BaseDao<Book> {

	public List<Book> list(Book book, PageBean pageBean) throws Exception {
		String sql = "select * from t_mvc_book where 1=1 ";
		String bname = book.getBname();
		int bid = book.getBid();
		// 判断是否为空
		if (StringUtils.isNotBlank(bname)) {
			sql += " and bname like '%" + bname + "%'";
		}
		// 判断前台是否传bid
		if (bid != 0) {
			sql += " and bid=" + bid;
		}

		return super.executeQuery(sql, Book.class, pageBean);
	}

	/**
	 * 增加Book的方法
	 * 
	 * @param book
	 *            实体类
	 * @return
	 * @throws Exception
	 *             万能异常
	 */
	public int addBook(Book book) throws Exception {
		String sql = "insert into t_mvc_book values(?,?,?)";
		Connection conn = DBAccess.getConnection();
		PreparedStatement ps = conn.prepareStatement(sql);
		ps.setObject(1, book.getBid());
		ps.setObject(2, book.getBname());
		ps.setObject(3, book.getPrice());

		return ps.executeUpdate();

	}

	/**
	 * 删除Book的方法 ,根据id删除
	 * 
	 * @param book
	 *            实体类
	 * @return
	 * @throws Exception
	 *             万能异常
	 */
	public int delBook(Book book) throws Exception {
		String sql = "delete from t_mvc_book where bid=?";
		Connection conn = DBAccess.getConnection();
		PreparedStatement ps = conn.prepareStatement(sql);
		ps.setObject(1, book.getBid());

		return ps.executeUpdate();

	}

	/**
	 * 修改Book的方法
	 * 
	 * @param book
	 *            实体类
	 * @return
	 * @throws Exception
	 *             万能异常
	 */
	public int updateBook(Book book) throws Exception {
		String sql = "update t_mvc_book set bname=?,price=? where bid=?";
		Connection conn = DBAccess.getConnection();
		PreparedStatement ps = conn.prepareStatement(sql);
		ps.setObject(1, book.getBname());
		ps.setObject(2, book.getPrice());
		ps.setObject(3, book.getBid());

		return ps.executeUpdate();

	}

}

1、在增删改的方法里面我们这两行代码是一样的、重复的

		Connection conn = DBAccess.getConnection();
		PreparedStatement ps = conn.prepareStatement(sql);

2、代码逻辑是重复的===》sql占位符赋值

        ps.setObject(1, book.getBid());
		ps.setObject(2, book.getBname());
		ps.setObject(3, book.getPrice());

怎么解决?BaseDao
进行一个通用的增删改的方法

/**
	 * 通用的增删改方法
	 * 
	 * @param sql
	 *            数据库sql语句
	 * @param t
	 *            对应表的实体类
	 * @param attrs
	 *            要修改的属性值
	 * @return
	 * @throws Exception
	 *             万能异常
	 */
	public int executeUpdate(String sql, T t, String[] attrs) throws Exception {
		Connection conn = DBAccess.getConnection();
		PreparedStatement ps = conn.prepareStatement(sql);
		//利用fori 下标来进行?的赋值
		for (int i = 0; i < attrs.length; i++) {
			Field field = t.getClass().getDeclaredField(attrs[i]);
			// 打开权限
			field.setAccessible(true);
			
			ps.setObject(i + 1, field.get(t));

		}

		return ps.executeUpdate();
	}


 

优化BookDao

我们在BaseDao类里面增加了一个通用的增删改的方法,我们在BookDao里面利用起来

	/**
	 * 增加Book的方法
	 * 
	 * @param book
	 *            实体类
	 * @return
	 * @throws Exception
	 *             万能异常
	 */
	public int addBook(Book book) throws Exception {
		String sql = "insert into t_mvc_book values(?,?,?)";
		return super.executeUpdate(sql, book, new String[] { "bid", "bname", "price" });
	}

	/**
	 * 删除Book的方法 ,根据id删除
	 * 
	 * @param book
	 *            实体类
	 * @return
	 * @throws Exception
	 *             万能异常
	 */
	public int delBook(Book book) throws Exception {
		String sql = "delete from t_mvc_book where bid=?";
		return super.executeUpdate(sql, book, new String[] { "bid" });

	}

	/**
	 * 修改Book的方法
	 * 
	 * @param book
	 *            实体类
	 * @return
	 * @throws Exception
	 *             万能异常
	 */
	public int updateBook(Book book) throws Exception {
		String sql = "update t_mvc_book set bname=?,price=? where bid=?";
		return super.executeUpdate(sql, book, new String[] { "bname", "price", "bid" });

	}

JUnit测试

 选中我们的类名===》ctrl+N===》JUnit Test Case===》选中顶部的New JUnit 4 test===》Next

J2EE自定义mvc【框架配置及功能】,java-ee,mvc,java

勾选BookDao===》Finish 

J2EE自定义mvc【框架配置及功能】,java-ee,mvc,java

BookDaoTest测试

package com.tgq.dao;

import static org.junit.Assert.*;

import java.util.List;

import org.junit.Test;

import com.tgq.entity.Book;
import com.tgq.util.PageBean;

public class BookDaoTest {

	private BookDao bookDao = new BookDao();

	@Test
	public void testList() throws Exception {
		Book book = new Book();
		book.setBname("52");
		PageBean pageBean = new PageBean();
		// pageBean.setPage(2);
		List<Book> list = bookDao.list(book, pageBean);
		for (Book b : list) {
			System.out.println(b);
		}

	}

	@Test
	public void testAddBook() throws Exception {
		Book book = new Book();
		book.setBid(52);
		book.setBname("5252");
		book.setPrice(12f);
		bookDao.addBook(book);
	}

	@Test
	public void testDelBook() throws Exception {
		Book book = new Book();
		book.setBid(52);
		bookDao.delBook(book);
	}

	@Test
	public void testUpdateBook() throws Exception {
		Book book = new Book();
		book.setBid(52);
		book.setBname("5252");
		book.setPrice(19f);
		bookDao.updateBook(book);
	}

}

测试结果:

J2EE自定义mvc【框架配置及功能】,java-ee,mvc,java

2、后台优化

我们新建一个web包,在里面新建一个BookAction类(class),继承ActionSupport,实现

ModelDriver接口,编写

J2EE自定义mvc【框架配置及功能】,java-ee,mvc,java

package com.tgq.web;

import java.util.List;

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

import com.tgq.dao.BookDao;
import com.tgq.entity.Book;
import com.tgq.util.PageBean;
import com.zking.framework.ActionSupport;
import com.zking.framework.ModelDriver;

public class BookAction extends ActionSupport implements ModelDriver<Book> {

	private Book book = new Book();
	private BookDao bookDao = new BookDao();

	// 查询 bookList.jsp
	public String list(HttpServletRequest req, HttpServletResponse resp) throws Exception {

		PageBean pageBean = new PageBean();

		pageBean.setRequest(req);

		List<Book> list = bookDao.list(book, pageBean);
		req.setAttribute("list", list);
		req.setAttribute("pageBean", pageBean);
		return "list";
	}

	// 编辑界面跳转 bookEdit.jsp
	public String toEdit(HttpServletRequest req, HttpServletResponse resp) throws Exception {
		// 前提
		if (book.getBid() != 0) {
			List<Book> list = bookDao.list(book, null);// 不需要分页
			req.setAttribute("b", list.get(0));
		}

		return "toEdit";
	}

	// 增加 重定向到book.action?methodName=list
	public String add(HttpServletRequest req, HttpServletResponse resp) throws Exception {
		bookDao.addBook(book);
		return "toEdit";
	}

	// 删除
	public String del(HttpServletRequest req, HttpServletResponse resp) throws Exception {
		bookDao.delBook(book);
		return "toEdit";
	}

	// 修改
	public String update(HttpServletRequest req, HttpServletResponse resp) throws Exception {
		bookDao.updateBook(book);
		return "toEdit";
	}

	@Override
	public Book getModel() {

		return book;
	}

}

我们编写jsp界面

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%@ taglib uri="http://jsp.veryedu.cn" prefix="z"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!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=UTF-8">
<link
	href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/4.5.0/css/bootstrap.css"
	rel="stylesheet">
<script
	src="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/4.5.0/js/bootstrap.js"></script>
<title>书籍列表</title>
<style type="text/css">
.page-item input {
	padding: 0;
	width: 40px;
	height: 100%;
	text-align: center;
	margin: 0 6px;
}

.page-item input, .page-item b {
	line-height: 38px;
	float: left;
	font-weight: 400;
}

.page-item.go-input {
	margin: 0 10px;
}
</style>
</head>
<body>
	<form class="form-inline"
		action="${pageContext.request.contextPath }/book.action?methodName=list"
		method="post">
		<div class="form-group mb-2">
			<input type="text" class="form-control-plaintext" name="bname"
				placeholder="请输入书籍名称">
			<!-- 			<input name="rows" value="20" type="hidden"> -->
			<!-- 不想分页 -->
			<input name="pagination" value="false" type="hidden">
		</div>
		<button type="submit" class="btn btn-primary mb-2">查询</button>
		<a class="btn btn-primary mb-2"
			href="${pageContext.request.contextPath }/book.action?methodName=toEdit">新增</a>
	</form>

	<table class="table table-striped">
		<thead>
			<tr>
				<th scope="col">书籍ID</th>
				<th scope="col">书籍名</th>
				<th scope="col">价格</th>
				<th scope="col">操作</th>
			</tr>
		</thead>
		<tbody>
			<c:forEach var="b" items="${books }">
				<tr>
					<td>${b.bid }</td>
					<td>${b.bname }</td>
					<td>${b.price }</td>
					<td><a
						href="${pageContext.request.contextPath }/book.action?methodName=toEdit&bid=${b.bid}">修改</a>
						<a
						href="${pageContext.request.contextPath }/book.action?methodName=delete&bid=${b.bid}">删除</a>
					</td>
				</tr>
			</c:forEach>
		</tbody>
	</table>
	<!-- 这一行代码就相当于前面分页需求前端的几十行了 -->
	<z:page pageBean="${pageBean }"></z:page>

</body>
</html>

增加,修改的jsp界面。

判断你点击的是否是增加还是修改

action="${pageContext.request.contextPath }/book.action?methodName=${empty b ? 'add' : 'edit'}"
<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%@ taglib uri="http://jsp.veryedu.cn" prefix="z"%>	
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>	
<!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=UTF-8">
<link
	href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/4.5.0/css/bootstrap.css"
	rel="stylesheet">
<script
	src="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/4.5.0/js/bootstrap.js"></script>
<title>书籍新增/修改</title>
</head>
<body>
	<form class="form-inline"
		action="${pageContext.request.contextPath }/book.action?methodName=${empty b ? 'add' : 'edit'}" method="post">
		书籍ID:<input type="text" name="bid" value="${b.bid }"><br>
		书籍名称:<input type="text" name="bname" value="${b.bname }"><br>
		书籍价格:<input type="text" name="price" value="${b.price }"><br>
		<input type="submit">
	</form>


</body>
</html>

3、前端优化

我们运行书籍列表

进行一个搜索,新增、修改、删除

J2EE自定义mvc【框架配置及功能】,java-ee,mvc,java

我们删除ID:16、22

J2EE自定义mvc【框架配置及功能】,java-ee,mvc,java

新增一个

ID:12
书籍名:圣墟12
价格:123 

J2EE自定义mvc【框架配置及功能】,java-ee,mvc,java

修改ID:12
书籍名:圣墟1234
价格:12345

J2EE自定义mvc【框架配置及功能】,java-ee,mvc,java

希望对你们有用!!!文章来源地址https://www.toymoban.com/news/detail-525832.html

到了这里,关于J2EE自定义mvc【框架配置及功能】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • J2EE&反射

    目录 一.什么是反射        用实体类Student做示范 三.反射实例化 四.反射动态方法调用 五.反射读写属性 反射java语言中的一种机制,通过这种机制可以动态的实例化对象,读写属性,调用方法 二.类类 Class.forName(完整类名) 类名 .class 对象 .getClass        用实体类Student做示范

    2024年02月16日
    浏览(44)
  • J2EE&XML建模

    目录 用一个xml-config文件实例: 先看config.xml文件 再看 ActionModel ConfigModel ActionNotFoundException ForwardNotFoundException ConfigModelFactory ActionDuplicateDefinitionException ForwardDuplicateDefinitionException InvalidPathException 用一个xml-config文件实例:  ActionModel ConfigModel ForwardModel      ActionNotFoundExcepti

    2024年02月16日
    浏览(39)
  • J2EE&通用分页02

    目录 一.重构-提取公用方法            1.为了进行公共方法的抽取,需要找出上面实习中的可通用部分,和差异化部分     2.公用方法封装思路       3. 具体实现 二.分页标签 2.1 准备一个Servlet  3.2 结果展示页面 三. 过滤器解决中文乱码问题 四.加入分页功能 四.封装分

    2024年02月15日
    浏览(45)
  • J2EE项目部署与发布(Windows版本)

    目录 一、会议OA单体项目Windows部署 1.1 数据测试 1.2 项目部署 1.3 报错解决 1.4 最终效果 二、spa前后端分离项目Windows部署 2.1 后端代码测试 2.2 前端代码测试 2.3 项目部署 2.3.1 数据导入 2.3.2 后端部署 2.3.3 前端部署 2.3.3.1 Node.js环境配置 2.3.4 端口问题解决 2.3.4.1 method1 2.3.4.2 meth

    2024年02月07日
    浏览(45)
  • J2EE项目部署与发布(Linux版本)

    目录 一.jdktomcat安装 1.jdk的安装  1.2解压对应的安装包 1.3配置环境变量  2.tomcat的安装  二.mysql的安装 三.后端接口部署  后端部署 导入war包 修改端口  开启访问 1.jdk的安装 登录VMware Workstation Pro 然后连接MobaXterm      将 jdk tomcat mysql 导入到MobaXterm   1.2解压对应的安装包  

    2024年02月06日
    浏览(35)
  • 虚拟机部署与发布J2EE项目(Linux版本)

                                                      🎬 艳艳耶✌️:个人主页                                                   🔥 个人专栏 :《Spring与Mybatis集成整合》《Vue.js使用》                                                     ⛺️ 越努力 ,越幸

    2024年02月06日
    浏览(46)
  • J2EE,Java EE,Jakarta EE 命名之间的恩恩怨怨

      简单来说,上面所有的名字指的都是一个东西 Java Platform, Enterprise Edition 上面的几个名词都是下面的内容的简写: J2EE(Java 2 Platform, Enterprise Edition) Java EE (Java Platform, Enterprise Edition) Jakarta EE(Jakarta Enterprise Edition) 上面的排序是按照时间演进来进行排序。   1998年12月,SUN公司发

    2023年04月26日
    浏览(44)
  • 14天学会:基于J2EE的JAVA WEB基础

    手把手教你:基于Django的新闻文本分类可视化系统(文本分类由bert实现) 手把手教你:基于python的文本分类(sklearn-决策树和随机森林实现) 手把手教你:岩石样本智能识别系统 本文通过一个14天的学习文档教会大家学会 基于J2EE的JAVA WEB基础 本次上传的资源比较大,因此分

    2024年02月15日
    浏览(65)
  • 小研究 - J2EE 应用服务器的软件老化测试研究

    软件老化现象是影响软件可靠性的重要因素,长期运行的软件系统存在软件老化现象,这将影响整个业务系统的正常运行,给企事业单位带来无可估量的经济损失。软件老化出现的主要原因是操作系统资源消耗殆尽,导致应用系统的性能下降甚至崩溃或宕机。文中监测J2EE 应

    2024年02月11日
    浏览(38)
  • 【Linux】虚拟机部署与发布J2EE项目(Linux版本)

    前期准备工作 先创建一个文件夹用于存放我们的文件,把需要用到的环境都拷进去 1.jdk tar -zxvf jdk-8u151-linux-x64.tar.gz 2.配置环境变量 进入path文件进行编辑 vim /etc/profile 输入配置jdk文件代码(JAVA_HOME后面填写自己所解压的JDK路径) export JAVA_HOME=/root/java/tools/jdk1.8.0_151 export JRE_

    2024年02月06日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包