1、Struts2의 Json 처리
6775 단어 struts2
만약에 페이지에 Ajax 요청 데이터를 사용하고 Struts2가 Json 데이터를 되돌려 주기를 원한다면 Struts2가 자체적으로 가지고 있는 Json에 대한 지원 기능을 사용할 수 있습니다.Struts2의 Json에 대한 지원은 주로 차단기를 통해 이루어진다. Struts에서만 가능하다.xml에서 조금만 설정하고 Action에서 일정한 규칙을 준수하면
그런데
①、Struts 구성xml 파일은 다음과 같습니다.
<!-- json , action json -->
<package name="jsonpak" namespace="/" extends="json-default">
<action name="studentJson" class="studentAction" method="queryStudentsJson">
<result name="studentList" type="json"></result><!-- action bean json -->
</action>
</package>
json-default 패키지를 계승해야 하며,result를 json으로 설정한 후,용기는 action에서 get으로 시작하는 모든 방법을 자동으로 json 대상에 봉인합니다. (json 차단기로 합니다. json에 봉인된 데이터는 action의 속성과 상관없이 get으로 시작하는 방법과 관련이 있습니다. 속성이 하나도 없어도 get으로 시작하는 방법만 있으면 struts는 json 문자열을 정상적으로 봉인합니다.) 그리고 js의callback 방법을 호출합니다.json 데이터를 되돌려줍니다.
②、대응하는 Action 방법에서 처리된 데이터를 대응하는 클래스 속성에 배치하고 속성은 get 방법을 제공하면 된다.위의 설정에 대해 방법query Students Json에서 되돌려야 할 데이터 대상을 클래스 속성에 부여한 후 (대응하는 get 방법이 있음) 으로 되돌려줍니다.
studentList 결과 보기에서 가능(return "studentList")합니다.
2. Struts2는 Jons에 필요한 Jar 패키지를 지원합니다.
Struts2의 Json 지원 기능을 사용합니다. 필요한jar 패키지는commons-lang-2.4입니다.jar;json-lib-2.3-jdk13.jar;jsonplugin-0[1].32.jar;ezmorph-1.0.2.jar;commons-beanutils-1.7.0.jar.
3. Struts2 자체 Json 지원 기능을 사용하는 모든 데이터 Json화 문제.
위에서 json 처리를 실현하면 문제가 발생합니다.struts2의 차단기는 Action 클래스의 모든 get 방법을 Josn 문자열에 포맷합니다. 실제 수요에서는 일부 데이터만 필요할 수 있습니다. 이럴 때 xml 설정이나 주석 기능을 사용하여 선별 제어를 실현할 수 있습니다. 이렇게 하면 선택한 포맷 부분의 데이터를 json 문자열에 포맷할 수 있습니다.
①、Struts 구성xml 파일 구현: action 탭의 하위 탭result에서 이 문제를 해결하는 파라미터를 제공합니다. 일반적인 상황에서includeProperties 파라미터와excludeNullProperties 파라미터를 가장 많이 사용합니다.
includeProperties : , , “,” 。 json , eval ,<param name="root">result</param> , eval : data 。
<result type="json">
<param name="includeProperties">totalCount,data.*</param>
</result>
excludeProperties : , , “,” , includeProperties
:
<result type="json">
<!-- Struts2 , action getter -->
<!-- getter , -->
<param name="root">dataMap</param>
<!-- -->
<param name="excludeNullProperties">true</param>
<!-- dataMap -->
<param name="includeProperties">userList.*</param>
<!-- dataMap , , -->
<param name="excludeProperties">SUCCES</param>
</result>
② action의 get 방법에 주석을 붙인다.
get , , action get @JSON(serialize=false)
get @JSON(name="newName"), json 。
@JSON(format ="yyyy-MM-dd'T'HH:mm:ss") 、 。
@JSON(deserialize=true)
4. json 기능을 사용하면 다음과 같은 오류를 보고합니다.
Class com.googlecode.jsonplugin.JSONWriter can not access a member of class*
Class org.apache.struts2.json.JSONWriter can not access a member of class oracle.jdbc.driver.BaseResultSet with modifiers "public"
위의 오류는 Struts2의 json 기능을 처음 사용하는 개발자들이 자주 겪는 것입니다.
오류 의미: 프로그램의 어떤 데이터 구조를 json 형식으로 직렬화할 수 없습니다.
원인:struts2의 action 안의 데이터를 json 데이터로 변환할 때 get 방법을 제공하는 속성을 클라이언트에 직렬적으로 출력합니다.때때로 많은 속성들이 json 데이터로 직렬화될 수 없다. 예를 들어 여기의oracle이다.jdbc.driver.BaseResultSet.이럴 때 강제 전환까지 하면 이런 이상이 생길 수 있다.
해결 방법: json의 속성에 상응하는 get 방법을 직렬화할 수 없습니다. @JSON (serialize=false)제이슨에게 이 속성을 바꿀 필요가 없다고 알려주세요.아니면 이 get 방법을 아예 쓰지 않거나.
5, 자체 구현 Json 데이터 반환
Struts2가 자체로 가지고 있는 Json 기능을 사용하지 않고response 대상을 직접 조작하여 json 형식의 데이터를 되돌려줍니다. 이렇게 하면 간단할 뿐만 아니라 위의 각종 문제를 회피할 수 있습니다.
①、Struts.xml에서 특별한 설정이 필요하지 않고 struts-default 패키지를 직접 계승하면 됩니다. 아래를 참고하십시오.
<!-- action -->
<action name="pageQuery" class="classAction" method="pageQueryClasses">
</action>
<action name="createClass" class="classAction" method="createClass">
</action>
<action name="updateClass" class="classAction" method="updateClass">
</action>
<action name="deleteClassById" class="classAction" method="deleteClassById">
</action>
<action name="getClassById" class="classAction" method="getClassById">
</action>
</package>
액션 탭에result 하위 탭이 필요하지 않습니다.Action에 대응하는 방법에서null로 되돌아오면 됩니다.
public class ClassAction extends BaseAction implements ModelDriven<Classe>{
private static final long serialVersionUID = 8354047356806230499L;
/* ClassService */
private IClassService classService = null;
private Classe classe = new Classe();
/**
*
*
* @return
* @throws Exception
*/
public String pageQueryClasses() throws Exception {
int sourceNum = classService.getCount("");
List<Classe> classes = classService.findPage("", this.getPage(), this.getRows());
Page pageObj = new Page(0, sourceNum, 10, classes);
this.sendJsonDataToClient(JSONObject.fromObject(pageObj).toString(), ServletActionContext.getResponse());
return null;
}
………………………………………………………………
여기서 sendJsonDataToClient 메서드는 다음과 같습니다.
/**
*
*
* @param jsonData
* @param response
*/
public void sendJsonDataToClient(String jsonData, HttpServletResponse response) {
response.setContentType("text/html;charset=UTF-8");
response.setHeader("Pragma", "no-cache");
response.setHeader("Cache-Control", "no-cache, must-revalidate");
response.setHeader("Pragma", "no-cache");
try {
response.getWriter().write(jsonData);
response.getWriter().flush();
response.getWriter().close();
} catch (IOException e) {
e.printStackTrace();
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
apache struts2 취약점 검증이번에는 보안 캠프의 과제였던 apache struts2의 취약성에 대해 실제로 손을 움직여 실행해 보고 싶습니다. 환경 VirtualBox에서 브리지 어댑터 사용 호스트:macOS 10.12 게스트:ubuntu 1...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.