在gwt中提交formpanel时调用servlet

Ama*_*ngh 3 gwt servlets

我在GWT中提交FormPanel时尝试调用servlet.我在form.setAction("myurl")上设置了url,并且还在web.xml上进行了映射,但是在表单上suvmit没有调用servlet.这里是代码:

public class MainEntryPoint implements EntryPoint {

  public void onModuleLoad() {
      AbsolutePanel panel=new AbsolutePanel();
      FileUpload upload = new FileUpload();
      upload.setName("file");
      final FormPanel form = new FormPanel();
      form.setWidget(panel);

 form.setMethod(FormPanel.METHOD_POST);
 form.setEncoding(FormPanel.ENCODING_MULTIPART);

 form.setAction("/NewServlet");

RootPanel.get().add(new Label("path="+GWT.getModuleBaseURL()+"/NewServlet"));

 Button sub=new Button("Submit");
   sub.addClickHandler(new ClickHandler() {
            public void onClick(ClickEvent event) {
                RootPanel.get().add(new Label("In click event submiting form"));
                try{
                form.submit();
                }catch(Exception e){RootPanel.get().add(new Label(e+""));}

       }});

       form.addFormHandler(new FormHandler() {
      public void onSubmit(FormSubmitEvent event) {
        // This event is fired just before the form is submitted. We can take
        // this opportunity to perform validation.
                RootPanel.get().add(new Label("On submit"));
      }

      public void onSubmitComplete(FormSubmitCompleteEvent event) {
        // When the form submission is successfully completed, this event is
        // fired. Assuming the service returned a response of type text/html,
        // we can get the result text here (see the FormPanel documentation for
        // further explanation).
                RootPanel.get().add(new Label("On submiting complete"));
      }
    });



 panel.add(upload);
 panel.add(sub);

 RootPanel.get().add(form);

    }

}
Run Code Online (Sandbox Code Playgroud)

这是web.xml

<?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">
    <servlet>
        <servlet-name>upload</servlet-name>
        <servlet-class>org.fileup.client.UploadServlet2</servlet-class>
    </servlet>
    <servlet>
        <servlet-name>NewServlet</servlet-name>
        <servlet-class>NewServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>upload</servlet-name>
        <url-pattern>/uploadservlet2</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>NewServlet</servlet-name>
        <url-pattern>/NewServlet</url-pattern>
    </servlet-mapping>
    <session-config>
        <session-timeout>
            30
        </session-timeout>
    </session-config>
    <welcome-file-list>
        <welcome-file>welcomeGWT.html</welcome-file>
    </welcome-file-list>
</web-app>
Run Code Online (Sandbox Code Playgroud)

和NewServlet.java

public class NewServlet extends HttpServlet {

    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        try {
           // /* TODO output your page here
            out.println("<html>");
            out.println("<head>");
            out.println("<title>Servlet NewServlet</title>");  
            out.println("</head>");
            out.println("<body>");
            out.println("<h1>Servlet NewServlet at " + request.getContextPath () + "</h1>");
            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>

}
Run Code Online (Sandbox Code Playgroud)

请告诉我如何在提交FormPanel时调用NewServlet.

Tho*_*yer 8

你可能想要 form.setAction(GWT.getHostPageBaseURL() + "NewServlet")

  • 不,`GWT.getHostPageBaseURL()`保证以斜线结尾.证明:http://code.google.com/p/google-web-toolkit/source/browse/releases/2.3/user/src/com/google/gwt/core/client/impl/Impl.java#81(对于`GWT.getModuleBaseURL()`也是如此,btw) (3认同)