Jump to content
Nat0ne

Web Service - Java HTML

Recommended Posts

Nat0ne

Olá,

Estou a criar um webservice em glassfish no java, com cliente servlet. O compilador é o Netbeans 7.0.1. Queria algo tão simples como o cliente puder inserir variaveis em textboxes ou afetar checkboxes e ao pressionar um botão essa informação fosse para o fornecedor do serviço.

Mas estou com dificuldades em ler as textboxes ou checkboxes do HTML e utiliza-las no próprio java (por enquanto é esta a minha solução). Já experimentei utilizar javascript, mas mesmo assim não consigo exportar nada para o java.

Embora já conheça um pouco de html, e já tenha programado várias vezes em java, sou novato em webservices e javascript.

Se alguém me pudesse dar alguma ajuda ficava bastante agradecido,

Nat0ne

Share this post


Link to post
Share on other sites
brunoais

Estás a tentar usar formulários no HTML?

Se sim, escreve aqui o código q tens para nós podermos ajudar.


"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Share this post


Link to post
Share on other sites
Nat0ne

O que estou a usar no HTML é apenas o que aparece por definição no webservice client com mais um codigo que encontrei no site http://www.w3schools.com que é:

<html>
<body>

<form action="form_action.asp">
First name: <input type="text" name="name1" value="valor1" /><br />
Last name: <input type="text" name="name2" value="valor2" /><br />
<input type="submit" value="Submit" />
</form>

<p>Click the "Submit" button and the input will be sent to a page on the server called "form_action.asp".</p>

</body>
</html>

Ou seja, toma como ação form_action.asp, que não sem bem o que é. E que eu queria que tomasse como ação era exportar as strings name1 e name2 para o java, para depois enviar para o fornecedor de serviços.

No java utilizo um cliente (chamado Loja1) que acede ao serviço client, em que o ficheiro, tem apenas este código abaixo, para além dos imports claro.

@WebServlet(name = "LojaServlet", urlPatterns = {"/LojaServlet"})
public class LojaServlet extends HttpServlet {
    @WebServiceRef(wsdlLocation = "WEB-INF/wsdl/localhost_8080/FornecedorWS/FornecedorWS.wsdl")
    private FornecedorWS_Service service;
        

    /** 
     * Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {        
       
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        try {
            
            out.println("<html>");
            out.println("<head>");
            out.println("<title>Servlet LojaServlet</title>");  
            out.println("</head>");
            out.println("<body>");
            out.println("<h1>Servlet LojaServlet at " + request.getContextPath () + "</h1>");
                        
            out.println("<html>");
            out.println("<body>");
            out.println("<form action=\"form_action.asp\">");
            out.println("First name: <input type=\"text\" name=\"FirstName\" value=\"valor1\" /><br />");
            out.println("Last name: <input type=\"text\" name=\"LastName\" value=\"valor2\" /><br />");
            out.println("<input type=\"submit\" value=\"Submit\" />");
            out.println("</form>");
            out.println("<p>Click the \"Submit\" button and the input will be sent to a page on the server called \"form_action.asp\".</p>");
            out.println("</body>");
            out.println("</html>");

            
            try {
                int result = sum(valor1, valor1); //Mal, valor1 e valor2 teriam de ser importados para o java e convertidos para int
                out.println("Result = " + result);
            } catch (Exception ex) {
            out.println("Exception: " + ex);
        }
            
            out.println("</body>");
            out.println("</html>");
             
        } finally {            
            out.close();
        }
    }

    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /** 
     * Handles the HTTP <code>GET</code> method.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /** 
     * Handles the HTTP <code>POST</code> method.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /** 
     * Returns a short description of the servlet.
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>

    private int sum(int i, int j) {
        org.me.fornecedor.FornecedorWS port = service.getFornecedorWSPort();
        return port.sum(i, j);
    }
}

Share this post


Link to post
Share on other sites
pedrotuga

Estás baralhado. Atiraste aí um conjunto de tecnologias numa caldeirada de dimensões épicas.

Por partes, para que queres um webservice SOAP se estás a enviar dados usando um interface web? APIs SOAP servem para outras aplicações comunicarem contigo, se comunicas com a tua aplicação por via de um interface web, tudo o que precisas é a servlet API.

Uma vez que não estás a usar funcionalidades avançadas (e deveras complicadas) como EJBs e afins, não há nenhum motivo para usares o glassfish. Só precisas de um servlet container. O mais comum  e que serve de referencia é o tomcat. Os servidores aplicacionais como o glassfish, jboss, etc. tambem incluem um servlet container, muitas vezes o que fazem é incluir o próprio tomcat na sua distribuição, ainda que nem toda a gente esteja ciente disto.

Se fizeres um form simples em HTML tambem não precisas de javascript para nada. Fazes submit do form e os dados preenchidos são enviados num pedido http para o endereço especificado no atributo 'action' do form. Basicamente o que tens que fazer é apontar o teu form (definindo o atributo  'action') para um endereço em que o teu servidor responda e canalize os dados para um servlet em particular onde depois fazes o que quiseres com eles.

Eu percebo que estejas confuso, o mundo de servlets e servidores aplicacionais é um pantano em cada um puxa a brasa à sua sardinha, é dificil encontrar documentaçao que aborde um só tema. Há demasiada documentação que mistura tudo, servlets, JSPs, web services, ejbs, etc.

Deixa de lado para já webservices e JSPs, foca-te nos servlets senão nunca vais deixar de ficar confuso.

Aconselho vivamente este tutorial para te arrumar as ideias:

http://www.apl.jhu.edu/~hall/java/Servlet-Tutorial/

Depois, se precisades mesmo de webservices há coisas como o axis que te permitem implementar webservices de forma estupidamente trivial.  Mas se não entenderes os conceitos básicos da servlet API vais ficar sempre confuso.

E claro, se tiveres dúvidas afixa aí.

Share this post


Link to post
Share on other sites
Nat0ne

Muito pela tua resposta pedrotuga.

Sim estou baralhado. Isto é necessário para um trabalho de uma cadeira de faculdade.

O trabalho consiste num Fornecedor de produtos, numa Loja, e num Cliente. O Fornecedor pode fornecer serviços (tais como disponibilizar nomes de produtos e os seus preços), a Loja acede a esses serviços, altera-os (mudando os preços por exemplo), e fornece também serviços para o Cliente poder aceder.

Ora, os requisitos são o uso de WebService com glassfish, com interface HTML, e eu escolhi o servlet para tipo de serviço client.

É exatamente como dizes, existe imensa documentação sobre estes tipos de tecnologia. Eu só queria mesmo conseguir ler estados de checkboxes em html, pressionando um botão. Encontrei informação sobre javascript e pensei que me pudesse ajudar, mas ao que parece não há necessidade disso, tal como dizes.

Pelo que dizes e a juntar ao que eu encontrei, estou a ver que isso pode ser feito pelo protocolo de http, mas não é isso que é pretendido. Este trabalho dá enfase aos serviços web, e como se pode ver no código abaixo, terei de utilizar a função "sum" que pertence ao serviço do fornecedor. (Note-se que aqui estou apenas a utilizar Fornecedor-Loja).

Não sei se estou a exprimir-me bem e a utilizar os termos corretos, pois é mesmo a primeira vez que trabalho com este tipo de tecnologia, embora tenha trabalhado com forms do Java, C e Delphi.

Vou tentar perceber melhor o que são servlets e dar uma vista de olhos no teu tutorial, e espero conseguir a interface com o html.

Se conseguir resolver esta situação logo o indicarei.

Share this post


Link to post
Share on other sites
Nat0ne

Já percebi que tenho de fazer um "post" ou "get" em HTML, com um action=ficheiro.jsp. Mas agora no ficherio.jsp ainda não sei como conseguir adquirir o conteudo da URL depois do "?".

Share this post


Link to post
Share on other sites
pedrotuga

Já percebi que tenho de fazer um "post" ou "get" em HTML, com um action=ficheiro.jsp. Mas agora no ficherio.jsp ainda não sei como conseguir adquirir o conteudo da URL depois do "?".

Não precisas de um JSP. Basta-te um servlet. Um JSP é um hack que usa um servlet por trás da cortinha, pode ser útil para vistas e afins, mas oculta-te os detalhes importantes, e para fazer debugging é o cabo dos trabalho. Para ires buscar os parametros do pedido HTTP numa JSP, acabas por ir dar ao mesmo, o que fica uma bela m... em termos de organização de código.

Google -> servlet get request parameters

para veres um exemplo.

Um bonus, se procurares na pasta temp ou work (não me lembro qual) do tomcat, encontras lá uns ficheiros com nomes parecidos com os das tuas JSPs, são os servlets que são gerados a partir dos teus JSPs.

Share this post


Link to post
Share on other sites
Nat0ne

Já descobri o que realmente queria.

Uma vez que quero variáveis em java afetadas pelo html, basta criar essas variaveis em java, e nos inputs de html igualar à variavel entre <% e %>.

Por exemplo <td><input type=checkbox name=materiais value=<%=var%> /></td>, em que var pertece ao java.

Sim, eu sei que é ridiculamente simples, mas na altura ainda nem tinha uma ideia definida.

Obrigado aos dois. Este assunto está resolvido.

Cumprimentos,

Nat0ne

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.