ajax调用后台java方法,jquery ajax再次封装,前台调用后台java方法直接返回数据

本文详细介绍了如何使用前台JavaScript的Ajax方法与Java后台进行数据交互,包括Ajax函数的定义、参数格式、后台处理Ajax请求的Servlet实现,以及参数传递的处理方式。特别关注了Java后台如何通过反射调用前端传来的map参数的处理方法。
摘要由CSDN通过智能技术生成

一,前台js部分代码

/**

* bean参数格式:类全限定名.方法名  opt参数格式:键值对  handleResponse:会function类型参数包含一个参数data,为后台返回json数据

* 方法返回值不能为null; 返回数据类型为map {data:Object}

*/

function ajax(bean, opt, handleResponse) {

$.ajax({

url : window.location.href.split("/")[3]+"/ajax/ajax.action?bean="+bean+changeParamer(opt),

type : 'get',

processData : false,

//data : opt,

cache : false,

dataType : 'json',

error : function(XMLHttpRequest, textStatus, errorThrown) {

alert('请求出错:'+ XMLHttpRequest.status + "  " + textStatus + "  " + errorThrown)

},

success : handleResponse

});

}

/**

* 将ajax中的参数转化,否则后台不能去到数据(post方式提交没有测试是否可以)

*/

function changeParamer(opt){

var temp="";

for(var o in opt){

temp += "&" + o+"="+opt[o];

}

return temp;

}

二,后台java部分

/**

*servlet部分,没有包申明和导入

*/

@MultipartConfig

@WebServlet(name="/Ajax", urlPatterns = {"/Ajax"})

public class Ajax extends HttpServlet {

private static final long serialVersionUID = 1L;

protected void doGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

doPost(request, response);

}

protected void doPost(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

response.setContentType("text/html;charset=UTF-8");

request.setCharacterEncoding("UTF-8");

AjaxRequest ajaxRequest=new AjaxRequest(request,response);

ajaxRequest.manager();

}

}

public class AjaxRequest {

/**

* 处理Ajax请求

*/

HttpServletRequest request;

HttpServletResponse response;

public AjaxRequest(HttpServletRequest request, HttpServletResponse response){

this.request=request;

this.response=response;

}

/**

* 从请求中获取所有参数,以map的形式返回

* @return

*/

private MapgetParameterMap() {

Mapmap = request.getParameterMap();//获取请求路径中的所有参数,并返回Map值

Mapparams = new HashMap();

String[] keys = (String[]) map.keySet().toArray(new String[0]);//获取map中的键

for (String key : keys) {

if ("bean".equals(key))

continue;

String value = getValue(key);

params.put(key, value);

}

return params;

}

/**

* 从map中或去key所对应的值,以String形式返回对应值

* @param key 需要从map中获取值的key名称

* @return

*/

private String getValue(String key) {

String[] values = this.request.getParameterValues(key);

if ((values != null) && (values.length > 1)) {

StringBuilder sb = new StringBuilder();

for (int i = 0; i < values.length; ++i) {

if (i > 0)

sb.append(",");

sb.append(values[i]);

}

return sb.toString();

}

String value = this.request.getParameter(key);

return value;

}

/**

* 通过反射的方式,根据类名获取对象后调用对应的方法,并返回值

* @return

* @throws Exception

*/

public void manager() throws Exception{

String className=request.getParameter("managerName");

String methodName=request.getParameter("methodName");

//String map=request.getParameter("data");

Mapmap=getParameterMap();

Class> requestClass=null;

Object value=null;

ReadFile.getItemPath();//需修改为在tomcat启动时就初始化,不在调用getItemPath();方法

/*if(ReadFile.pathMap.isEmpty()){

System.err.println("请创建所需模块代码");

return;

}*/

String classPath=ReadFile.pathMap.get(className)+className;

requestClass=Class.forName(classPath);

Method method = requestClass.getMethod(methodName, Map.class);

//通过反射创建对象,通过对象执行类中的方法  manager和dao中的构造方法不同,限制只能调用manager???

Constructor> constructor = requestClass.getDeclaredConstructor(new Class[]{HttpServletRequest.class,HttpServletResponse.class});

Object object = constructor.newInstance(new Object[]{request,response});

value=method.invoke(object, map);

response.getWriter().print(value);

}

}

注:前台调用的后台方法参数类型必须为map类型(用了反射调用方法,参数类型设置为map),

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值