SSM框架下如何实现数据从后台传输到前台

目录

  • SSM数据从后台传输到前台
    • 通过HttpServletRequest对象进行传递
    • 通过ModeandView对象进行传递
    • 通过在在方法中添加形参Model进行传递
  • SSM框架前后端数据传输逻辑整理
    • SSM框架实现思路
    • 实现步骤
    • 后话

SSM数据从后台传输到前台 在SSM框架下,数据从后台传输到前台主要有以下几种方法:
  • 通过HttpServletRequest对象进行传递
  • 通过ModeandView对象进行传递
  • 通过在在方法中添加形参Model进行传递
【SSM框架下如何实现数据从后台传输到前台】接下来分批进行讲解:

通过HttpServletRequest对象进行传递
前台页面Demo:

后台:
@RequestMapping(value="https://www.it610.com/TestDemo",method=RequestMethod.POST)public String TestDemo(Model model, member mbr,HttpServletRequest request) {String text = ""; request.setAttribute("textname", text); return ""; }


通过ModeandView对象进行传递
前台:共用第一个前台
后台:
@RequestMapping(value="https://www.it610.com/TestDemo")public ModelAndView TestDemo() {String text = "hello!"; //ModelAndView中三个参数,跳转页面,接收返回数据的属性,返回的数据ModelAndView modelAndView = new ModelAndView("Demo","textname",text); return modelAndView; }


通过在在方法中添加形参Model进行传递
前台:共用第一个前台
后台:
@RequestMapping(value="https://www.it610.com/TestDemo")public String TestDemo(Model model) {String text = "hello!"; model.addAttribute("textname", text); return "Demo"; }


SSM框架前后端数据传输逻辑整理 由于代码的学习一直都是根据视频课以及有相关工作经验的朋友学习,所以自己思考的还是很不足。学习了很长时间碎片化的项目,也写过一些小的项目,但是这之间的逻辑依然没有吃透。尝试总结一下SSM框架下前后端数据传输的实现,也是对这段时间框架学习的小总结。
本文会尽可能地梳理前端、后端、前后端之间的数据传输过程

SSM框架实现思路
SSM框架下如何实现数据从后台传输到前台
文章图片

另外一个博主的思路也有些类似
SSM框架下如何实现数据从后台传输到前台
文章图片


实现步骤
1.前端部分的页面请求
这次主要看的是ajax传值,页面主要涉及这部分查询结果的展示。
SSM框架下如何实现数据从后台传输到前台
文章图片

JSP部分代码如下(注意是id="show"的部分进行的表格查询结果展示):
序号住院号姓名性别科室病房床位号入院情况入院时间

这里的url地址(url : ‘patient/patientQuery.do’)结合jsp,在后面会去spring_mvc的文件中进行查询。
JS部分代码如下(仅展示ajax部分):
var list; var $tbody = $("#show"); var start = 0; var end = 15; function patientQuery() { var queryData = https://www.it610.com/article/$("#patientFindForm").serialize(); $.ajax({url : 'patient/patientQuery.do',type : 'post',data : queryData,dataType : 'JSON',success : function(result) {if (result.state == 0) {var lists = result.data; $tbody.empty(); // 分页if (lists.length > 0) {$('.pagination').pagination(lists.length, {callback : function(page) {start = page * this.items_per_page; end = (page + 1) * this.items_per_page; $tbody.empty(); showList(lists, start, end); return true; },display_msg : true, // 是否显示记录信息setPageNo : true// 是否显示跳转第几页}); $("#showbuttom").show(); } else {alert("未找到信息!"); $("#showbuttom").hide(); $(".clear").click(); }showList(lists, start, end); }} }); }

2.根据spring_mvc.xml配置文件,去寻找相应的controller
这里是实现了一个url地址请求的拦截,可以看见这里将原始地址的".do"部分进行了拦截,
SSM框架下如何实现数据从后台传输到前台
文章图片

去controller下进行查找
SSM框架下如何实现数据从后台传输到前台
文章图片

3.在表现层找到了相应的 PatientController.java
根据代码,下面开始深层次套娃
SSM框架下如何实现数据从后台传输到前台
文章图片

@RequestMapping(value = "https://www.it610.com/patientQuery.do", produces = "application/json; charset=utf-8") @ResponseBody public String patientQuery(HttpServletRequest request) throws ParseException {PatientCode patientCode = new PatientCode(); String patientId = BaseUtils.toString(request.getParameter("patientId")); String name = BaseUtils.toString(request.getParameter("name")); patientCode.setPatientId(patientId); patientCode.setDepartmentNo(BaseUtils.toInteger(request.getParameter("departmentNo"))); // patientCode.setDocid(BaseUtils.toInteger(request.getParameter("Docid"))); patientCode.setName(name); patientCode.setWardNo(BaseUtils.toInteger(request.getParameter("wardNo"))); patientCode.setBedNo(BaseUtils.toInteger(request.getParameter("bedNo"))); patientCode.setStart(BaseUtils.toDate(request.getParameter("start"))); patientCode.setEnd(BaseUtils.toDate(request.getParameter("end"))); patientCode.setOutStatus(0); // 设置出院状态为未出院// System.out.println("当前患者码为:" + patientCode); List list = patientService.patientQuery(patientCode); log.info("患者查询"); for (Map map : list) {// 此处不对从库中取出的时间做toString转化会报java.lang.IllegalArgumentExceptionString admissionTime = map.get("admissionTime").toString(); map.put("admissionTime", admissionTime); String birth = map.get("birth").toString(); map.put("birth", birth); }JSON json = JSONSerializer.toJSON(new JsonResult>(list)); return json.toString(); }

4.表现层controller去向业务层service调用查询方法
SSM框架下如何实现数据从后台传输到前台
文章图片

5.service中实现的接口是对持久层(一些查询语句封装的地方)的调用
Mapper部分 PatientMapper .java接口
@Repository("patientMapper")public interface PatientMapper { /*** 病人的添加* * @param patient*/ void patientAdd(Patient patient); /*** 病人列表的查询* * @return*/ List patientQuery(PatientCode patientCode); /*省略*/

xml部分查询
insert intopatient(patientId,patientName,gender,nation,birth,department,certificateNo,workUnit,maritalStatus,doctorId,admissionTime,homeAddress,homePhone,contacts,contactsPhone,admissionStatus,roomType,roomNo,bedNo,state)values(#{patientId},#{name},#{gender},#{nation},#{birth},#{department},#{cerificateNo},#{workUnit},#{maritalStatus},#{doctorId},NOW(),#{homeAddress},#{homePhone},#{contacts},#{contactsPhone},#{admissionStatus},#{roomType},#{roomNo},#{bedNo},#{state}) selecta.id as"id",a.patientId as "patientId",a.patientName as "name",a.gender as"gender",a.nation as "nation",a.birth as "birth",a.department as"department",g.`name` as "departmentName",a.certificateNo as"cerificateNo",a.workUnit as "workUnit",a.doctorId as "doctorId",b.`name` as "doctorName",a.admissionTime as "admissionTime",a.homeAddress as "homeAddress",a.homePhone as "homePhone",a.contactsas "contacts",a.contactsPhone as "contactsPhone",a.admissionStatus as"admissionStatus",a.roomType as "roomType",c.`name` as "roomTypeName",a.roomNo as "roomNo",a.bedNo as "bedNo",a.state as "state",a.settlementState as "settlementState",a.leaveTime as "leaveTime"frompatient a LEFT JOIN doctor b ONa.doctorId = b.doctorIdLEFT JOINcategory c ON a.roomType = c.typeLEFT JOIN (SELECT e.parameter_values"value",e.parameter_name "name"fromparameter d LEFT JOIN paracode e ONd.`code` = e.`code`whered.name="科室") g ON a.department = g.`value`where1=1andif(#{patientId}is null,0=0,patientId=#{patientId})andif(#{name} is null,0=0,patientName like CONCAT('%',#{name},'%'))andif(#{departmentNo} isnull,0=0,department=#{departmentNo})andif(#{Docid} isnull,0=0,a.doctorId=#{Docid})andif(#{start} isnull,0=0,admissionTime > = #{start})andif(#{end} isnull,0=0,admissionTime < = #{end})andif(#{wardNo} isnull,0=0,roomNo=#{wardNo})andif(#{bedNo} is null,0=0,bedNo=#{bedNo})andif(#{outStart} is null,0=0,leaveTime > = #{outStart})andif(#{outEnd} is null,0=0, leaveTime < = #{outEnd})andif(#{outStatus} is null,0=0,leaveState = #{outStatus})andif(#{cerificateNo} is null,0=0,certificateNo = #{cerificateNo})orderbyid,admissionTime

6.查询语句与数据库之间的关联是通过数据库连接配置实现的
这里还有一点疑惑,少说了什么 bean的注入等相关知识点未体现
SSM框架下如何实现数据从后台传输到前台
文章图片

找到了~视图解析器
SSM框架下如何实现数据从后台传输到前台
文章图片

7.将最后查询到的结果以json的格式传给前端
在步骤3至步骤6实现了查询并返回json的这样一个功能。最后会将得到的结果通过加上.jsp实现传输给前端,利用web.xml
SSM框架下如何实现数据从后台传输到前台
文章图片

SSM框架下如何实现数据从后台传输到前台
文章图片

在servlert的这部分功能写的还是有些不到位,servlet主要是请求与响应,所以应该是一个入口也是一个出口。

后话
对于mybatis、spring、springmvc的部分其实还是有一些混淆,虽然能感知到他们分别在哪一个模块发挥了作用。本文仅个人总结,未来思路更清晰时,也会对文章进行修缮~欢迎大家指正。希望能给大家一个参考,也希望大家多多支持脚本之家。

    推荐阅读