前台 jsp 与 后台 servlet 的数据交互问题

时间:2022-01-07 21:13:24

前沿:现在通常前后台交互的做法是 前端在jsp中 通过js 生成 div input 等 标签, 包括 里面的属性 class id value 等 , 然后 通过 Ajax 进入 servlet中 进行数据 查询 或者是走mysql 或者是走索引查询, 然后 通过json的形式 传回到 jsp 界面, 界面在解析这个 json 在将json中的值 赋值到 js生成的 div input 等 标签中 , 下面我来上一些代码 以便于参考。

下面是 前端 jsp 界面 代码

1、首先界面自动加载一个function

<script type="text/javascript" language="javascript">
window.onload=function(){
//recompadata(1,'gengduo3');
//many_querty3(1,'rdtj');
pageload();
}
</script>

2、然后 进入pageload()方法 进行逻辑 ,  这样一来 就 进入了 servlet

<pre name="code" class="html"><script type="text/javascript" language="javascript"> 

function pageload()
{
jQuery.ajax({
url:"<%=request.getContextPath()%>/servlet/MainServlet", //这里是传入的 servlet
type:"post",
data:"status=movedata1_move&cid=<%=cid%>¤tPage="+currentPage, //这里是穿进去的参数
dataType:"json",
success:function(json){ //这个json是servlet川归来的 json , 并且接到json

dataShow(json); //将json传给 dataShow方法

}
});
}
</script>


 

3、servlet中查询数据 并 存入 json

String selecttype = request.getParameter("selecttype"); //获取前端传过来的值
List<PaUserTopic> recomPaDataList = new ArrayList<PaUserTopic>();//创建list 用来接收 通过mysql查询过来的 list
String recomPadata = new ObjectMapper().writeValueAsString(recomPaDataList);
JSONObject json = new JSONObject();//创建json
json.put("recomPadata", recomPadata);//存入json
out.print(json);//传回前端 jsp json格式
out.flush();
out.close();//关闭sevlet

4、开始解析json  并同事 创建div  input 等标签, 并且把解析json中的值  赋到  div  input  标签上

function dataShow(data){  //这里的 data 就是  传过来的 json
var searchdata_div = document.getElementById("searchdata_div"); //这里是获取到 id为 searchdata_div的div
var childs = searchdata_div.childNodes;//获取id为 searchdata_div的 子节点 "集合"
for(var i = childs.length - 1; i >= 0; i--) {
searchdata_div.removeChild(childs[i]); //清空所有子节点
}

var hitsjson = data.recomPadata;//获取json中为recomPadata的集合
if(hitsjson.length>0){//这下面就开始 赋值了
//这里我要说的是:肯定会获取到很多个 hitsjson , 因为hitsjson一般是多组

for(var j =0;j<hitsjson.length;j++){ //循环
var sd = hitsjson[j];//取出每一组中的数值
var div = document.createElement("div"); //创建一个div
var table = document.createElement("table"); //创建一个table
var tr = document.createElement("tr"); //创建一个tr
var rj = document.createElement("td");//创建一个td
div.setAttribute("style","float:left;");//给div增加 style="float:left"
div.setAttribute("class","data_div");//给div增加 class="data_div"
table.setAttribute("style","margin-left:10px;"); //给table增加 style="margin-left:10px"
table.setAttribute("width",380);//
rj.innerHTML = sd.paSysDictDataType.dtName;//获取recomPadata中paSysDictDataType中的dtName 并且赋值给rj(也就是上面创建的td) json格式和数据 我会在后面给大家
rj.width=40;//
tr.appendChild(rj);//将rj(也就是td) 放到tr中
table.appendChild(tr);//将tr让如table中
div.appendChild(table);//将table放入div中
searchdata_div.appendChild(div);//在讲div方入最外层的div中
}
}

}
var childs = searchdata_div.childNodes;//获取id为


5、json格式如下

 {"recomPadata":[{"paData":{"iid":null,"ititle":"上海:饭店提供10桌以上年夜饭需申报(图)","ipubtime":"2015-01-23","i_id":"142197390416022602","imedia":"北京晨报","iarea":null,"iurl":null,"iauthor":null,"ihot":null,"ifeel":null,"iwarn":null,"icollect":null,"iviews":null,"itopic":null,"itopicAuto":null,"itopicRes":null,"iinputtime":null,"itype":null,"irecom":null,"iabstract":null,"ipic":null,"iisleader":null,"iismine":null,"iconn":null,"icomefrom":null,"isource":null,"ikeywords":null},"paCusetTopic":null,"paSysDictDataType":{"dtId":null,"dtName":"新闻"}},"currentPage":1,"totalPage":1}