js怎么访问后台servlet,必须用form提交吗?还有没有其他方法

JavaScript022

js怎么访问后台servlet,必须用form提交吗?还有没有其他方法,第1张

1.使用document.form.action方式

相关源码如下:

*.js

[javascript]

代码如下:

<span style="white-space:pre"></span>document.getElementById("sendPerson").value = SendPerson

document.getElementById("currentTime").value = currentTime()

document.getElementById("message").value = message

document.getElementById("recvPerson").value = recvPerson

document.chatform.action = "ToHistoryServlet"

document.chatform.submit()

*.html

[html]

代码如下:

<!--the tag below is the params to the userHistory dml@2012.8.27-->

<input type="hidden" name="sendPerson" id="sendPerson"><input

type="hidden" name="currentTime" id="currentTime"><input

type="hidden" name="message" id="message"><input

type="hidden" name="recvPerson" id="recvPerson">

注意的是,input需指定name属性,这么servlet才可以获取到参数值

*.java

[java]

代码如下:

public void doPost(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException { www.2cto.com

String sendPerson = request.getParameter("sendPerson")

String recvPerson = request.getParameter("recvPerson")

String sendTime = request.getParameter("currentTime")

String message = request.getParameter("message")

Message msg = new Message()

msg.setMessage(message)

msg.setRecvPerson(recvPerson)

msg.setSendPerson(sendPerson)

msg.setSendTime(sendTime)

HistoryHandle.addMessage(msg)

}

这个缺点是页面就跳走了,要是希望保持原页面,可以参照方法2

2.jquery调用后台方法

[javascript]

代码如下:

$.ajax({

type : "POST",

contentType : "application/json",

url : "ToHistoryServlet?sendPerson=" + SendPerson + "¤tTime="

+ currentTime() + "&message=" + message + "&recvPerson="

+ recvPerson,

dataType : 'json',

success : function(result) {

alert(result.d)

}

})

首先,你理解的有问题。 js是取不到servlet的值的(即服务端数据)。

应该反过来理解。 用servlet去生成js代码。

因为js、CSS、HTML对服务端而言是本文,只不过需要按照某种逻辑去生成可被客户端浏览器所理解的本文即可。

最后,你写的代码是没有问题,如果上面那部分是在jsp的<script>标签中的话。

而user这个变量值,servlet是不需要做什么的,因为它只能设置request的attribute。你能保证客户端会传过来user变量值就行。如果user是从服务端获取,即servlet添加request.setAttribute("user", value的值),然后更改上面的request.getParameter("user")为request.getAttribute("user")

跨域策略两种方式:

1:使用jsonp

2:使用cors

如果servlet返回jsop数据,就可以使用jsonp

参考代码:

public void doGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

request.setCharacterEncoding("UTF-8")

response.setCharacterEncoding("UTF-8")

String callback=request.getParameter("callback")

// 调用业务逻辑组件获得全部用户数据

List<User>users = UserBiz.select()

JSONArray jsonArr = new JSONArray(users)

if (callback!=null){

response.setContentType("text/javascriptcharset=UTF-8")

response.getWriter().println(callback+"("+jsonArr.toString()+")")

}else{

response.setContentType("text/htmlcharset=UTF-8")

response.getWriter().println(jsonArr.toString())

}

}