最近两年,用惯了各种最新的框架,突然发现,最原始的一些基础代码竟然完全忘记了,在一些特别老旧的项目系统中,一些原始的传参方式完全不会了,本次记录一次,基础servlet中通过request返回json数据,并在jsp页面中获取json数据的流程。
首先是访问页面到后台 doget、dopost方法中,这个具体的流程就不赘述了。接下来是封装json数据。
- 用户接收数据和封装状态等信息的实体类
public class SqlResult{
private boolean success=true;
private Integer code=200;
private String message="";
private Object data;
public SqlResult() {
super();
// TODO Auto-generated constructor stub
}
public SqlResult(boolean success, Integer code, String message, Object data) {
super();
this.success = success;
this.code = code;
this.message = message;
this.data = data;
}
public SqlResult ok() {
return this;
}
public SqlResult ok(Object data) {
this.data=data;
return this;
}
public SqlResult ok(Integer code,Object data) {
this.code=code;
this.data=data;
return this;
}
public SqlResult error(Integer code,String message) {
this.code=code;
this.message=message;
return this;
}
public boolean isSuccess() {
return success;
}
public void setSuccess(boolean success) {
this.success = success;
}
public Integer getCode() {
return code;
}
public void setCode(Integer code) {
this.code = code;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public Object getData() {
return data;
}
public void setData(Object data) {
this.data = data;
}
}
- 用于返回jsp数据的实体类
package com.esunward.plisp.news.provider;
import java.io.IOException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.alibaba.fastjson.JSON;
public class ResponData{
private String encode="utf-8";
public ResponData() {
super();
}
public ResponData(String encode) {
super();
this.encode = encode;
}
//以下的写法是前台是ajax请求,后台直接给前台返回json数据
/**
* @param encode
* 这个写法前台是ajax请求,直接给页面返回json数据的形式
*/
public ResponData(HttpServletResponse response,Object sqlResult) {
response.setHeader("Content-type", "text/html;charset=utf-8");
try {
response.getWriter().write(JSON.toJSONString(new SqlResult().ok(sqlResult)));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void msg(HttpServletResponse response,Object sqlResult) {
response.setHeader("Content-type", "text/html;charset=utf-8");
try {
response.getWriter().write(JSON.toJSONString(new SqlResult().ok(sqlResult)));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void error(HttpServletResponse response,Object sqlResult) {
response.setHeader("Content-type", "text/html;charset=utf-8");
try {
response.getWriter().write(JSON.toJSONString(new SqlResult().error(-100,(String)sqlResult)));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//以上的写法是前台是ajax请求,后台直接给前台返回json数据
//以下的写法是前台是jsp页面请求,后台直接给前台返回jsp数据
public void error(HttpServletRequest request,HttpServletResponse response,Object sqlResult,String url,Object result) {
request.setAttribute("rightbase", request.getParameter("rightbase"));//将前台传递过来的数据再传回去用于页面展示
request.setAttribute("jsondata", JSON.toJSONString(new SqlResult().error(-100,(String)sqlResult)));
try {
response.getWriter().write(JSON.toJSONString(new SqlResult().error(-100,(String)sqlResult)));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
- 前台获取request里面的json数据的方式
如此,从后台传递过来的json数据可以传递到前台并被解析出来使用了。