SSM框架下如何實(shí)現(xiàn)數(shù)據(jù)從后臺(tái)傳輸?shù)角芭_(tái)
SSM數(shù)據(jù)從后臺(tái)傳輸?shù)角芭_(tái)
在SSM框架下,數(shù)據(jù)從后臺(tái)傳輸?shù)角芭_(tái)主要有以下幾種方法:
- 通過(guò)HttpServletRequest對(duì)象進(jìn)行傳遞
- 通過(guò)ModeandView對(duì)象進(jìn)行傳遞
- 通過(guò)在在方法中添加形參Model進(jìn)行傳遞
接下來(lái)分批進(jìn)行講解:
通過(guò)HttpServletRequest對(duì)象進(jìn)行傳遞
前臺(tái)頁(yè)面Demo:
<form action="TestDemo.do" method="post"> <input type="text" name="username" value="${requestScope.textname}"> <input type="submit" value="提交"> </form>
后臺(tái):
@RequestMapping(value="/TestDemo",method=RequestMethod.POST) ?? ?public String TestDemo(Model model, member mbr,HttpServletRequest request)? ?? ?{ ?? ??? ?String text = ""; ?? ??? ?request.setAttribute("textname", text);? ?? ??? ?return ""; ?? ?}
通過(guò)ModeandView對(duì)象進(jìn)行傳遞
前臺(tái):共用第一個(gè)前臺(tái)
后臺(tái):
@RequestMapping(value="/TestDemo") ?? ?public ModelAndView TestDemo()? ?? ?{ ?? ??? ?String text = "hello!"; ?? ??? ?//ModelAndView中三個(gè)參數(shù),跳轉(zhuǎn)頁(yè)面,接收返回?cái)?shù)據(jù)的屬性,返回的數(shù)據(jù) ?? ??? ?ModelAndView modelAndView = new ModelAndView("Demo","textname",text);? ?? ??? ?return modelAndView; ?? ?}
通過(guò)在在方法中添加形參Model進(jìn)行傳遞
前臺(tái):共用第一個(gè)前臺(tái)
后臺(tái):
@RequestMapping(value="/TestDemo") ?? ?public String TestDemo(Model model)? ?? ?{ ?? ??? ?String text = "hello!"; ?? ??? ?model.addAttribute("textname", text); ?? ??? ?return "Demo"; ?? ?}
SSM框架前后端數(shù)據(jù)傳輸邏輯整理
由于代碼的學(xué)習(xí)一直都是根據(jù)視頻課以及有相關(guān)工作經(jīng)驗(yàn)的朋友學(xué)習(xí),所以自己思考的還是很不足。學(xué)習(xí)了很長(zhǎng)時(shí)間碎片化的項(xiàng)目,也寫(xiě)過(guò)一些小的項(xiàng)目,但是這之間的邏輯依然沒(méi)有吃透。嘗試總結(jié)一下SSM框架下前后端數(shù)據(jù)傳輸?shù)膶?shí)現(xiàn),也是對(duì)這段時(shí)間框架學(xué)習(xí)的小總結(jié)。
本文會(huì)盡可能地梳理前端、后端、前后端之間的數(shù)據(jù)傳輸過(guò)程
SSM框架實(shí)現(xiàn)思路
另外一個(gè)博主的思路也有些類(lèi)似
實(shí)現(xiàn)步驟
1.前端部分的頁(yè)面請(qǐng)求
這次主要看的是ajax傳值,頁(yè)面主要涉及這部分查詢結(jié)果的展示。
JSP部分代碼如下(注意是id="show"的部分進(jìn)行的表格查詢結(jié)果展示):
<div class="table-box"> <table> <thead> <tr> <th class="num">序號(hào)</th> <th class="time">住院號(hào)</th> <th class="process">姓名</th> <th class="num">性別</th> <th class="node">科室</th> <th class="num">病房</th> <th class="num">床位號(hào)</th> <th class="num">入院情況</th> <th class="time">入院時(shí)間</th> </tr> </thead> <tbody id="show"> </tbody> </table> </div>
這里的url地址(url : ‘patient/patientQuery.do’)結(jié)合jsp,在后面會(huì)去spring_mvc的文件中進(jìn)行查詢。
JS部分代碼如下(僅展示ajax部分):
var list; var $tbody = $("#show"); var start = 0; var end = 15; function patientQuery() { var queryData = $("#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(); // 分頁(yè) 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 // 是否顯示跳轉(zhuǎn)第幾頁(yè) }); $("#showbuttom").show(); } else { alert("未找到信息!"); $("#showbuttom").hide(); $(".clear").click(); } showList(lists, start, end); } } }); }
2.根據(jù)spring_mvc.xml配置文件,去尋找相應(yīng)的controller
這里是實(shí)現(xiàn)了一個(gè)url地址請(qǐng)求的攔截,可以看見(jiàn)這里將原始地址的".do"部分進(jìn)行了攔截,
去controller下進(jìn)行查找
3.在表現(xiàn)層找到了相應(yīng)的 PatientController.java
根據(jù)代碼,下面開(kāi)始深層次套娃
@RequestMapping(value = "/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);// 設(shè)置出院狀態(tài)為未出院 // System.out.println("當(dāng)前患者碼為:" + patientCode); List<Map<String, Object>> list = patientService.patientQuery(patientCode); log.info("患者查詢"); for (Map<String, Object> map : list) {// 此處不對(duì)從庫(kù)中取出的時(shí)間做toString轉(zhuǎn)化會(huì)報(bào)java.lang.IllegalArgumentException String 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<Map<String, Object>>>(list)); return json.toString(); }
4.表現(xiàn)層controller去向業(yè)務(wù)層service調(diào)用查詢方法
5.service中實(shí)現(xiàn)的接口是對(duì)持久層(一些查詢語(yǔ)句封裝的地方)的調(diào)用
Mapper部分 PatientMapper .java接口
@Repository("patientMapper") public interface PatientMapper { /** * 病人的添加 * * @param patient */ void patientAdd(Patient patient); /** * 病人列表的查詢 * * @return */ List<Map<String, Object>> patientQuery(PatientCode patientCode); /*省略*/
xml部分查詢
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.qut.mapper.PatientMapper"> <insert id="patientAdd" parameterType="com.qut.pojo.Patient"> insert into patient (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}) </insert> <select id="patientQuery" parameterType="com.qut.pojo.PatientCode" resultType="map"> select a.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.contacts as "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" from patient a LEFT JOIN doctor b ON a.doctorId = b.doctorId LEFT JOIN category c ON a.roomType = c.type LEFT JOIN ( SELECT e.parameter_values "value",e.parameter_name "name" from parameter d LEFT JOIN paracode e ON d.`code` = e.`code` where d.name="科室" ) g ON a.department = g.`value` where 1=1 and if(#{patientId} is null,0=0,patientId=#{patientId}) and if(#{name} is null,0=0, patientName like CONCAT('%',#{name},'%')) and if(#{departmentNo} is null,0=0,department=#{departmentNo}) and if(#{Docid} is null,0=0,a.doctorId=#{Docid}) and if(#{start} is null,0=0,admissionTime >= #{start}) and if(#{end} is null,0=0,admissionTime <= #{end}) and if(#{wardNo} is null,0=0,roomNo=#{wardNo}) and if(#{bedNo} is null,0=0,bedNo=#{bedNo}) and if(#{outStart} is null,0=0,leaveTime >= #{outStart}) and if(#{outEnd} is null,0=0, leaveTime <= #{outEnd}) and if(#{outStatus} is null,0=0,leaveState = #{outStatus}) and if(#{cerificateNo} is null,0=0,certificateNo = #{cerificateNo}) order by id,admissionTime </select>
6.查詢語(yǔ)句與數(shù)據(jù)庫(kù)之間的關(guān)聯(lián)是通過(guò)數(shù)據(jù)庫(kù)連接配置實(shí)現(xiàn)的
這里還有一點(diǎn)疑惑,少說(shuō)了什么 bean的注入等相關(guān)知識(shí)點(diǎn)未體現(xiàn)
找到了~視圖解析器
7.將最后查詢到的結(jié)果以json的格式傳給前端
在步驟3至步驟6實(shí)現(xiàn)了查詢并返回json的這樣一個(gè)功能。最后會(huì)將得到的結(jié)果通過(guò)加上.jsp實(shí)現(xiàn)傳輸給前端,利用web.xml
在servlert的這部分功能寫(xiě)的還是有些不到位,servlet主要是請(qǐng)求與響應(yīng),所以應(yīng)該是一個(gè)入口也是一個(gè)出口。
后話
對(duì)于mybatis、spring、springmvc的部分其實(shí)還是有一些混淆,雖然能感知到他們分別在哪一個(gè)模塊發(fā)揮了作用。本文僅個(gè)人總結(jié),未來(lái)思路更清晰時(shí),也會(huì)對(duì)文章進(jìn)行修繕~歡迎大家指正。希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java安全 ysoserial CommonsCollections3示例分析
這篇文章主要為大家介紹了Java安全 ysoserial CommonsCollections3示例分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-10-10Spring的@CrossOrigin注解處理請(qǐng)求源碼解析
這篇文章主要介紹了Spring的@CrossOrigin注解處理請(qǐng)求源碼解析,@CrossOrigin源碼解析主要分為兩個(gè)階段@CrossOrigin注釋的方法掃描注冊(cè),請(qǐng)求匹配@CrossOrigin注釋的方法,本文從源碼角度進(jìn)行解析,需要的朋友可以參考下2023-12-12解決java使用axios.js的post請(qǐng)求后臺(tái)時(shí)無(wú)法接收到入?yún)⒌膯?wèn)題
今天小編就為大家分享一篇解決java使用axios.js的post請(qǐng)求后臺(tái)時(shí)無(wú)法接收到入?yún)⒌膯?wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-09-09SpringCloud feign服務(wù)熔斷下的異常處理操作
這篇文章主要介紹了SpringCloud feign服務(wù)熔斷下的異常處理操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-06-06Springboot中攔截GET請(qǐng)求獲取請(qǐng)求參數(shù)驗(yàn)證合法性核心方法
這篇文章主要介紹了Springboot中攔截GET請(qǐng)求獲取請(qǐng)求參數(shù)驗(yàn)證合法性,在Springboot中創(chuàng)建攔截器攔截所有GET類(lèi)型請(qǐng)求,獲取請(qǐng)求參數(shù)驗(yàn)證內(nèi)容合法性防止SQL注入,這種方法適用攔截get類(lèi)型請(qǐng)求,需要的朋友可以參考下2023-08-08Java?Web實(shí)現(xiàn)簡(jiǎn)易圖書(shū)管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了Java?Web實(shí)現(xiàn)簡(jiǎn)易圖書(shū)管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-09-09