栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

获取通过Java Servlet中的jquery ajax发送的参数

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

获取通过Java Servlet中的jquery ajax发送的参数

排序答案是此数据隐藏在请求中

InputStream

以下servlet是一个演示如何使用它的示例(我正在JBoss 7.1.1上运行它):

import java.io.ByteArrayOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.UnsupportedEncodingException;import java.net.URLDeprer;import java.util.Enumeration;import java.util.HashMap;import java.util.Map;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;@WebServlet(name="fooServlet", urlPatterns="/foo")public class FooServlet extends HttpServlet{    @Override    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {        InputStream is = req.getInputStream();        ByteArrayOutputStream os = new ByteArrayOutputStream();        byte[] buf = new byte[32];        int r=0;        while( r >= 0 ) { r = is.read(buf); if( r >= 0 ) os.write(buf, 0, r);        }        String s = new String(os.toByteArray(), "UTF-8");        String depred = URLDeprer.depre(s, "UTF-8");        System.err.println(">>>>>>>>>>>>> DECODED: " + depred);        System.err.println("================================");        Enumeration<String> e = req.getParameterNames();        while( e.hasMoreElements() ) { String ss = (String) e.nextElement(); System.err.println("    >>>>>>>>> " + ss);        }        System.err.println("================================");        Map<String,String> map = makeQueryMap(s);        System.err.println(map);        //////////////////////////////////////////////////////////////////        //// HERE YOU CAN DO map.get("id") AND THE SENT VALUE WILL BE ////        //// RETURNED AS EXPECTED WITH request.getParameter("id")     ////        //////////////////////////////////////////////////////////////////        System.err.println("================================");        resp.setContentType("application/json; charset=UTF-8");        resp.getWriter().println("{'result':true}");    }    // based on pre from: http://www.preranch.com/t/383310/java/java/parse-url-query-string-parameter    private static Map<String, String> makeQueryMap(String query) throws UnsupportedEncodingException {        String[] params = query.split("&");        Map<String, String> map = new HashMap<String, String>();        for( String param : params ) { String[] split = param.split("="); map.put(URLDeprer.depre(split[0], "UTF-8"), URLDeprer.depre(split[1], "UTF-8"));        }        return map;    }}

符合要求:

$.post("foo",{id:5,name:"Nikos",address:{city:"Athens"}})

输出为:

>>>>>>>>>>>>> DECODED: id=5&name=Nikos&address[city]=Athens================================================================{address[city]=Athens, id=5, name=Nikos}================================

(注意:

req.getParameterNames()
不起作用。打印在第4行的地图包含通常可以使用访问的所有数据
request.getParameter()
。请注意嵌套对象符号
{address:{city:"Athens"}}

address[city]=Athens
)。


稍微与您的问题无关,但出于完整性考虑:

如果要使用服务器端JSON解析器,则应使用

JSON.stringify
该数据:

$.post("foo",JSON.stringify({id:5,name:"Nikos",address:{city:"Athens"}}))

我认为与服务器通信JSON的最佳方法是使用JAX-RS(或与之等效的Spring)。它在现代服务器上非常简单,可以解决这些问题。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/427930.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号