O DWR é uma estrutura, que simplesmente pode chamar os métodos Java diretamente no JavaScript sem ter que escrever muito código JavaScript. Sua implementação é baseada no Ajax e pode obter efeito sem atualização.
Existem muitos exemplos de DWR na internet, mas a maioria deles são apenas chamadas de algum método. Este artigo apresenta apenas o DWR no nível de uso e não envolve mais tecnologia e design. O objetivo é permitir que os iniciantes aprendam rapidamente como vários métodos Java são chamados no JavaScript.
1. Artigo de configuração DWR Web.xml
1. Correspondência mínima
<Verlet> <Verlet-name> dwr-invoker </servlet-name> <Servlet-class> uk.ltd.gethead.dwr.dwrservlet </servlet-class> </servlet> <revlet-mapping> <sutlet-name> dwr-invoker </ervlet-natter> <url-tattern>/dwr-name>
2. Quando queremos ver a página de teste (usando o modo de depuração/teste) gerado automaticamente pelo DWR, podemos adicioná -lo à configuração do servlet.
<iit-param> <amam-name> Debug </param-name> <amam-value> true </amam-value> </irit-param>
Este parâmetro DWR é falso por padrão. Se você escolher true, podemos ver cada classe DWR que você implanta via http: // localhost: porta/app/dwr. E você pode testar se cada método do código Java é executado normalmente. Por razões de segurança, você deve definir este parâmetro como falso em um ambiente formal.
3. Configuração de vários arquivos dwr.xml
Pode haver várias situações, vamos listá -las uma a uma. Um servlet, vários arquivos de configuração dwr.xml; Vários servlets, cada servlet corresponde a um ou mais arquivos de configuração dwr.xml.
3.1. Um servlet, vários arquivos de configuração dwr.xml
<Vertlet> <Verlet-name> dwr-invoker </servlet-name> <Servlet-class> uk.ltd.gethead.dwr.dwrservlet </servlet-class> <iit-param> <amam-name> config-1 </param-name> <aam-value>/web-inf/DWR1.xml </--value> <param-name>config-2</param-name> <param-value>WEB-INF/dwr2.xml</param-value> </init-param> <init-param> <param-name>config-2</param-name> <param-value>WEB-INF/dwr2.xml</param-value> </init-param></servlet>
Nesta configuração, o valor do param-name deve começar com a configuração. O param-name pode ter> = 0. Se não houver param-name, web-inf/dwr.xml será lido. Se houver mais de zero param-nomes, o arquivo web-inf/dwr.xml não será lido.
3.2. Vários servlets, cada servlet corresponde a um ou mais dwr.xml
</servlet> <Verlet-name> dwr-invoker </servlet-name> <Servlet-class> uk.ltd.getahead.dwr.dwrservlet </servlet-class> </servlet> <ervlet-class> <sirtlet-name> dwr-invoker1 </-name> <VertLast> uk.ltd.get> <amam-name> config-admin </param-name> <amam-value> web-inf/dwr1.xml </param-value> </irit-param> <iti init-param> <amam-name> depuração </amon-name> <amon-value> true </ama Param-value> </init-param> </servlet> <Servlet-Mapping> <Verlet-Mapping> <Verlet-Name> dwr-Invoker </servlet-name> <url-pattern>/dwr/*</url-pattern> </servlet-mapping> <ervlet-mapping> <ervlet-name> dwr-invoker1 </vletname <url-pattern>/dwr1/*</url-tattern> </servlet-mapping>
Nesse caso, podemos controlar as permissões de acordo com a J2EE Security e adicionar funções diferentes para URLs diferentes.
2. Uso DWR
1. Chamando o método java sem valor de retorno e parâmetros
1.1. Configuração de dwr.xml
<dwr> <borth> <create cleror = "new" javascript = "testclass"> <param name = "class" value = "com.dwr.testclass"/> <incluir method = "testmethod1"/> </crete> </permitir> </dwr>
As tags incluem coisas que podem ser expostas ao acesso ao JavaScript.
A tag especifica a classe Java que pode ser acessada no JavaScript e define como o DWR deve obter instâncias da classe para serem remotas. O atributo "novo" especifica o método de geração das instâncias da classe Java. Novo significa que o DWR deve chamar o construtor padrão da classe para obter a instância. Outros incluem métodos de mola, que podem ser integrados à mola do contêiner do IOC para obter a instância, etc. O atributo javascript = "testclass" especifica o nome usado pelo código JavaScript para acessar o objeto.
A tag especifica o nome da classe Java a ser exposto ao JavaScript.
A tag especifica o método a ser exposto ao JavaScript. Se não for especificado, todos os métodos serão divulgados.
A tag especifica o método para evitar o acesso.
1.2. Chamado em JavaScript
Primeiro, apresente scripts JavaScript
<script src = 'dwr/interface/testclass.js'> </script> <script src = 'dwr/mecany.js'> </script> <script src = 'dwr/util.js'> </script>
Entre eles, o testclass.js é gerado automaticamente pelo DWR com base no arquivo de configuração, e o mecanismo.js e util.js são arquivos de script que vêm com o DWR.
Em segundo lugar, escreva uma função JavaScript que chama um método Java
Função caltestmethod1 () {testclass.testmethod1 ();}2. Ligue para o método java com valor simples de retorno
2.1. DWR.XML Configuração
A mesma configuração que 1.1
<dwr> <borth> <create cleror = "new" javascript = "testclass"> <param name = "class" value = "com.dwr.testclass"/> <incluir method = "testmethod2"/> </create> </permitir> </dwr>
2.2. Chamado em JavaScript
Primeiro, apresente scripts JavaScript
Em segundo lugar, escreva uma função JavaScript que chama um método Java e uma função de retorno de chamada que recebe o valor de retorno.
Função caltestMethod2 () {testclass.testmethod2 (callbackfortestmethod2);} função callbackfortestmethod2 (dados) {// onde o valor de retorno da data recebe o método // o valor de retorno pode ser processado e exibido aqui etc. ("o valor de retorno é" + dados);onde o chamado delackfortestmethod2 é uma função de retorno de chamada que recebe o valor de retorno
3. Ligue para o método java com parâmetros simples
3.1. Configuração de dwr.xml
A mesma configuração que 1.1
<dwr> <borth> <create cleror = "new" javascript = "testclass"> <param name = "class" value = "com.dwr.testclass"/> <incluir method = "testmethod3"/> </create> </permitir> </dwr>
3.2. Chamado em JavaScript
Primeiro, apresente scripts JavaScript
Em segundo lugar, escreva uma função JavaScript que chama um método Java
Função caltestMethod3 () {// Defina o parâmetro var dados a serem transmitidos para o método java; // construir o parâmetro data = "teste string"; testclass.testmethod3 (dados);}4. Ligue para o método Java que retorna Javabean
4.1. DWR.XML Configuração
<dwr> <bistch> <create crior = "new" javascript = "testclass"> <param name = "class" value = "com.dwr.testclass"/> <incluir method = "testmethod4"/> </create> <convert c match = "" com.dwr.testBean "> <amp ("> "As tags são responsáveis por expor as classes e métodos usados para controles remotos da Web, enquanto as tags são responsáveis pelos parâmetros e tipos de retorno desses métodos. A função do elemento convert é informar ao DWR como converter tipos de dados entre a representação do objeto Java do lado do servidor e o JavaScript serializado. O DWR ajusta automaticamente tipos de dados simples entre representações Java e JavaScript. Esses tipos incluem tipos nativos de Java e suas respectivas representações de classe encapsuladas, bem como tipos de string, data, matriz e coleta. O DWR também pode converter Javabeans em representações JavaScript, mas por razões de segurança, requer configuração explícita e as tags executam essa função. O atributo C especifica o método de conversão para usar a especificação de nomeação de Javabean, o atributo match = "" com.dwr.testbean "especifica o nome do Javabean a ser convertido, e a tag especifica o atributo Javabean a ser convertido.
4.2. Chamado em JavaScript
Primeiro, apresente scripts JavaScript
Em segundo lugar, escreva uma função JavaScript que chama um método Java e uma função de retorno de chamada que recebe o valor de retorno.
onde o chamado backfortestmethod4 é uma função de retorno de chamada que recebe o valor de retorno
5. Ligue para o método Java com parâmetros Javabean
5.1. DWR.XML Configuração
<dwr> <borth> <create crior = "new" javascript = "testclass"> <param name = "class" value = "com.dwr.testclass"/> <incluir method = "testmethod5"/> </create> <convert c match = "com.dwr.testBean"> <amam name = "incluem" "".
5.2. Chamado em JavaScript
Primeiro, apresente scripts JavaScript
Em segundo lugar, escreva uma função JavaScript que chama um método Java
Função caltestMethod5 () {// Defina o parâmetro var dados a serem passados para o método java; // Construa o parâmetro, a data é na verdade um objeto dados = {nome de usuário: "user", senha: "senha"} testclass.testmethod5 (dados);}E adicione o seguinte segmento de configuração ao dwr.xml
<Ilmignatatures> <! [CDATA [importar java.util.list; importar com.dwr.testclass; importar com.dwr.testbean; testclass.testmethod7 (map <string, testbean>);]]> </Sinatatures>
3. A partir do exposto, podemos descobrir que, para o caso em que o valor de retorno do método Java é a lista (SET), o DWR o converte em uma matriz de objetos e passa um JavaScript; Para o caso em que o valor de retorno do método Java é o mapa, o DWR o converte em um objeto, onde o atributo de objeto é o valor da chave do mapa original e o valor do atributo é o valor correspondente do mapa original.
4. Se os parâmetros do método Java for (SET) e mapa, o JavaScript também deve construir dados JavaScript correspondentes para passar para Java de acordo com três tipos de coisas.