클라이언트로서 HTTP+JSON 인터페이스 프로젝트이고 JSP 및 기타보기가없는 경우 저지 프레임 워크를 사용하는 것이 가장 먼저 선택입니다. Spring3 MVC 기반 아키텍처에서 HTTP+JSON의 리턴 유형도 매우지지 적입니다. 그러나 개발 작업에서는 기능의 업그레이드가 확립 된 아키텍처를 기반으로하는 것이 매우 일반적입니다. 확립 된 프레임 워크 구조를 기반으로하는 struts2를 기반으로 HTTP+JSON 리턴 유형 인터페이스를 사용해야 할 필요성이 발생했습니다.
Struts2 : 1에서 JSON을 반환하는 두 가지 방법이 있습니다. 서블릿의 출력 스트림을 사용하여 JSON 문자열을 작성하십시오. 2. Struts2를 사용하여 JSON을 확장하십시오.
1. 서블릿 출력 스트림을 사용하십시오
JSON 인터페이스의 본질은 다음과 같습니다. JSON 데이터를 전달하는 과정에서 실제로 JSON 구문 형식을 준수하는 일반 문자열을 전달합니다. 소위 "JSON 개체"는이 JSON 문자열을 구문 분석하고 포장 한 결과를 나타냅니다.
따라서 여기에서는 서블릿의 httpservletresponse에 JSON 구문 형식으로 문자열을 작성하면됩니다. 여기에서 Printwriter 메소드를 사용하며 물론 스트림 스트림 메소드를 사용할 수도 있습니다. getWriter (setContentType 또는 setcharacterEncoding 메서드라고 함)를 호출하기 전에 인코딩이 설정되지 않음에 주목해야합니다. 이로 인해 중국어가 나옵니다. 또한 인코딩을 설정할 때 GetWriter를 호출하기 전에 설정해야합니다. 그렇지 않으면 유효하지 않습니다.
인터페이스 코드 쓰기 :
여기의 방법과 일반적인 struts2 방법의 차이점은 이것이 무효 리턴 유형이라는 것입니다.
public void write ()는 ioexception {httpservletResponse 응답 = servletactionContext.getResponse (); / * * getWriter (setContentType 또는 setCharacterEncoding 메서드라고하는 SetCharacterEncoding 메서드라고 함)를 호출하기 전에 인코딩이 설정되지 않습니다. 이로 인해 중국어가 나옵니다. 또한 인코딩을 설정할 때 GetWriter를 호출하기 전에 설정해야합니다. 그렇지 않으면 유효하지 않습니다. * */ response.setContentType ( "Text/ html; charset = utf-8"); //response.setcharacterencoding("utf-8 "); printwriter out = response.getwriter (); // JSON은 전달 과정에서 일반 문자열 형태로 전달됩니다. 다음은 String jsonstring = "{/"user/": {/"id/":/"123/",/"name/":/"zhang san/",/"say/":/"hello, json!/",/"password/":/"json/"},/": true} "; out.println (jsonstring); out.flush (); out.close (); }구성 조치
다음 구성에서 구성은 정상 작업 구성과 다르지 않지만 리턴 뷰가 없음을 명확하게 알 수 있습니다.
<action name = "쓰기"method = "쓰기" />
반환 값
{ "사용자": { "id": "123", "name": "Zhang San", "Say": "안녕하세요, JSON을 인쇄하는 행동입니다!", "password": "json"}, "success": true}2. struts2를 사용한 JSON의 확장
이 확장자를 사용하려면 지원 패키지를 추가해야합니다. 디버깅 후 두 가지 옵션이 있습니다.
1.xwork-core-2.1.6.jar 및 struts2-json-plugin-2.1.8.jar. struts2-json-plugin-2.1.8.jar를 사용하려면 xwork-core-*. jar는 xwork-core-*. jar의 2.2.1 이상 버전을 선택할 수 없습니다. Tomcat을 시작할 때 java.lang.noclassdeffounderror : org.apache.commons.lang.xwork.stringutils가 나타납니다.
2.xwork-2.1.2.jar 및 jsonplugin-0.34.jar. jsonplugin-0.34.jar를 사용하려면 지원하려면 xwork-core-*. jar를 xwork-2.1.2.jar로 전환해야합니다. jsonplugin-0.34.jar는 com.opensymphony.xwork2.util.textutils에 대한 지원이 필요하기 때문입니다. 2.2.1 이상의 XWork-Core-*. Jar 버전이 발견되며 Xwork-Core-2.1.6.jar에는 그러한 클래스가 없습니다.
마지막으로, 나는 원래 건설 방법 때문에 실제로 가치가 없다고 말하고 싶습니다. 나는 정말로 피곤하다. Maven과 같은 자동 구성 요소를 사용하면 개인 부품 간의 버전 차이에 의존하는 버그를 피할 수 있습니다. Maven의 구성 요소 방법은 세 번째 섹션의 "Struts2 Zero 구성"에 사용됩니다.
인터페이스 코드 작성
이 클래스에서 JSON () 메소드는 일반 Struts2 메소드입니다. 우리는이 작업을 확장자로두기 때문에 JSON 형식의 문자열이 여기에 표시되지 않습니다. 설정이 없으면 클래스의 모든 Getter 메소드의 반환 값이 클라이언트에게 반환 된 JSON 문자열에 포함됩니다. 포함 할 필요가없는 속성을 제거하려면 클래스 구조에 주석을 달기 위해 getter 메소드에서 @json (serialize = false)을 사용해야합니다. 물론, 다른 비즈니스에 영향을 미치지 않을 때이 getter 방법을 직접 제거 할 수도 있습니다. 따라서이 예제의 리턴 결과는 Datamap 객체를 변환하는 JSON- 형식 문자열입니다.
패키지 JSON; java.util.hashmap import; java.util.map import; import org.apache.struts2.json.annotations.json; com.opensymphony.xwork2.actionSupport 가져 오기; / ** * JSON TEST * * @Author Watson XU * @Date 2012-8-4 06:21:01 PM */ Public Class JSONACTION EXTENDS ACTUCTUPPORT {Private STATIC Final Long SerialVersionUid = 1L; 개인지도 <문자열, 객체> Datamap; 개인 문자열 키 = "그냥 참조"; public string json () {// 데이터 맵의 데이터는 struts2에 의해 JSON 문자열로 변환되므로 먼저 데이터를 지워야합니다. Datamap = new Hashmap <String, Object> (); 사용자 user = 새 사용자 (); user.setName ( "Zhang San"); user.setpassword ( "123"); Datamap.put ( "사용자", 사용자); // 작업이 성공적인 Datamap.put ( "성공", True)인지 태그를 넣습니다. // 결과 반환 성공을 반환합니다. } public map <string, object> getDatamap () {return datamap; } // json의 내용 @json (serialize = false) 공개 문자열 getKey () {return key; }}Aciton을 구성합니다
구성에서 먼저, 작업이 위치한 패키지는 JSON-Default를 상속해야하거나 상속 된 부모 패키지가 JSON-DEFAULT를 상속합니다. 이를 통해 JSON에 대한 동작 유형을 구성하고 직렬화 된 속성 및 기타 클래스 매개 변수를 구성 할 수 있습니다.
<? xml version = "1.0"alcoding = "utf-8"?> <! doctype struts public "-// apache 소프트웨어 재단 // dtd struts configuration 2.0 // en" "http://struts.apache.org/dtds/struts-2.0.dtd"> <package name = "JSON" extends = "struts-default, json-default"> <action name = "json"method = "json"> <result type = "json"> <!-여기서는 struts2에 의해 직렬화 될 속성을 지정합니다. 이 속성은 동작에 해당 getter 메소드가 있어야합니다 -> <param name = "root"> datamap </param> </result> </action> </package> </struts>
반환 값
{ "success": true, "user": { "name": "Zhang San", "Password": "123"}}3. maven 구성 요소를 사용하여 struts2 Zero 구성 사용 방법 :
3.1) WebApp을 구축하기 위해서는 여전히 Maven을 사용하여 빌드합니다. 건설 과정은 Limingnihao의 블로그를 말합니다. Eclipse를 사용하여 Maven의 SpringMVC 프로젝트를 구축하십시오.
3.2) struts2 종속성을 추가, struts2 구성 종속성 및 struts2 JSON 종속성 :
<pectionies> <!-struts2 Core Dependency-> <pectionement> <groupid> org.apache.structs </groupid> <artifactid> structs2- 코어 </artifactid> <3.4 </version> <type> jar </type> <scope> compile> </sc <groupid> org.apache.structs </groupid> <artifactid> structs2-convention-plugin </artifactid> <bersion> 2.3.4 </version> <type> jar </type> <scope> compile </scope> </fexendence> <!-Struts2의 JSON 종속성-> groupid> org.prach.pache.pache.pache.pache.pache.pache.pache.pache.pache.pach. <Artifactid> struts2-json-plugin </artifactid> <bersion> 2.3.4 </version> <type> jar </type> <cope> compile </scope> </fectionency> </fectionencies>
테스트 후 위의 종속성 룸에는 버전 호환 버그가 없습니다. 동일한 버전 일뿐 만 아니라 Maven의 자동 구조 방법으로 인해 발생합니다.
3.3) Web.xml을 구성하고 struts2를 활성화합니다.
<? xml version = "1.0"encoding = "utf-8"?> <web-app version = "2.5"xmlns = "http://java.sun.com/xml/xml/ns/javaee"xmlns : xsi = "http://www.w3.org/2001/xmlschema-instance. xsi : schemalocation = "http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <filter> <filter-name> strutspreandexecutefilter </filter-name> <filter-class> org.apache.struts2.dispatcher.ng.filter.strutsprepareanDexecuteFilter </filter-class> <init-param> <param-name> config </param-value> struts-fefault.xml, struts-plugin.xml, struts.xml </init-param> </filter> <filter-mapping> <filter-name> strutsprepareandexecuteFilter </filter-name> <url-pattern>/*</url-pattern> </filter-mapping> </web-app>
3.4) struts.xml을 구성하고 몇 가지 기본 상수 및 응용 프로그램을 설정하십시오.
<? xml version = "1.0"alcoding = "utf-8"?> <! doctype struts public "-// apache 소프트웨어 재단 // dtd struts configuration 2.0 // en" "http://struts.apache.org/dtds/struts-2.0.dtd"> <package name = "" "" "" 확장 = "JSON-DEFAULT, Struts-default"> <! 이름 = "struts.multipart.maxsize"value = "1073741824"/> <constant name = "struts.devmode"value = "false"/> </struts>
3.5) 작업 작성 및 구성. 컨벤션이 지정되지 않으므로 컨벤션 플러그인의 경우 모든 Java 클래스를 동작으로 끝나는 클래스 이름으로 처리합니다.
패키지 watson.action; java.util.hashmap import; java.util.map import; import org.apache.struts2.convention.annotation.action; import org.apache.struts2.convention.annotation.namespace; import org.apache.struts2.convention.annotation.namespace; import org.apache.struts2.convention.annotation.parentpackage; import org.apache.struts2.convention.annotation.result; import org.apache.struts2.convention.annotation.results; @parentPackage ( "base") @namespace ( "/watson") @results ({@result (name = "json", type = "json", params = { "root", "msg"})}) public class jsonaction {@Action (value = "json") public String JSON () msg.put ( "flag", "success"); map <string, string> user = new Hashmap <String, String> (); user.put ( "이름", "Zhang San"); user.put ( "Age", "34"); msg.put ( "사용자", 사용자); "JSON"을 반환합니다. } // ======================================================= STRING, OBJECT> MSG; public map <string, object> getmsg () {return msg; }} 3.6) 프로젝트를 배치하고 컨테이너를 시작한 다음 브라우저 주소 표시 줄에서 http : // localhost : 7070/struts2foo/watson/json을 입력하십시오. 결과가 다음과 같습니다.
{ "flag": "success", "user": { "age": "34", "name": "Zhang San"}}}위의 결과에서 구성이 0이 된 후 XML의 구성이 누락되고 대신 각 동작에 주석으로 주석이 붙어 있음을 알 수 있습니다. 여기서 XML에서 위 구성을 삭제하고 위의 JSONACTION의 상단 부분에 다음 코드를 씁니다.
@parentPackage ( "base") @namespace ( "/watson") @results ({@result (name = "json", type = "json", params = { "root", "msg"})})).루트는 XML 구성의 매개 변수 구성과 동일합니다.
4. 첨부 파일 :
작업 유형이 JSON 인 경우 구성 가능한 매개 변수에 대한 자세한 설명 :
<result type = "json"> <!- 여기에서 struts2에 의해 직렬화 될 속성을 지정합니다. 이 속성은 동작에 해당하는 getter 메소드가 있어야합니다-> <!-기본적으로,이 방법에 해당 속성이 있는지 여부에 관계없이 반환 값을 가진 모든 getter 메소드의 값은 시퀀싱됩니다.> <param name = "root"> datamap </param <!-빈 속성을 일련의 빈 속성을 일련화할지 여부를 지정할 것인지 "true <! DataMap-> <param name = "Includeproperties"> userList.*</param> <!-여기서 DataMap에서 제외되는 속성을 지정합니다. 이 제외 된 속성은 직렬화되지 않으며 일반적으로 위 매개 변수 구성과 동시에 나타나지 않습니다 .-> <param name = "excludeproperties"> 성공 </param> </result>
첨부 다운로드
strutsjson.rar
struts2foo.rar
위는 Struts2의 전체 내용입니다. 나는 그것이 당신에게 참조를 줄 수 있기를 바랍니다. 그리고 당신이 wulin.com을 더 지원할 수 있기를 바랍니다.