关于 spring3 和spring4 中返回json 以及调用 js 和对原项目的修改

原项目:点击打开链接

1、修改后项目目录结构,配置文件放置WEB-INF下的文件夹中:

关于 spring3 和spring4 中返回json 以及调用 js 和对原项目的修改_第1张图片



2、controller 的修改,添加了非String 的JSONArray对象返回浏览器:

package com.busymonkey.controller;

import java.util.List;

import org.jboss.logging.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

import com.busymonkey.entity.TestEntity;
import com.busymonkey.service.TestService;

import net.sf.json.JSONArray;

@Controller
public class TestController {
	private static final Logger logger = Logger.getLogger(TestController.class);

	public TestController() {
		System.out.println("EmployeeController()");
	}

	@Autowired
	private TestService employeeService;

	@RequestMapping("/createEmployee")
	@ResponseBody
	public String createEmployee() {
		TestEntity employee = new TestEntity("busymonkey", 25, 10000);
		employeeService.createEmployee(employee);
		logger.info("Creating Employee. Data: " + employee);
		return "done!";
	}

	@RequestMapping("/queryEmployee")
	@ResponseBody
	public JSONArray queryEmployee() {
		List employees = employeeService.getAllEmployees();
		JSONArray array = null;
		try {
			array = JSONArray.fromObject(employees);
			System.out.println(employees);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return array;
	}
}



3、dispatch修改了几个地方,一个是指定jdbc配置文件的位置,这里是在WEB-INF目录下的文件夹,但是这里调用easyui的时候不能放到WEB-INF目录下,应该是因为某些安全文件夹的问题,再就是加入了对非String 的 JSONArray对象返回浏览器的支持,这里还是不兼容IE(会弹出下载),360,谷歌都是可以的,再就是需要注意的是

  1. <mvc:annotation-driven  
  2.         content-negotiation-manager="contentNegotiationManager" />
加入的这部分标签是需要spring4支持的,即pom依赖中 4.1.5.RELEASE 的 springframework:



	
	

	
	
		
		
		
		
			
				atom=application/atom+xml
				html=text/html
				json=application/json
				*=*/*
			
		
	

	
	

	
	
		
		
		
	

	
	
		
		
		
		
		
		
		
		
	

	
	
		
		
			
				${hibernate.dialect}
				${hibernate.hbm2ddl.auto}
				${hibernate.format_sql}
				${hibernate.show_sql}
			
		
		
	

	
	
		
	

	



4、welcome.jsp,加入了对easyui的简单调用:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
	pageEncoding="ISO-8859-1"%>




	Basic Panel - jQuery EasyUI Demo
	
	
	
	
	
Insert title here


	

Basic Panel

The panel is a container for other components or elements.

jQuery EasyUI framework helps you build your web pages easily.

  • easyui is a collection of user-interface plugin based on jQuery.
  • easyui provides essential functionality for building modem, interactive, javascript applications.
  • using easyui you don't need to write many javascript code, you usually defines user-interface by writing some HTML markup.
  • complete framework for HTML5 web page.
  • easyui save your time and scales while developing your products.
  • easyui is very easy but powerful.



5、web.xml,这里的mapping映射原来是  /  斜杠,但是很奇葩的是这样就无法引用调用了 js 脚本的jsp页面,不知道是不是因为js脚本不在WEB-INF文件夹下的原因,但是目前还不知道怎么配置使得js能放在WEB-INF文件夹下,这里要请求添加和查询数据库就需要加上htnl的后缀,否则找不到映射:(用"/"访问js文件,把js文件放在WEB-INF文件夹外,然后直接用/***/***.js的形式来访问)

  

 Spring4 MVC Hibernate4 Application
    
    
        mvc-dispatcher
        org.springframework.web.servlet.DispatcherServlet
        1
    
    
    
        mvc-dispatcher
        *.html
    
    
      
        welcome.jsp  
    




7、关于浏览器接收json返回数据的问题这里先保留,之后再修改,对于目前返回的json数据,还需要pom引入两个库才行,以下是修改后的pom.xml,注意的是之前有两个json的库是注释起来的,但是之前的项目没有注释,暂时保留这两个库到底是否有用:


	4.0.0
	springmvc
	springmvc
	0.0.1-SNAPSHOT
	war

	
		src
		
			
				maven-compiler-plugin
				3.3
				
					1.7
					1.7
				
			
			
				maven-war-plugin
				2.6
				
					WebContent
					false
				
			
		
	

	
	
		4.1.5.RELEASE
		4.3.8.Final
		5.1.10
		4.11
		3.1.0
		2.1
		1.2
		1.7
	

	
	

		
		
			org.springframework
			spring-core
			${spring.version}
		

		
			org.springframework
			spring-context
			${spring.version}
		

		
			org.springframework
			spring-web
			${spring.version}
		

		
			org.springframework
			spring-webmvc
			${spring.version}
		

		
			org.springframework
			spring-orm
			${spring.version}
		

		
			org.springframework
			spring-test
			${spring.version}
			test
		

		
		
			org.hibernate
			hibernate-core
			${hibernate.version}
		

		
			org.hibernate
			hibernate-c3p0
			${hibernate.version}
		

		
		
			mysql
			mysql-connector-java
			${mysql.version}
		

		
		

		
			javax.servlet
			javax.servlet-api
			3.1.0
		

		
			javax.servlet.jsp
			jsp-api
			${jsp-version}
			provided
		

		
		
			jstl
			jstl
			${jstl-version}
		

		
		
			junit
			junit
			${junit-version}
			test
		

		
		
			net.sf.json-lib
			json-lib
			2.4
		
		
			com.fasterxml.jackson.core
			jackson-core
			2.4.1
		
		
			com.fasterxml.jackson.core
			jackson-databind
			2.4.1.1
		

	



第二篇:

关于json返回的问题:

以下是在springframework 3.1.1 版本的应配置:

1、如果按照项目点击打开链接的dispatch来配置(也就是什么额外的标签都不加)但是直接用  @ResponseBody 来返回String ,IE浏览器是有问题的,360、谷歌是可以的;直接用  @ResponseBody 来返回Map ,都会返回406错误:The resource identified by this request is only capable of generating responses with characteristics not acceptable according to the request "accept" headers;如果什么也不加,直接返回,是不行的,如下:

@RequestMapping("/test1")  
    public String test1() {   
        String message = "test1 = ModelAndView + String!";  
        return message;  
    }


2、如果按以下 dispatch 和 pom 依赖来配置,是可以解决以上406的问题,但是IE浏览器会提示下载 json 数据,360和谷歌是可以正常显示的。

dispatch:

  
  
    
    
   
    
    
    
   
 
   


添加的pom关于 json 的依赖:

       
        org.codehaus.jackson   
        jackson-core-asl   
        1.8.5   
       
       
        org.codehaus.jackson   
        jackson-mapper-asl   
        1.8.5   
    


3、通过 @ResponseBody 来返回 JSONArray 对象,加入pom依赖:

  
            net.sf.json-lib  
            json-lib  
            2.4  
        


但是在sprinframework 4.1.5 版本下,使用以上配置返回JSONArray 数据也会返回 406 错误.

1、spring 4 版本基础配置如下,dispatch,不需要加版本号了:

  
  
    
    
    
 
   
    
    
    
   

   
pom依赖:


			org.springframework
			spring-web
			4.1.5.RELEASE
		
		
			org.springframework
			spring-webmvc
			4.1.5.RELEASE
		


2、对于返回String类型对象,只需要添加dispatch,同样添加完之后是不兼容IE:

  
  
    
   
      
          
          
          
          
              
                atom=application/atom+xml  
                html=text/html  
                json=application/json  
                *=*/*  
              
          
       
    
 
   
    
    
    
   

   



对于返回 json 格式对象,需要加入pom依赖,之前 spring 3.1.1 版本使用的依赖就可以去掉,可以注意这里是注释起来的:


	4.0.0
	com.busymonkey
	springDemo
	0.0.1-SNAPSHOT
	war
	
		src
		
			
				maven-compiler-plugin
				3.3
				
					1.7
					1.7
				
			
			
				maven-war-plugin
				2.6
				
					WebContent
					false
				
			
		
	
	
		
			jstl
			jstl
			1.2
		
		
			org.springframework
			spring-web
			4.1.5.RELEASE
		
		
			org.springframework
			spring-webmvc
			4.1.5.RELEASE
		
		
		  
            net.sf.json-lib  
            json-lib  
            2.4  
        
          
            com.fasterxml.jackson.core  
            jackson-core  
            2.4.1  
          
          
            com.fasterxml.jackson.core  
            jackson-databind  
            2.4.1.1  
        

	



servlet-mapping干什么用的

主要是截获请求的,
如果你的url-pattern定义的是路径,那么以后所有对这个路径下资源的请求都会由servlet-name中定义的servlet处理;
如果你的url-pattern定义的是资源格式例如*.do等,那么对于所有符合这种格式的资源的请求都由指定的servlet处理。



你可能感兴趣的:(Web,Spring)