项目开发一般流程、入职流程、尚学堂OA项目01
1. 项目开发的一般流程
- 与客户确定需求文档
- 项目组研讨需求的合理性
- 与客户再次确定需求文档【需求文档定稿】
- 项目组研讨需求文档的功能及模块划分
- 项目组研讨文档规范及数据库设计
- 项目组确定模块职责及与测试组对接
- 进入开发阶段【迭代开发】
- 开发完成的功能提交到测试服务器【测试人员测试】
- 测试出现问题,相应人员修改,之后再提交重新测试
- 测试无误,提交到正式服务器【客服的服务器】
- 项目维护
2. 入职时工作的一般流程
- 索要开发文档
- 索要数据库模型PDM
- 索要项目源码及数据库脚本
- 搭建项目
- 找到自己负责的部分【研读】
- 正式开发
一般公司会给一周时间
3. 尚学堂办公自动化系统/OA
OA—Office Automation
3.1 项目介绍
搭建一个web项目,用来处理公司内部的一般管理
3.2 项目资料
- 界面原型 -HTML原型模板,用来搭建JSP页面
- 用例图 -阐述用户的关系及权限功能
- 数据库模型图 -阐述表结构及表之间的相互关系
- 时序图 -阐述某个功能具体的执行流程
- 业务流程图 -阐述某个业务的处理逻辑
- 工具类
6.1 My97日期插件
6.2 验证码生成工具类
6.3 POI工具
6.4 Echarts
3.3 项目开发
3.3.1 数据库环境搭建
执行数据库脚本
3.3.2 项目基板搭建
- 层级目录搭建
- src/cn.khue/
exception
filter
listener
mapper
pojo
service
servlet
util - web/WEB-INF/
lib
- src/cn.khue/
- jar包导入
- JDBC:
mysql-connector-java-5.1.38.jar - Mybatis:
mybatis-3.2.7.jar
asm-3.3.1.jar
cglib-2.2.2.jar
commons-logging-1.1.1.jar
javassist-3.17.1-GA.jar
log4j-1.2.17.jar
log4j-api-2.0-rc1.jar
log4j-core-2.0-rc1.jar
slf4j-api-1.7.5.jar
slf4j-log4j12-1.7.5.jar - JSTL:
jstl-1.2.jar - GSON:
gson-2.2.4.jar - ServletFileUpload:
commons-fileupload-1.3.2.jar
commons-io-2.5.jar
- JDBC:
- 配置文件导入
mybatis.xml
log4j.properties - 工具类编写
MybatisUtil.java
MyFilter.java
3.3.3 界面原型模板搭建
将资料中的html模板文件转变为jsp文件
3.3.4 人事管理模块搭建
3.3.4.1 部门添加功能
- 前端实现
deptAdd.jsp添加jQuery代码请求时机:单击按钮时
请求地址:deptServlet
请求参数:部门编号、部门名称、地址
响应结果:true或false的字符串
请求参数较多时,可用form表单包裹,然后使用ajax通过id获取form表单数据
<form id="fm">
<input type="text" name="" />
<input type="text" name="" />
<input type="text" name="" />
...
</form>
<script>
$(funcation(){
var reqData=$("#fm").serialize();
$.post("deptServlet", reqData, funcation(){
if(eval(data)){
alert("增加成功");
}else{
alert("增加失败");
}
})
})
</script>
- 后端实现
DeptServlet.java
DeptService.interface
DeptServiceImpl.java
DeptMapper.interface
3.3.4.2 部门查询功能
- 前端实现
deptList.jsp添加jQuery代码请求时机:页面加载成功
请求地址:deptListServelt
请求数据:无
响应数据:所有部门信息的json字符串 - 后端实现
DeptListServlet.java
DeptListService.interface
DeptListServiceImpl.java
DeptListMapper.interface
3.3.4.3 Servlet的高级封装
解决问题:每个功能点都需要独立的一个Servlet来实现,代码冗余
解决方式:向上提取service方法,向下拆分不同功能点的实现方法,上下通过请求传递的实现方法名链接
所需技术:封装、继承、反射
- 上层父类BaseServlet类
public class BaseServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//获取请求传入的方法名
String methodName = req.getParameter("method");
//获取本类的字节码对象
Class clazz=this.getClass();
try {
//获取本类字节码对象的方法
Method methods = clazz.getMethod(methodName, HttpServletRequest.class, HttpServletResponse.class);
//执行方法
methods.invoke(this,req,resp);
} catch (Exception e) {
e.printStackTrace();
}
}
}
- 下层子类DeptServlet类
@WebServlet("/deptServlet")
public class DeptServlet extends BaseServlet{
//增加部门的方法
public void addDept(HttpServletRequest req, HttpServletResponse resp){
//获取请求数据
int deptno=Integet.parseInt(req.getParameter("deptno"));
String deptname=req.getParameter("deptname");
String location=req.getParameter("location");
//处理请求
DeptService dept=new DeptServiceImpl();
int i=dept.addDept(deptno, deptname, location);
//响应请求
if(i>0){
resp.getWriter().writer("true");
}else{
resp.getWriter().writer("false");
}
//查询部门的方法
public void queryDept(HttpServletRequest req, HttpServletResponse resp){
//处理请求
DeptListService dept=new DeptListServiceImpl();
List<Dept> list=dept.query();
//响应请求
resp.getWriter().writer(new Gson().toJosn(list));
}
}
- 前端传参
deptAdd.jsp
<script>
$.post("deptServlet", reqData+"method=addDept", funcation(){...})
</script>
deptList.jsp
<script>
$.post("deptServlet", "method=queryDept", funcation{...})
</script>