自定义MVC二

自定义mvc招聘信息综合案例

前言

前面已经了解了通用分页到自定义MVC的演变过程 其中包含了很多东西 这里就不再描述了
感兴趣的可以自己去看下

通用分页上:点我
通用分页上:点我
自定义MVC:点我
通用分页进阶版:点我

那么今天我们来练习用写好的MVC框架来实现 招聘信息的一个案例

准备阶段

还是老样子导入我们所需需要的包 到lib下面
在这里插入图片描述

还有我们的辅助类

在这里插入图片描述
pageTag就不用多说了吧 用于拼接页面的JSP代码从而实现页面的简化

在这里插入图片描述

流程

把我们前面写好了的中央控制器 还有自控制器C过来

在这里插入图片描述

前面已经写好了分页的方法 还有dao方法的简便话 我们只需要用就行了
我们要写的是招聘信息的案列
所以需要一个实体类 Recruiment 封装好 写上一个无参的构造方法 还有toString方法 有参的构造方放

package com.zhuchenxi.entity;

import java.io.Serializable;
import java.util.Date;
/**
 * 招聘信息的实体类
 * @author 小曦
 *
 * http://www.javaxl.com
 */
public class Recruitment{


	private String id;
	private String job;
	private String company;
	private String address;
	private String salary;
	private String url;
	private String limitd;
	private Date time;
	private String desc;
	private String jobHandle;
	private String addressHandle;
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getJob() {
		return job;
	}
	public void setJob(String job) {
		this.job = job;
	}
	public String getCompany() {
		return company;
	}
	public void setCompany(String company) {
		this.company = company;
	}
	public String getAddress() {
		return address;
	}
	public void setAddress(String address) {
		this.address = address;
	}
	public String getSalary() {
		return salary;
	}
	public void setSalary(String salary) {
		this.salary = salary;
	}
	public String getLimitd() {
		return limitd;
	}
	public void setLimit(String limitd) {
		this.limitd = limitd;
	}
	public Date getTime() {
		return time;
	}
	public void setTime(Date time) {
		this.time = time;
	}
	
	
	
	public String getUrl() {
		return url;
	}
	public void setUrl(String url) {
		this.url = url;
	}
	public String getDesc() {
		return desc;
	}
	public void setDesc(String desc) {
		this.desc = desc;
	}
	public String getJobHandle() {
		return jobHandle;
	}
	public void setJobHandle(String jobHandle) {
		this.jobHandle = jobHandle;
	}
	public String getAddressHandle() {
		return addressHandle;
	}
	public void setAddressHandle(String addressHandle) {
		this.addressHandle = addressHandle;
	}
	
	
	
	@Override
	public String toString() {
		return "Recruitment [id=" + id + ", job=" + job + ", company=" + company + ", address=" + address + ", salary="
				+ salary + ", url=" + url + ", limitd=" + limitd + ", time=" + time + ", desc=" + desc + ", jobHandle="
				+ jobHandle + ", addressHandle=" + addressHandle + "]";
	}
	public Recruitment(String id, String job, String company, String address, String salary, String url, String limitd,
			Date time, String desc, String jobHandle, String addressHandle) {
		this.id = id;
		this.job = job;
		this.company = company;
		this.address = address;
		this.salary = salary;
		this.url = url;
		this.limitd = limitd;
		this.time = time;
		this.desc = desc;
		this.jobHandle = jobHandle;
		this.addressHandle = addressHandle;
	}
	public Recruitment() {}
}

接下来开始写我们的dao方法 RtDao
写RtDao的时候要继承我们之前写好的类BaseDao

在BaseDao里面有我们写好的便捷方法executeQuery list带一个泛型K 这样我们想传什么实体类都可以了 方法里卖带参数sql 还有我们准备反射实力化对象的参数clz 以及我们分页的参数 pagebean

public List<K> executeQuery(String sql, Class clz,PageBean pagebean) throws Exception{
		List<K> ls=new ArrayList<K>();
		
		Connection con = DBAccess.getConnection();
		
		PreparedStatement ps = con.prepareStatement(sql);
		
		ResultSet rs=null;
		if(pagebean!=null && pagebean.isPagination()) {
		//想分页
			String countSql=getCountSql(sql);
			ps = con.prepareStatement(countSql);
			rs=ps.executeQuery();
			if(rs.next()) {
				pagebean.setTotal(rs.getObject(1).toString());
			}
			//展示想要看到的数据 比如说第三条的数据
			String pageSql=getPageSql(sql,pagebean);
			ps = con.prepareStatement(pageSql);
			rs=ps.executeQuery();
		}else {
		//不想分页
			ps = con.prepareStatement(sql);
			rs=ps.executeQuery();
		}
		
		while(rs.next()) {
			//ls.add(new Book(rs.getInt("bid"), rs.getString("bname"), rs.getString("price")));
			K k=(K)clz.newInstance();
			//Field[] fields = clz.getDeclaredFields();
			for (Field f : clz.getDeclaredFields()) {
				f.setAccessible(true);
				f.set(k, rs.getObject(f.getName()));
			}
			ls.add(k);
		}
		DBAccess.close(con, ps, rs);
		return ls;
	}

Rtdao方法里面包括了 查询所有模糊查询

list带的两个参数 是实体类招聘信息 还有分页
返回的时候调用返回return super.executeQuery(sql, r.getClass(), pageBean);

public List<Recruitment> list(Recruitment r,PageBean pageBean) throws Exception{
		String name=r.getCompany();
		String id=r.getId();
		String sql="select * from t_solr_job where true ";
		if(name!=null) {
			sql+=" and company like '%"+name+"%'";
		}
		if(id!=null) {
			sql+=" and id='"+id+"'";
		}
		return super.executeQuery(sql, r.getClass(), pageBean);
	}

增加

public int add(Recruitment r) throws Exception{
		String sql="insert into t_solr_job values(?,?,?,?,?,?,?,now(),?,?,?)";
		return super.executeUpdate(sql, r,new String[] {"id","job","company","address","salary","url","limitd","desc","jobHandle","addressHandle"} );
		
	}

删除

public int del(Recruitment r) throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException, SQLException {
		String sql="delete from t_solr_job where id=?";
		return super.executeUpdate(sql, r, new String[] {"id"});
	}

修改

	public int edit(Recruitment r) throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException, SQLException{
		String sql="update t_solr_job set `job`=?,`company`=?,`address`=?,`salary`=?,`url`=?,`limitd`=?,`desc`=?,`jobHandle`=?,`addressHandle`=? where `id`=?";
		return super.executeUpdate(sql, r,new String[] {"job","company","address","salary","url","limitd","desc","jobHandle","addressHandle","id"} );
	}

完了之后我们需要再写一个RecruitmenServlet配置在我们的MVC.xml文件里面进行截取

package com.zhuchenxi.action;

import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import com.zhuchenxi.dao.RtDao;
import com.zhuchenxi.entity.Recruitment;
import com.zhuchenxi.framework.ActionSupport;
import com.zhuchenxi.framework.ModelDriven;
import com.zhuchenxi.util.PageBean;


public class RecruitmentServlet extends ActionSupport implements ModelDriven<Recruitment>{

	private static final long serialVersionUID = 1L;
	
	private Recruitment r=new Recruitment();

	public RtDao rd=new RtDao();
	
	public String list(HttpServletRequest req, HttpServletResponse resp) throws Exception {
		Recruitment re=new Recruitment();
		req.setCharacterEncoding("utf-8");
		String name=req.getParameter("name");
		re.setCompany(name);
		
		PageBean pageBean=new PageBean();
		pageBean.setRequest(req);

		req.setAttribute("pageBean", pageBean);
		try {
			List<Recruitment> ls= rd.list(re, pageBean);
			req.setAttribute("recruitment", ls);
			req.setAttribute("name", name);
			req.getRequestDispatcher("/index.jsp").forward(req, resp);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return "list";
	}

	public String add(HttpServletRequest req, HttpServletResponse resp) throws Exception {
		rd.add(r);
		return "toList";
	}
	
	public String del(HttpServletRequest req, HttpServletResponse resp) throws Exception {
		rd.del(r);
		return "toList";
	}
	
	public String edit(HttpServletRequest req, HttpServletResponse resp) throws Exception {
		rd.edit(r);
		return "toList";
	}
	
	public String toEdit(HttpServletRequest req, HttpServletResponse resp) throws Exception {
		Recruitment re=this.rd.list(r, null).get(0);
		req.setAttribute("r", re);
		return "toEdit";
	}
	
	public String one(HttpServletRequest req, HttpServletResponse resp) throws Exception {
		Recruitment re=this.rd.list(r, null).get(0);
		req.setAttribute("Recruitment", re);
		return "toOne";
	}
	
	@Override
	public Recruitment getModel() {
		// TODO Auto-generated method stub
		return r;
	}

接下是配置的路径

<?xml version="1.0" encoding="UTF-8"?>
<config>
	<action path="/recruitment" type="com.zhuchenxi.action.RecruitmentServlet">
		<forward name="list" path="/index.jsp" redirect="false" />
		<forward name="toOne" path="details.jsp" redirect="" />
		<forward name="toEdit" path="Edit.jsp" redirect="false" />
		<forward name="toList" path="/recruitment.action?methodName=list" redirect="" />
	</action>
</config>

接下来就写我们的页面了

index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <%@taglib prefix="z" uri="/zhuchenxi" %>
<!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>
<form class="form-inline" action="${pageContext.request.contextPath }/recruitment.action?methodName=list" method="post">
  <div class="form-group mb-2">
    <input type="text"  class="form-control-plaintext" name="name" value="${name }"  placeholder="请输入公司名称">
  </div>
  <button type="submit" class="btn btn-primary mb-2">查询</button>
  <a href="add.jsp" class="btn btn-primary mb-2 ml-4">增加</a>
</form>

	<table  class="table table-striped">
		<tr>
			<td scope="col">职位</td>
			<td scope="col">公司</td>
			<td scope="col">工作地址</td>
			<td scope="col">薪资</td>
			<td scope="col">学历要求</td>
			<td scope="col">爬取时间</td>
			<td scope="col">查看详情</td>
		</tr>
		<c:forEach items="${recruitment}" var="r" >
			<tr>
			<td>${r.job}</td>
			<td>${r.company }</td>
			<td>${r.address }</td>
			<td>${r.salary }</td>
			<td>${r.limitd }</td>
			<td>${r.time }</td>
			<td>
				<a href="${pageContext.request.contextPath }/recruitment.action?methodName=del&id=${r.id}" class="btn btn-danger mb-2 ml-4" >删除</a>
				<a href="${pageContext.request.contextPath }/recruitment.action?methodName=toEdit&id=${r.id}" class="btn btn-danger mb-2 ml-4" >修改</a>
			</td>
		</tr>
		</c:forEach>
	</table>
	 <z:page pageBean="${pageBean }"></z:page> 
</body>
</html>

增加页面的 样式就不弄了

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!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">
<title>Insert title here</title>
</head>
<body>
	<form action="recruitment.action?methodName=add" method="post">
		编号:<input name="id" /><br />
		职位:<input name="job" /><br />
		公司:<input name="company" /><br />
		工作地址:<input name="address" /><br />
		薪资:<input name="salary" /><br />
		路径:<input name="url" /><br />
		要求:<input name="limit" /><br />
		desc:<input name="desc" /><br />
		jobHandle:<input name="desc" /><br />
		addressHandle:<input name="desc" /><br />
		<input type="submit" value="增加" />
	</form>
</body>
</html>```

修改的

<%@ page language=“java” contentType=“text/html; charset=UTF-8”
pageEncoding=“UTF-8”%>

Insert title here 编号:
职位:
公司:
工作地址:
薪资:
路径:
要求:
desc:
jobHandle:
addressHandle:
```

然后跑起来

效果展示

查询 这个是根据公司名称来查询的 别查其他的= =
在这里插入图片描述

增加 跳转到增加界面 增加完毕后跳转回主界面
在这里插入图片描述
增加成功
在这里插入图片描述

删除 删除成功

在这里插入图片描述

修改 把追一科技修改成 哈拉少

成功
在这里插入图片描述

结尾

MVC模式的分页虽然内容多 有些地方确实不懂 但是多用两次就真的觉得老方便了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值