【SpringMVC】Ajax

SpringMVC的Ajax网上大部分的教程都使用@Respondbody然后返回一个map完成,我觉得这样很繁琐,甚至还要自己配上一个json转换包,不然会出现406警告。其实我觉得大可不必这样,毕竟SpringMVC的@RequestMapping方法中,可以用HttpServletRequest request, HttpServletResponse respons作为参数,直接在网页该打印什么就打印,返回给Ajax就行。

做一个如下的小例子说明这个问题:

【SpringMVC】Ajax_第1张图片

先贴上自己的工程目录结构:

【SpringMVC】Ajax_第2张图片

1、首先是web.xml这里要说明一下,因为我不想用javascript原生的ajax写这么多代码,所以,引入了jquery。那就注定要使用jquery的js文件。所以这里我将SpringMVC的action都改成了*.html,这点的详细我在《【SpringMVC】指明actions的后缀》(点击打开链接)说过了。

  
  
      
        SpringMVC  
        org.springframework.web.servlet.DispatcherServlet  
      
      
        SpringMVC  
        *.html  
     
  

如果SpringMVC默认是拦截所有链接的,也就是url-pattern配成/,就应该将js文件剔除在外。web.xml需要声明:


	default
	*.js

要是还有.css你就再仿造上面加多一行就行了。

2、接下来是SpringMVC-servlet.xml,和《【SpringMVC】Helloworld》(点击打开链接)中对比是一字没改的!



	
	
		
		
	
    

3、顺带也贴上views/index.jsp的内容吧,非常简单,利用ajax将内容post到ajax.html这个action里面。

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>



	
	主页
	


	发送给Ajax

4、在action里面,也就是我WebActions.java的内容,你和平常一样让SpringMVC接受前台传过来的参数一样处理,然后用Javaee原生的那一套打印一个界面出来,可以参考《【Servlet】Servlet3.0与纯javascript通过Ajax交互》( 点击打开链接),index.jsp就会自动处理了。比起SpingMVC那一套又要自己配json处理包,@Respondbody又非要返回一个map,前台又要处理json,我是觉得好多了,尤其是这种只是返回一个简单的字符串的。就算真要个json,也可以自己用for循环拼字符串拼出来啊!

package test.actions;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;

@Controller
public class WebActions {
	@RequestMapping(value = "/index")
	public String index(ModelMap model) {
		return "index";
	}

	@RequestMapping(value = "/ajax", method = RequestMethod.POST)
	public void spring_ajax(@RequestParam("ajax_send") String ajax_send,
			HttpServletRequest request, HttpServletResponse response)
			throws IOException {
		response.setContentType("text/html; charset=utf-8");
		PrintWriter printWriter = response.getWriter();
		printWriter.print(ajax_send);
		printWriter.flush();
		printWriter.close();
	}
}


你可能感兴趣的:(Javaweb)