SSM框架下如何實現(xiàn)數(shù)據(jù)從后臺傳輸?shù)角芭_
SSM數(shù)據(jù)從后臺傳輸?shù)角芭_
在SSM框架下,數(shù)據(jù)從后臺傳輸?shù)角芭_主要有以下幾種方法:
- 通過HttpServletRequest對象進行傳遞
- 通過ModeandView對象進行傳遞
- 通過在在方法中添加形參Model進行傳遞
接下來分批進行講解:
通過HttpServletRequest對象進行傳遞
前臺頁面Demo:
<form action="TestDemo.do" method="post">
<input type="text" name="username" value="${requestScope.textname}">
<input type="submit" value="提交">
</form>后臺:
@RequestMapping(value="/TestDemo",method=RequestMethod.POST)
?? ?public String TestDemo(Model model, member mbr,HttpServletRequest request)?
?? ?{
?? ??? ?String text = "";
?? ??? ?request.setAttribute("textname", text);?
?? ??? ?return "";
?? ?}通過ModeandView對象進行傳遞
前臺:共用第一個前臺
后臺:
@RequestMapping(value="/TestDemo")
?? ?public ModelAndView TestDemo()?
?? ?{
?? ??? ?String text = "hello!";
?? ??? ?//ModelAndView中三個參數(shù),跳轉(zhuǎn)頁面,接收返回數(shù)據(jù)的屬性,返回的數(shù)據(jù)
?? ??? ?ModelAndView modelAndView = new ModelAndView("Demo","textname",text);?
?? ??? ?return modelAndView;
?? ?}通過在在方法中添加形參Model進行傳遞
前臺:共用第一個前臺
后臺:
@RequestMapping(value="/TestDemo")
?? ?public String TestDemo(Model model)?
?? ?{
?? ??? ?String text = "hello!";
?? ??? ?model.addAttribute("textname", text);
?? ??? ?return "Demo";
?? ?}SSM框架前后端數(shù)據(jù)傳輸邏輯整理
由于代碼的學習一直都是根據(jù)視頻課以及有相關(guān)工作經(jīng)驗的朋友學習,所以自己思考的還是很不足。學習了很長時間碎片化的項目,也寫過一些小的項目,但是這之間的邏輯依然沒有吃透。嘗試總結(jié)一下SSM框架下前后端數(shù)據(jù)傳輸?shù)膶崿F(xiàn),也是對這段時間框架學習的小總結(jié)。
本文會盡可能地梳理前端、后端、前后端之間的數(shù)據(jù)傳輸過程
SSM框架實現(xiàn)思路

另外一個博主的思路也有些類似

實現(xiàn)步驟
1.前端部分的頁面請求
這次主要看的是ajax傳值,頁面主要涉及這部分查詢結(jié)果的展示。

JSP部分代碼如下(注意是id="show"的部分進行的表格查詢結(jié)果展示):
<div class="table-box"> <table> <thead> <tr> <th class="num">序號</th> <th class="time">住院號</th> <th class="process">姓名</th> <th class="num">性別</th> <th class="node">科室</th> <th class="num">病房</th> <th class="num">床位號</th> <th class="num">入院情況</th> <th class="time">入院時間</th> </tr> </thead> <tbody id="show"> </tbody> </table> </div>
這里的url地址(url : ‘patient/patientQuery.do’)結(jié)合jsp,在后面會去spring_mvc的文件中進行查詢。
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();
// 分頁
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)第幾頁
});
$("#showbuttom").show();
} else {
alert("未找到信息!");
$("#showbuttom").hide();
$(".clear").click();
}
showList(lists, start, end);
}
}
});
}
2.根據(jù)spring_mvc.xml配置文件,去尋找相應(yīng)的controller
這里是實現(xiàn)了一個url地址請求的攔截,可以看見這里將原始地址的".do"部分進行了攔截,

去controller下進行查找

3.在表現(xiàn)層找到了相應(yīng)的 PatientController.java
根據(jù)代碼,下面開始深層次套娃

@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("當前患者碼為:" + patientCode);
List<Map<String, Object>> list = patientService.patientQuery(patientCode);
log.info("患者查詢");
for (Map<String, Object> map : list) {// 此處不對從庫中取出的時間做toString轉(zhuǎn)化會報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中實現(xiàn)的接口是對持久層(一些查詢語句封裝的地方)的調(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.查詢語句與數(shù)據(jù)庫之間的關(guān)聯(lián)是通過數(shù)據(jù)庫連接配置實現(xiàn)的
這里還有一點疑惑,少說了什么 bean的注入等相關(guān)知識點未體現(xiàn)

找到了~視圖解析器

7.將最后查詢到的結(jié)果以json的格式傳給前端
在步驟3至步驟6實現(xiàn)了查詢并返回json的這樣一個功能。最后會將得到的結(jié)果通過加上.jsp實現(xiàn)傳輸給前端,利用web.xml


在servlert的這部分功能寫的還是有些不到位,servlet主要是請求與響應(yīng),所以應(yīng)該是一個入口也是一個出口。
后話
對于mybatis、spring、springmvc的部分其實還是有一些混淆,雖然能感知到他們分別在哪一個模塊發(fā)揮了作用。本文僅個人總結(jié),未來思路更清晰時,也會對文章進行修繕~歡迎大家指正。希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java安全 ysoserial CommonsCollections3示例分析
這篇文章主要為大家介紹了Java安全 ysoserial CommonsCollections3示例分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-10-10
解決java使用axios.js的post請求后臺時無法接收到入?yún)⒌膯栴}
今天小編就為大家分享一篇解決java使用axios.js的post請求后臺時無法接收到入?yún)⒌膯栴},具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-09-09
SpringCloud feign服務(wù)熔斷下的異常處理操作
這篇文章主要介紹了SpringCloud feign服務(wù)熔斷下的異常處理操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-06-06
Springboot中攔截GET請求獲取請求參數(shù)驗證合法性核心方法
這篇文章主要介紹了Springboot中攔截GET請求獲取請求參數(shù)驗證合法性,在Springboot中創(chuàng)建攔截器攔截所有GET類型請求,獲取請求參數(shù)驗證內(nèi)容合法性防止SQL注入,這種方法適用攔截get類型請求,需要的朋友可以參考下2023-08-08
Java?Web實現(xiàn)簡易圖書管理系統(tǒng)
這篇文章主要為大家詳細介紹了Java?Web實現(xiàn)簡易圖書管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-09-09

