0

私のフォルダ構造:

ここに画像の説明を入力

サーブレット:

@WebServlet(name = "KPItoGSON", urlPatterns = {"/KPItoGSON/*"})

    public class KPItoGSON extends HttpServlet {

    /**
     * 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 {
            /*
             * TODO output your page here. You may use following sample code.
             */
            out.println("<html>");
            out.println("<head>");
            out.println("<title>Servlet KPItoGSON</title>");            
            out.println("</head>");
            out.println("<body>");
            out.println("<h1>Servlet KPItoGSON 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);
        Gson gson = new Gson();
        HttpServletRequest req = (HttpServletRequest) request;
        KPIListController klc = (KPIListController) req.getSession().getAttribute("kpilist");
        String json = gson.toJson(klc);
        Logger.getLogger(KPItoGSON.class.getName()).warning("The value is"+klc.getKPI().get(1).getUSTER());
        Logger.getLogger(KPItoGSON.class.getName()).info("The json "+json);


      response.setContentType("application/json");
            response.setCharacterEncoding("UTF-8");
            response.getWriter().write(json);
}

JQuery:

function onButtonClickOrCertainTime(){
     $.get('KPItoGSON', function(responseText) { // 
            alert(responseText);        
        });
}

エラー:

/GISPages/KPI/KPItoGSON 404 (Not Found) 

BalusC でこの例を試しています。この例では、データベースから新しいデータを javascript 変数に取得し、グラフを作成したいと考えています。私はサーブレットに慣れていません:(。jQueryを使用してリクエストをサーブレットに送信する際の問題は何ですか?データベースから関数onButtonClickOrCertainTimeを使用してボタンまたはポーリングするたびに新しいデータが必要なため 、GSONを使用しており、サーブレットの方が優れているか、jstlで可能ですか? ?

4

1 に答える 1

1

サーブレットがマップされ/KPItoGSON/*、これまでに提供された情報に基づいて webapp がコンテキスト ルートにデプロイされているようです。したがって、サーブレットは でリッスンしていhttp://localhost:8080/KPItoGSONます。

404 エラーは、サーブレットが/GISPages/KPIフォルダー内の HTML ページから呼び出されたことを示しています。でパス相対サーブレット URL を指定した$.get()ため、現在の要求 URL (ブラウザーのアドレス バーに表示される URL) のトップ フォルダーに相対します。http://localhost:8080/GISPages/KPI/KPItoGSONしたがって、無効なURL でサーブレットを呼び出そうとしています。URL でサーブレットを呼び出す必要がありますhttp://localhost:8080/KPItoGSON

HTML ページを 2 フォルダー上に移動する以外に、ajax 要求 URL で 2 フォルダー上に移動することで修正できます。

$.get('../../KPItoGSON', function(responseText) {
    alert(responseText);        
});

またはドメイン相対 URL (先頭のスラッシュで始まる) を使用して:

$.get('/KPItoGSON', function(responseText) {
    alert(responseText);        
});

ちなみに、サーブレットからメソッドを削除する必要があります。processRequest()JSON 出力は、不適切な HTML の一部で不正な形式になっています。

于 2012-08-01T10:55:11.660 に答える