本篇博客的主要内容是:

本篇博客需要注意的点:

(1)一种策略,或称之为一种思想:一个Controller的url设置成通配符的形式,从而实现不同的请求调用不同方法;

(2)加深感受下Session这个对象,很给力;

(3)捕捉异常的时候,(起码目前来看是这样的)习惯将异常扩大到Exception;

(4)待解决问题?????????????什么时候前台需要发起Ajax请求(对应的后台一般就要想前台文件输出Jason);什么时候前台发起的不是Ajax请求(对应的后台就直接重定向或者转发到前台文件,然后前台文件获取诸如request对象或者session对象中的数据);;;这一点,目前理解不深,还需要专门一篇博客来详细总结!!!!!!!主要是,什么时候使用Ajax请求,什么时候使用一般的请求!!!

(5)logger.error()的用法;

目录

一:请假申请的Controller层:LeaveFormServlet

二:LeaveFormServlet说明

(1)一种开发技巧:使用url通配符来实现【不同的url对应执行不同方法】的技巧;

(2)提取url中最后的那个单词(由此才能决定具体需要调用哪个方法)

(3)【(1)一种开发技巧:使用url通配符来实现【不同的url对应执行不同方法】的技巧;】的体现:【url不同调用的方法不同】;

(4)create()方法的整体结构:【获取前台数据】,【组织LeaveForm对象,作为调用Service层方法的参数】,【组织响应结果,向前台输出】

(5)create()方法的结构分析1:存储在session对象中的user属性很奥利给

(6)前台传过来的数据都是String格式的,如日期等数据需要格式化

(7)捕捉异常的时候,(起码目前来看是这样的)习惯将异常扩大到Exception

(7)前台文件会负责如“请假类型”向数字的转换

(8)处理完了之后,向前台输出JSON数据(前台发起的是Ajax请求???待确认……)

(9)如果程序出现了错误,调用logger.error()


完成请假申请的Controller层:(仅仅是新增,也只能新增;因为目前的Dao层和Service层只提供了新增的功能)

一:请假申请的Controller层:LeaveFormServlet

package com.imooc.oa.controller;import com.alibaba.fastjson.JSON;
import com.imooc.oa.entity.LeaveForm;
import com.imooc.oa.entity.User;
import com.imooc.oa.service.LeaveFormService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;@WebServlet(name = "LeaveFormServlet",urlPatterns ="/leave/*")
public class LeaveFormServlet extends HttpServlet {private LeaveFormService leaveFormService = new LeaveFormService();private Logger logger = LoggerFactory.getLogger(LeaveFormServlet.class);protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {request.setCharacterEncoding("utf-8");response.setContentType("text/html;charset=utf-8");//比如请求的url是:http://localhost/leave/createString uri = request.getRequestURI();//首先获取请求的uriString methodName = uri.substring(uri.lastIndexOf("/") + 1);//然后获取最后的参数;这儿的例子是createif (methodName.equals("create")) {this.create(request,response);}}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doPost(request,response);}/*** 创建请假单* 获取前端数据,调用LeaveFormService中的createLeaveForm()方法,完成请假申请信息的新增工作;* @param request* @param response*/private void create(HttpServletRequest request, HttpServletResponse response) throws IOException {//1.接受前台传过来的请假单的数据HttpSession session = request.getSession();User user = (User) session.getAttribute("login_user");String formType = request.getParameter("formType");//前台文件在向后台提交表单的时候,参数的命名需要和这儿对应;String strStartTime = request.getParameter("startTime");String strEndTime = request.getParameter("endTime");String reason = request.getParameter("reason");SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd-HH");//日期的格式//2.根据业务逻辑,结合前台传过来的请假单数据;组织LeaveForm对象,并调用Service层的方法Map result = new HashMap();try {LeaveForm form = new LeaveForm();form.setEmployeeId(user.getEmployeeId());form.setFormType(Integer.parseInt(formType));form.setStartTime(sdf.parse(strStartTime));form.setEndTime(sdf.parse(strEndTime));form.setReason(reason);form.setCreateTime(new Date());leaveFormService.createLeaveForm(form);result.put("code", "0");result.put("message", "success");} catch (Exception e) {logger.error("请假申请异常",e);result.put("code", e.getClass().getSimpleName());result.put("message", e.getMessage());}//3.组织响应的结果,对外(向前台文件)进行输出String json = JSON.toJSONString(result);response.getWriter().println(json);}
}

二:LeaveFormServlet说明

(1)一种开发技巧:使用url通配符来实现【不同的url对应执行不同方法】的技巧;

因为LeaveFormServlet要完成多个不同的任务,所以LeaveFormServlet是一个【复合Servlet】;与此对应,LeaveFormServlet的url设置成了【urlPatterns ="/leave/*"】表示所有的url的前缀是“/leave/”的url都会被这个Servlet拦截和捕获;比如当url="/leave/create"的时候就调用LeaveFormServlet中的create方法;当url="/leave/update"的时候就调用LeaveFormServlet中的update方法;

(2)提取url中最后的那个单词(由此才能决定具体需要调用哪个方法)

getRequestURI()方法即相关说明可以参考:getContextPath、getServletPath、getRequestURI、getRequestURL、getRealPath、getPathInfo的区别;URI和URL的区别比较;

(3)【(1)一种开发技巧:使用url通配符来实现【不同的url对应执行不同方法】的技巧;】的体现:【url不同调用的方法不同】;

(4)create()方法的整体结构:【获取前台数据】,【组织LeaveForm对象,作为调用Service层方法的参数】,【组织响应结果,向前台输出】

(5)create()方法的结构分析1:存储在session对象中的user属性很奥利给

又因为,employee_id在user表中:

又因为在登录系统时候,我们把登录用户的user信息存储到了Session对象中;所以,这儿直接从session对象中获取user对象,从而可以获取当前登录用户的employeeId;

(6)前台传过来的数据都是String格式的,如日期等数据需要格式化

同时,我们请假的时间精确到小时,所以只要【"yyyy-MM-dd-HH"】就够了;注意大小写!

(7)捕捉异常的时候,(起码目前来看是这样的)习惯将异常扩大到Exception

【form.setStartTime(sdf.parse(strStartTime));】会抛出ParseException解析异常,这儿我们将其扩大到了Exception

(7)前台文件会负责如“请假类型”向数字的转换

(8)处理完了之后,向前台输出JSON数据(前台发起的是Ajax请求???待确认……)

(9)如果程序出现了错误,调用logger.error()

Logger是slf4j这个日志门面下的;

具体有关日志的部分,可以参考:【logger.error()】介绍;(只是将日志打印在Console控制台)这篇博客;

接下来的任务,就是去编写前台文件:发起请求去调用LeaveFormServlet】并【接收LeaveFormServlet的数据并展示】了。

OA系统十八:请假申请四:【请假申请】这个内嵌界面中【提交请假表单数据】的Controller层;相关推荐

  1. OA系统二十:请假审批一:审批功能概述;显示【请假审批】这个内嵌界面中【待审批请假数据】的SQL语句;

    本篇博客的主要内容就是:在请假审批这个内嵌界面中,显示待审批请假数据的SQL语句: 目录 1.[请假审批]功能需要实现什么? 2.[请假审批界面]中[待审批请假数据]之:SQL语句 (1)审批列表中需 ...

  2. OA系统十七:请假申请三:【请假申请】这个内嵌界面中【提交请假表单数据】的Service层;(PS:在EmployeeDao中初次遇到@Param()参数设置)

    本篇博客的主要内容是:  本篇博客的需要注意的点有: (1)根据业务需求,规划好整体的代码结构和编码逻辑: (2)一种目前认可的编程小细节:(PS:随着以后经验增多,可能会抛弃这种想法,或者有其他理解 ...

  3. OA系统十六:请假申请二:【请假申请】这个内嵌界面中【提交请假表单数据】的SQL语句和Dao层;

    本篇博客的主要内容是: 本篇博客的主要目的是:创建与"请假流程有关的"[LeaveForm请假单表.ProcessFlow审批任务流程表.Notice消息通知表]三张表的底层的Da ...

  4. 四、SpringBoot-设置内嵌Tomcat端口号及上下文根

    此处提供IDEA-SpringBoot-总目录链接,可查看整个项目过程其他步骤文章:点击此处跳转至总目录链接 此处提供IDEA-SpringBoot-总目录链接,可查看整个项目过程其他步骤文章:点击此 ...

  5. OA系统十九:请假申请五:【请假申请】这个内嵌页面的前台文件;设置【点击左侧菜单栏的“请假申请”后】在首页的“功能区”显示【请假功能】这个内嵌页面;

    本篇博客的主要内容是: 本篇博客有几点特别说明下: (1)前端的东西挺复杂的,感受到了[学会一个成熟的前端框架]的重要性.毕竟,框架可以提高前段文件的开发效率,简化开发步骤! (2)前端的Ajax请求 ...

  6. OA系统十五:请假申请一:【请假申请】这个内嵌界面的数据库设计;(即请假申请这个线型工作流程的数据库设计!)

    本篇博客的主要内容是:设计[请假申请]相关的数据表: 目录 一:[多级请假审批流程]的数据库设计:分析 1.请假工作流程图 2.工作流程表的设计分析 3.设计约束 二:具体表设计 1.leaveFor ...

  7. 通过Dapr实现一个简单的基于.net的微服务电商系统(十八)——服务保护之多级缓存...

    很久没有更新dapr系列了.今天带来的是一个小的组件集成,通过多级缓存框架来实现对服务的缓存保护,依旧是一个简易的演示以及对其设计原理思路的讲解,欢迎大家转发留言和star 目录: 一.通过Dapr实 ...

  8. 学习笔记(十八):MoRe-Fi用深度学习网络从非线性信号中恢复呼吸波形

    <MoRe-Fi: Motion-robust and Fine-grained Respiration Monitoring via Deep-Learning UWB Radar>学习 ...

  9. C语言试题二十八之编写函数function功能是:从字符中删除指定的字符,同一字母的大、小写按不同字符处理。

    1. 题目 编写函数function,该函数的功能是:从字符中删除指定的字符,同一字母的大.小写按不同字符处理. 2 .温馨提示 C试题汇总里可用于计算机二级C语言笔试.机试.研究生复试中C程序设计科 ...

最新文章

  1. python乘法口诀编程-中年大叔学编程-用Python打印个九九乘法表
  2. php查找顶级分类,php 无限级分类 获取顶级分类ID,php顶级_PHP教程
  3. 在Python中使用OpenCV裁剪图像
  4. 度微尔开发者联盟网站
  5. Office编程(二)C#读取Excel并存入数据库,通过XML自定义表名,是否重建并插入数据...
  6. (96)FPGA面试题-Verilog设计半加器
  7. grpc 可以传递context嘛_Python中使用gRPC方法示例
  8. Sandbox简介和路径获取
  9. 新车可以无牌上路7天_无牌农用拖拉机车斗载人上路?交警说了,不可以!
  10. WhereHows前后端配置文件
  11. Makefile教程(这一篇足够从入门到放弃!!!)
  12. GPS卫星星历与历书
  13. java橙色风格小说精品屋小说网站源码
  14. cv曲线面积的意义_浅谈圆锥曲线中的高级技巧
  15. python制作日历并保存成excel_Python+Excel制作精美壁纸日历,任意DIY
  16. Android 短视频SDK
  17. 微信公众平台消息管理与群发图文教程
  18. 清华大学计算机系刘景财,2017年清华大学计算机系硕士录取名单
  19. 什么是软链接?什么是硬链接?
  20. 2022-2028年中国电子商务行业市场深度分析及投资前景展望报告

热门文章

  1. flatten()函数用法
  2. 荣耀路由器 4 Pro 评测
  3. 2021年全球赤藓糖醇市场规模大约为21亿元(人民币),预计2028年将达到23亿元,2022-2028期间年复合增长率(CAGR)为1.4%
  4. android作用是什么意思,安卓ART模式是什么意思 ART模式有什么作用及功能
  5. 将owl本体文件存储到mysql数据库_OWL本体文件如何存储到数据库
  6. 计算机无法正常识别文档显示,针对手机连接电脑后无法正常读取文件的解决办法...
  7. linux下写文件不关闭的后果
  8. XTU新生赛B题 ABK 解题报告
  9. 比较好的国外外包网站(转)
  10. 灵能传输(前缀和+贪心)