Se for um projeto de interface HTTP+JSON como cliente e não há JSP e outras visualizações de visualização, o uso da estrutura de Jerry é definitivamente a primeira escolha. Sob a arquitetura baseada em MVC da Spring3, o tipo de retorno de HTTP+JSON também é muito solidário. No entanto, no trabalho de desenvolvimento, é muito comum que a atualização das funções seja baseada na arquitetura estabelecida. Encontrei a necessidade de usar a interface do tipo de retorno HTTP+JSON com base no STRUTS2, que é baseado na estrutura da estrutura estabelecida.
Existem duas maneiras de devolver o JSON em Struts2: 1. Use o fluxo de saída do servlet para escrever String JSON; 2. Use Struts2 para estender o JSON.
1. Use o fluxo de saída do servlet
A essência da interface JSON é: Durante o processo de aprovação de dados JSON, na verdade está apenas passando uma string comum que está em conformidade com o formato de sintaxe JSON. O chamado "objeto JSON" refere-se ao resultado de analisar e embrulhar essa string json.
Então, aqui você só precisa escrever uma string no formato de sintaxe json no httpServletResponse do servlet. Aqui você usa o método PrintWriter e, é claro, também pode usar o método do fluxo de fluxo. Deve-se notar que a codificação não está definida antes de chamar o GetWriter (chamado Método SetContentType ou SetCharacterencoding para definir a codificação), HttpServletResponse retornará uma instância de impressão codificada com a codificação padrão (qualquer ISO-8859-1). Isso causará chinês ilegal. Além disso, ao definir a codificação, ele deve ser definido antes de ligar para o GetWriter, caso contrário, será inválido.
Código da interface de gravação:
A diferença entre o método aqui e o método Geral Struts2 é que este é o tipo de retorno vazio.
public void write () lança IoException {httpServletResponse Response = servletActionContext.getResponse (); / * * A codificação não está definida antes de ligar para o getWriter (chamado Método SetContentType ou SetCharacterencoding para definir), * httpServletResponse retornará uma instância de impressão codificada com a codificação padrão (ou ISO-8859-1). Isso causará chinês ilegal. Além disso, ao definir a codificação, ele deve ser definido antes de ligar para o GetWriter, caso contrário, será inválido. * */ Response.SetContentType ("Text/ html; charset = utf-8"); //RESPONSE.SECHARACTERENCODING("utf-8 "); PrintWriter out = Response.getWriter (); // json é passado na forma de uma corda normal durante o processo de entrega. Aqui está um splicing simples de um para testar a string jSonstring = "{/" user/": {/" id/":/" 123/",/" name/":/" zhang san/",/" say/":/" hello, eu sou uma ação para imprimir um json!/",/"/":/" Json/"}}," succamber/""; out.println (JSonstring); out.flush (); out.Close (); }Ação de configuração
A partir da configuração a seguir, pode -se ver claramente que a configuração não é diferente da configuração de ação normal, mas não há visualização de retorno.
<ação name = "write" método = "write" />
Valor de retorno
{"Usuário": {"id": "123", "Name": "Zhang San", "Say": "Olá, sou uma ação para imprimir um json!", "Senha": "JSON"}, "Success": True}2. Extensão do JSON usando Struts2
Para usar essa extensão, você definitivamente precisará adicionar um pacote de suporte. Após minha depuração, aqui estão duas opções:
1.xwork-core-2.1.6.jar e struts2-json-plugin-2.1.8.jar. Se você deseja usar o STRUTS2-JSON-PLUGIN-2.1.8.JAR, seu jar XWork-core-*. Ao iniciar o TomCat, aparecerá: java.lang.noclassDeffoundError: org.apache.commons.lang.xwork.stringutils.
2.xwork-2.1.2.jar e jsonplugin-0.34.jar. Se você deseja usar o JSONPLUGIN-0.34.JAR para apoiar, precisará alternar seu xwork-core-*. Jar para xwork-2.1.2.jar. Porque JSONPLUGIN-0.34.JAR requer suporte para com.opensymphony.xwork2.util.textutils. As versões 2.2.1 e acima do xwork-core-*.
Finalmente, quero dizer que realmente não vale a pena por causa do método de construção original. Estou muito cansado. O uso de componentes automatizados como o Maven evitará os bugs que dependem das diferenças de versão entre as peças íntimas. O método do componente do MAVEN será usado na "configuração zero struts2" na terceira seção.
Código da interface de escrita
Nesta classe, o método JSON () é o método de Struts2 comum. Não vejo nenhuma cordas no formato JSON aqui, porque vamos deixar esse trabalho na extensão para fazê -lo. Sem as configurações, os valores de retorno de todos os métodos Getter sob a classe serão incluídos na sequência JSON retornada ao cliente. Para eliminar os atributos que não precisam ser incluídos, você precisa usar @json (serialize = false) no método getter para anotação na estrutura da classe. Obviamente, você também pode remover diretamente esse método Getter quando isso não afetar outras empresas. Portanto, o resultado de retorno neste exemplo é uma string json-format que converte o objeto DataMap.
pacote json; importar java.util.hashmap; importar java.util.map; importar org.apache.struts2.json.annotações.json; importação com.opensymphony.xwork2.actionsupport; / ** * Teste JSON * * @author watson xu * @date 2012-8-4 06:21:01 pm */ public class JSONACTION EXPRESENDA ACTIONSUPPPORT {private estático final serialversionUid = 1L; mapa privado <string, objeto> datamap; private string key = "basta ver consulte"; public String json () {// Os dados no datamap serão convertidos em uma string json por struts2, para que você deva primeiro limpar os dados nele. datamap = new hashmap <string, object> (); Usuário do usuário = novo usuário (); user.setName ("Zhang San"); user.setPassword ("123"); datamap.put ("Usuário", usuário); // coloque uma etiqueta se a operação é bem -sucedida datamap.put ("sucesso", true); // retorna o resultado de retorno do resultado; } mapa público <string, object> getDatamap () {return datamap; } // Defina o atributo de chave para não retornar como conteúdo de json @json (serialize = false) public string getKey () {return key; }}Configure Aciton
Na configuração, primeiro, o pacote em que a ação está localizada precisa herdar o JSON-Default, ou o pacote pai herdado herda JSON-Default. Isso configura o tipo de ação de retorno para JSON e pode configurar suas propriedades serializadas e outros parâmetros de classe.
<? xml versão = "1.0" coding = "utf-8"?> <! Doctype suporta public "-// Apache Software Foundation // DTD Struts Configuration 2.0 //" "http://struts.apache.org/dtds/stuts-2.0.dtd"> estends = "Struts-Default, JSON-Default"> <ação name = "json" método = "json"> <resultado tipo = "json"> <!-aqui especificamos o atributo a ser serializado por struts2. Este atributo deve ter um método getter correspondente na ação -> <param name = "root"> datamap </param> </resultado> </action> </package> </stuts>
Valor de retorno
{"Success": True, "Usuário": {"Nome": "Zhang San", "Senha": "123"}}3. Como usar a configuração zero do STRUTS2, usando o componente maven:
3.1) Para construir um webApp, ainda usamos o Maven para construí -lo. O processo de construção refere -se ao blog de Limingnihao: use o Eclipse para criar o projeto Springmvc da MAVEN.
3.2) Adicione a dependência do STRUTS2, dependência de configuração zero STRUTS2 e dependência do JSON STRUTS2:
<pendências> <!-Struts2 Core Dependência-> <Ependency> <puperiD> org.apache.structs </groupiD> <stifactId> structs2-core </stutifactId> <Version> 2.3.4 </sipers> <type> jar </sep> </scope> </scope> </dependência> <!-struts2 z jar> <GrupId> org.apache.structs </frugiD> <TRAFACTID> structS2-Convenção-plugin </stifactId> <versão> 2.3.4 </version> <type> jar </type> <COBE> compile </scope> </dependência> <!-strucs2 de JSON de dependência-<idence> <Pendic> <Propy> </scope> </dependência> <!-strucs2 de JSON de dependência-> <idenciid> <TarfactId> struts2-json-plugin </stifactId> <versão> 2.3.4 </version> <pype> jar </pype> <cope> compilou </scope> </dependency> </dependências>
Após o teste, não há bug compatível com a versão na sala de dependência acima, não apenas porque eles são a mesma versão, mas também por causa do método de construção automática do MAVEN.
3.3) Configure web.xml e ativar struts2:
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/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"> <filtroname> stutprepareanDexecil <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter </filter-class> <init-param> <param-name>config</param-name> <param-value>struts-default.xml,struts-plugin.xml,struts.xml</param-value> </init-param> </filter> <filter-mapping> <filter-name> strutsprepareAndExecUteFilter </filter-name> <url-tattern>/*</url-tattern> </filter-mapping> </web-app>
3.4) Configure o Struts.xml e defina algumas constantes e aplicativos básicos:
<? xml versão = "1.0" coding = "utf-8"?> <! Doctype suporta public "-// Apache Software Foundation // DTD Struts Configuration 2.0 //" "http://struts.apache.org/dtds/stuts-2.0.dtd"> <stuts.apache.org/dtds/stuts-2.0.dtd " estends = "JSON-Default, Struts-Default"> <!-Aqui você pode definir alguns relacionamentos globais de mapeamento de valor de retorno, etc.-> < /package> <constante name = "struts.action.extension" value = "" /> <constant name = "struts.ui.theMe" = "simples" /> <constant utu = "struts.i18n. name = "struts.multipart.maxsize" value = "1073741824"/> <nome constante = "struts.devmode" value = "false"/> </stuts>
3.5) Escreva e configure ação. Definido por nenhuma convenção especificada; portanto, para o plug -in de convenção, tratará todas as classes Java com nomes de classes que terminam com ação como ação:
pacote watson.action; importar java.util.hashmap; importar java.util.map; importar org.apache.struts2.convention.annotation.action; importar org.apache.struts2.convention.annotation.namespace; importar org.apache.struts2.convention.annotation.namespace; importar org.apache.struts2.convention.annotation.parentpackage; importar org.apache.struts2.convention.annotation.result; importar org.apache.struts2.convention.annotation.results; @Parentpackage ("base") @namespace ("/watson") @Results ({@Result (name = "json", type = "json", params = {"root", "msg"})}) public class {@action (value = "json") public string ()} {) ms. msg.put ("sinalizador", "sucesso"); Mapa <string, string> user = new hashmap <string, string> (); user.put ("Nome", "Zhang San"); user.put ("Age", "34"); msg.put ("Usuário", usuário); retornar "json"; } // ======================================= MAPATO PRIVADO <String, Objeto> Msg; mapa público <string, objeto> getMsg () {return msg; }} 3.6) Implante o projeto, inicie o contêiner e digite: http: // localhost: 7070/struts2foo/watson/json na barra de endereço do navegador. Espere até que os resultados sejam os seguintes:
{"Flag": "Sucesso", "Usuário": {"Age": "34", "Name": "Zhang San"}}}A partir dos resultados acima, podemos ver que, após a configuração zero ser ativada, a configuração no XML está ausente e, em vez disso, anotada com anotação em cada ação. Aqui, excluímos a configuração acima no XML e escrevemos o código a seguir na parte superior do Jsonaction acima:
@Parentpackage ("base") @namespace ("/watson") @results ({@Result (name = "json", type = "json", params = {"root", "msg"})})A raiz é equivalente à configuração do parâmetro na configuração XML.
4. Anexo:
Explicação detalhada dos parâmetros configuráveis quando o tipo de ação de retorno é JSON:
<resultado tipo = "json"> <!- Aqui especifica as propriedades que serão serializadas por struts2. Esta propriedade deve ter um método getter correspondente na ação-> <!-Por padrão, os valores de todos os métodos getter com valores de retorno serão sequenciados, independentemente de o método ter propriedades correspondentes-> <param name = "root"> datamap </param> <!-Especifica se as propriedades vazias-> <ampamAp (! DataMap serializada-> <param name = "incluirProperties"> userList. Essas propriedades excluídas não serão serializadas e geralmente não aparecem ao mesmo tempo que a configuração do parâmetro acima -> <param name = "excluiProperties"> sucessão </amul> </sicult>
Download de anexo
Strutsjson.rar
Struts2foo.rar
O exposto acima é o conteúdo inteiro dos objetos JSON de retorno do Struts2. Espero que possa lhe dar uma referência e espero que você possa apoiar mais o wulin.com.