我对web应用和servlet非常陌生,我有以下问题:
每当我在servlet中打印某些内容并通过webbrowser调用它时,它都会返回一个包含该文本的新页面。有没有一种方法可以使用Ajax打印当前页面中的文本
事实上,关键词是;ajax";:异步JavaScript和XML。然而,在过去几年中,它更多地是异步JavaScript和JSON。基本上,让JS执行一个异步HTTP请求,并根据响应数据更新HTMLDOM树
因为它相当于一个让它在所有浏览器(尤其是Internet Explorer和其他浏览器)中都能正常工作,这是一项繁琐的工作,有很多JavaScript库,它们在单个函数中简化了这一点,并尽可能多地掩盖了特定于浏览器的错误/怪癖,例如jQuery,原型http://mootools.net/“rel=“noreferrer”>Mootools。由于jQuery现在最流行,我将在下面的示例中使用它
以纯文本形式返回字符串的启动示例
创建一个如下所示的/some.jsp(注意:此答案中的代码片段并不期望jsp文件被放置在子文件夹中,如果这样做,请相应地将servlet URL从&someservlet";更改为${pageContext.request.contextPath}/someservlet";;为了简洁起见,代码片段中省略了它):
<;!DOCTYPE html>;
<;html lang=";"&燃气轮机;
<;头>;
<;标题>;因此,问题4112686</标题>;
<;脚本src=";http://code.jquery.com/jquery-latest.min.js"&燃气轮机</脚本>;
<;脚本>;
$(文档)。。。
$.get(";someservlet";,函数(responseText){//在";someservlet";的URL上执行Ajax get请求,并使用Ajax响应文本执行以下函数。。。
$(“somediv”).text(responseText);//找到ID为“somediv”的HTML DOM元素,并使用响应文本设置其文本内容。
});
});
</脚本>;
</头>;
<;车身>;
<;按钮id=";somebutton"&燃气轮机;按此处</按钮>;
<;div id=";somediv“&燃气轮机</部门>;
</车身>;
</html>;
使用doGet()方法创建一个servlet,如下所示:
@override
受保护的void doGet(HttpServletRequest请求,HttpServletResponse响应)抛出ServletException,IOException{
字符串文本=“一些文本”;;
response.setContentType(";text/plain);//设置响应的内容类型,以便jQuery知道它可以期望什么。
response.setCharacterEncoding(";UTF-8";);//你想统治世界,是吗?
response.getWriter().write(text);//写入响应体。
}
将此servlet映射到/someservlet或/someservlet/*的URL模式上,如下所示(显然,URL模式由您自由选择,但您需要相应地修改JS代码示例中的someservletURL):
package com.example;
@WebServlet(“someservlet/*”)
公共类SomeServlet扩展了HttpServlet{
// ...
}
或者,当您还没有使用与Servlet 3.0兼容的容器(Tomcat 7、Glassfish 3、JBoss AS 6等或更新版本)时,请以老式方式将其映射到web.xml(另请参见我们的Servlets wiki页面):
<;servlet>;
<;servlet名称>;someservlet</servlet名称>;
<;servlet类>;SomeServlet</servlet类>;
</servlet>;
<;servlet映射>;
<;servlet名称>;someservlet</servlet名称>;
<;url模式>/someservlet/*</url模式>;
</servlet映射>;
现在打开http://localhost:8080/context/test.jsp 在浏览器中,然后按按钮。您将看到div的内容通过servlet响应得到更新
返回列表<;字符串>作为JSON
使用JSON代替纯文本作为响应格式,您甚至可以更进一步。它允许更多的动态。首先,您希望有一个在Java对象和JSON字符串之间转换的工具。它们也有很多(参见本页概述)。我个人最喜欢的是谷歌Gson。下载JAR文件并将其放入您的WEB应用程序的/WEB-INF/lib文件夹中
下面是一个显示List<;字符串>作为<;ul>&书信电报;李>。servlet:
@override
受保护的void doGet(HttpServletRequest请求,HttpServletResponse响应)抛出ServletException,IOException{
List<;String>;List=新数组列表<;>;();
列表。添加(“项目1”);
列表。添加(“项目2”);
列表。添加(“第3项”);
字符串json=new Gson().toJson(列表);
setContentType(“application/json”);
响应。setCharacterEncoding(“UTF-8”);
response.getWriter().write(json);
}
JS代码:
$(文档)。在(”单击“,”somebutton“,”函数(){//当对ID为“somebutton”的元素调用HTML DOM“单击”事件时,执行以下函数。。。
$.get(";someservlet";,函数(responseJson){//在";someservlet";的URL上执行Ajax get请求,并使用Ajax响应JSON执行以下函数。。。
var$ul=$(“ul>”).appendTo($(“somediv”);//创建HTML<;ul>;元素并将其附加到ID为“somediv”的HTML DOM元素;。
$.each(responseJson,function(index,item){//遍历JSON数组。
$(";li>;).text(item).appendTo($ul);//创建HTML<;li>;元素,使用当前迭代的项设置其文本内容,并将其附加到<;ul>;。
});
});
});
请注意,当您将响应内容类型设置为application/JSON时,jQuery会自动将响应解析为JSON,并直接将JSON对象(responseJson)作为函数参数提供给您。如果您忘记设置它或依赖默认值text/plain或text/html,那么responseJson参数不会给您一个JSON对象,而是一个普通字符串,您需要手动摆弄JSON.parse()之后,如果您首先将内容类型设置正确,则完全不需要这样做
返回Map<;字符串,字符串>作为JSON
下面是另一个显示Map<;字符串,字符串>作为<;选项>:
@override
受保护的void doGet(HttpServletRequest请求,HttpServletResponse响应)抛出ServletException,IOException{
Map<;String,String>;options=newlinkedhashmap<;>;();
期权。看跌期权(“value1”、“label1”);
期权。看跌期权(“value2”、“label2”);
期权。看跌期权(“value3”、“label3”);
字符串json=new Gson().toJson(选项);
setContentType(“application/json”);
响应。setCharacterEncoding(“UTF-8”);
response.getWriter().write(json);
}
和JSP:
$(文档)。在(”单击“,”somebutton“,”函数(){//当对ID为“somebutton”的元素调用HTML DOM“单击”事件时,执行以下函数。。。
$.get(";someservlet";,函数(responseJson){//在";someservlet";的URL上执行Ajax get请求,并使用Ajax响应JSON执行以下函数。。。
var$select=$(“someselect”);//查找ID为“someselect”的HTML DOM元素;。
$select.find(";option).remove();//查找标记名为";option";的所有子元素并将其删除(只是为了防止再次按下按钮时出现重复选项)。
$.each(responseJson,function(key,value){//迭代JSON对象。
$(";option>;).val(key).text(value).appendTo($select);//创建HTML<;option>;元素,使用当前迭代的键设置其值,使用当前迭代的项设置其文本内容,最后将其附加到<;select>;。
});
});
});
与
<;选择id=";someselect"&燃气轮机</选择>;
返回列表<;实体>作为JSON
下面是一个显示List<;产品></a中的code><;表>其中产品类具有属性长id、字符串名和<c