自定义MVC03(利用框架开发项目)

1.思维导图(利用自定义mvc框架开发项目)

 

2.解决了配置文件可随意更改问题(补充昨日内容)

        2.1配置文件web.xml

                里面添加初始化参数<init-param></init-param>

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
  <display-name>JavaEE03</display-name>
  <!-- this -->
	 <servlet>
	 	<servlet-name>mvc</servlet-name>
	 	<servlet-class>com.zy.framework.DispatchServlet</servlet-class>
	 	<!-- 初始化参数 -->
	 	<init-param>
	 		<param-name>configurationLocation</param-name>
	 		<param-value>/mvc.xml</param-value>
	 	</init-param>
	 </servlet>
	 <servlet-mapping>
		 <servlet-name>mvc</servlet-name>
		 <url-pattern>*.action</url-pattern>
	 </servlet-mapping>
</web-app>

        2.2 在init里面进行更改

                this:指的是web.xml文件中<servlet></servlet>

​
@Override
	public void init() throws ServletException {
		try {
			//configModel = ConfigModelFactory.build();
			//配置的文件位置:web.xml
			String configurationLocation = this.getInitParameter("configurationLocation");
			if(configurationLocation==null||"".equals(configurationLocation)) {
				configurationLocation = "/zking.xml";
			}
			configModel = ConfigModelFactory.build(configurationLocation);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

​

 3.☆利用框架开发项目:

        3.1 :导入框架的jar

                

 

 

 

                最后我们就得到了自己写的jar包

 

                 创建一个新的项目,把我们刚刚的jar包导入进去,导入我们自己的jar包同时也要把其他的jar包导入进来,mvc1.jar是依赖与其他的jar包,不然会报错

        

         3.2配置框架的相关配置文件 web.xml

            1.mvc.xml放到源文件下方         

            2.web.xml中配置mvc.xml,让中央控制器加载mvc.xml建模

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
  <display-name>JavaEE_mvc_Test</display-name>
  	<!-- this -->
	 <servlet>
	 	<servlet-name>mvc</servlet-name>
	 	<servlet-class>com.zy.framework.DispatchServlet</servlet-class>
	 	<!-- 初始化参数 -->
	 	<init-param>
	 		<param-name>configurationLocation</param-name>
	 		<param-value>/mvc.xml</param-value>
	 	</init-param>
	 </servlet>
	 <servlet-mapping>
		 <servlet-name>mvc</servlet-name>
		 <url-pattern>*.action</url-pattern>
	 </servlet-mapping>
</web-app>

        3.3.业务开发

                1.原来的增删改

        2.解决方案 创建一个BaseDao

                把公共部分封装起来

package com.zy.dao;

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

import com.zy.util.DBAccess;
import com.zy.util.PageBean;

/**
 * 公共方法
 * @author zjjt
 *
 * @param <T>
 */
public class BaseDao<T> {
	
	/**
	 * 回调函数(匿名内部类)
	 */
	
	public interface CallBack<T>{
		public List<T> foreach(ResultSet rs) throws Exception;
	}
	
	
	
		
	/**
	 * 共用的方法用于执行sql语句实现增删改
	 * 通用编辑
	 * @param sql
	 * @return
	 */
	public int executeUpdate(String sql) {
		int n = 0;
		Connection con = null;
		PreparedStatement ps = null;
		ResultSet rs = null;
		try {
			//连接数据库
			con  = DBAccess.getConnection();
			//定义sql语句
			ps = con.prepareStatement(sql);
			n = ps.executeUpdate();
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			DBAccess.close(con, ps, rs);
		}
		return n;
	}
	
	


    /**
	 * 1.通用分页两个基本要素
	 *   1.1 需要知道满足条件的条目数
	 *   1.2查询满足条件指定页码的结果
	 * @throws Exception 
	 */
	
	public List<T> executeQuery(String sql,PageBean pageBean,CallBack<T> callBack) throws Exception{
		Connection con=null;
		PreparedStatement ps=null;
		ResultSet rs=null;
		try {
			con=DBAccess.getConnection();
//			如果用户需要分页的话将用户传递过来的sql语句进行转换
			if(null!=pageBean&&pageBean.isPagination()) {
				String countSql = this.countSql(sql);
				ps=con.prepareStatement(countSql);
				rs=ps.executeQuery();
				if(rs.next()) {
					pageBean.setTotal(rs.getInt(1));
				}
				//开始查询结果
				String pageSql = this.pageSql(sql, pageBean);
				ps=con.prepareStatement(pageSql);
			}else {
				//用户不需要分页
				ps=con.prepareStatement(sql);
			}
			rs=ps.executeQuery();
			
		} catch (Exception e) {
			e.printStackTrace();
		}
		return callBack.foreach(rs);
	}
	
	
	
	/**
	 * 将用户传递过来的sql语句进行添加修改
	 * 将用户的sql语句转化为分页sql语句
	 */

	private String pageSql(String sql,PageBean pageBean) {
		String pageSql="select * from ("+sql+")a limit "+pageBean.startIndex()+","+pageBean.getRows();
		return pageSql;
	}
	
	/**
	 * 将用户sql语句修改为查询满足条件的总条目数sql语句
	 * @param sql
	 * @return
	 */
	private String countSql(String sql) {
		String countSql="select count(*) from ("+sql+") a";
		return countSql;
	}
	
	
	
	
	
	
}

       改良后: 现在增删改查

        StuDao继承BaseDao

package com.zy.dao;

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

import com.zy.dao.BaseDao.CallBack;
import com.zy.util.PageBean;
import com.zy.util.StringUtils;
import com.zy.entity.Student;
import com.zy.util.DBAccess;

public class StuDao extends BaseDao<Student>{
		
	/**
	 * 增加
	 * @param stu 学生对象
	 * @return 影响行数
	 */
	public int add(Student stu) {
		String sql = "insert into t_student(sname,sname_pinyin,age,remark) values('"+stu.getSname()+"','"+stu.getSnamePinyin()+"','"+stu.getAge()+"','"+stu.getRemark()+"')";
		return this.executeUpdate(sql);
	}
	
	
	/**
	 * 修改
	 * @param stu 学生对象
	 * @return 影响行数
	 */
	public int edit(Student stu) {
		String sql = "update t_student set sname='"+stu.getSname()+"',sname_pinyin='"+stu.getSnamePinyin()+"',age='"+stu.getAge()+"',remark='"+stu.getRemark()+"' where sid='"+stu.getSid()+"'";
		return this.executeUpdate(sql);
	}
	
	/**
	 * 删除
	 * @param stu 学生对象
	 * @return 影响行数
	 */
	public int delete(Student stu) {
		String sql = "delete from t_student where sid='"+stu.getSid()+"'";
		return this.executeUpdate(sql);
	}
	
	
	
	/**
	 * 查询
	 * @param stu 学生对象
	 * @param pg 分页
	 * @return 结果集
	 * @throws Exception 处理异常
	 */
	public List<Student> list(Student stu,PageBean pg) throws Exception{
		String sql = "select * from t_student where 1=1";
		if(StringUtils.isNotBlank(stu.getSname())) {
			sql = " and sname like '%"+stu.getSname()+"%'";
		}
        if(stu.getSid()!=0) {
			sql+=" and sid='"+stu.getSid()+"'";
		}
		return this.executeQuery(sql, pg, new CallBack<Student>() {
			@Override
			public List<Student> foreach(ResultSet rs) throws Exception {
				List<Student> ls = new ArrayList<Student>();
				Student s = null;
				while(rs.next()) {
					s = new Student();
					s.setSid(rs.getInt("sid"));
					s.setSname(rs.getString("sname"));
					s.setAge(rs.getInt("age"));
					s.setRemark(rs.getString("remark"));
					ls.add(s);
				}
				return ls;
			}
			
		});
	}
	

}

        

 在StuAction里实行

package com.zy.web;

import java.util.List;

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

import com.zy.dao.StuDao;
import com.zy.entity.Student;
import com.zy.framework.ActionSupport;
import com.zy.framework.ModelDriver;
import com.zy.util.PageBean;

public class StuAction extends ActionSupport implements ModelDriver<Student> {
	
	Student stu = new Student();
	StuDao sd = new StuDao();
	
	@Override
	public Student getModel() {
		// TODO Auto-generated method stub
		return stu;
	}
	
	public String add(HttpServletRequest req, HttpServletResponse resp) {
		try {
			sd.add(stu);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return "toList";
	}
	public String delete(HttpServletRequest req, HttpServletResponse resp) {
		try {
			sd.delete(stu);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return "toList";
	}
	public String edit(HttpServletRequest req, HttpServletResponse resp) {
		try {
			sd.edit(stu);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return "toList";
	}
	
	public String list(HttpServletRequest req, HttpServletResponse resp) {
		PageBean pageBean = new PageBean();
		pageBean.setRequest(req);
		try {
			List<Student> list = sd.list(stu, pageBean);
			req.setAttribute("stu", list);
			req.setAttribute("pageBean", pageBean);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return "list";
	}
	
	public String toEdit(HttpServletRequest req, HttpServletResponse resp) {
//		如果跳转的是新增界面无需查询,如果跳转的是修改界面,需要查询当前bid对应的数据,回显到界面
		if(stu.getSid()!= 0) {
			try {
				List<Student> list = sd.list(stu, null);
				req.setAttribute("s", list.get(0));
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		return "toEdit";
	}
	
	
	

}

bookList.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <%@ taglib uri="/zking" 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>Insert title here</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>

	<center>
			<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">
		<tr>
			<td>学生编号</td>
			<td>学生姓名</td>
			<td>学生简写</td>
			<td>学生年龄</td>
			<td>备注</td>
			<td>操作</td>
		</tr>
		<c:forEach items="${stu }" var="s">
			<tr>
			<td>${s.sid }</td>
			<td>${s.sname}</td>
			<td>${s.snamePinyin }</td>
			<td>${s.age}</td>
			<td>${s.remark }</td>
			<td>
				<a href="${pageContext.request.contextPath }/book.action?methodName=toEdit&sid=${s.sid}">修改</a>
				<a href="${pageContext.request.contextPath }/book.action?methodName=delete&sid=${s.sid}">删除</a>
			</td>
			</tr>
		</c:forEach>
			
	</table>
	<z:pagination pageBean="${pageBean }"/>
	</center>
</body>
</html>

运行结果

 

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值