0

Java のスキルを向上させるために、単純な j2ee フレームワーク (MVC) を構築しようとしています。

FrontServlet ですべてのリクエストを処理するように構築しました。私が使用したマッピングは次のとおりです。

web.xml :
<servlet>
    <servlet-name>Front</servlet-name>
    <servlet-class>test.FrontServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>Front</servlet-name>
    <url-pattern>/*</url-pattern>
</servlet-mapping>   

私の問題は、FrontServlet から JSP にリクエストを転送すると、JSP リクエストが FrontServlet によって処理され、ビューがレンダリングされないことです。

  • url-pattern "/*" を保持することで、この問題を解決するにはどうすればよいですか?
  • パフォーマンスを低下させずにサーブレットで JSP をレンダリングする方法はありますか?

お返事ありがとうございます!


  • 解決策 1 (@Bryan Kyle)

私はあなたのアドバイスに従おうとしています。このフィルターを作成しました:

public void doFilter(ServletRequest request,
   ServletResponse response, FilterChain chain) 
   throws IOException, ServletException 

   {
       HttpServletRequest req = (HttpServletRequest) request;

       if(!req.getRequestURL().toString().endsWith("jsp"))
       {
           // I changed the servlet url-pattern to "/front.controller"
           req.getRequestDispatcher("/front.controller").forward(req, response);
           /*chain.doFilter(req, resp);*/
       }
   }

<filter>
    <filter-name>Filter</filter-name>
    <filter-class>test.Filter</filter-class>
</filter>

<filter-mapping>
    <filter-name>Filter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>
  • そうですか?

ありがとう !

4

2 に答える 2

1

AFilterは、フロントコントローラーアプローチには不適切なソリューションです。

たとえば、またはurl-patternに一致するようにサーブレットのを改良する必要があります。フロントコントローラーがCSS/JS / images/etcのような無関係なリクエストを開始することは望ましくありません。例として、JSPがにあると仮定すると、サーブレットには次のようになります。/pages/**.do/pages/*/WEB-INF/foo.jsp

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    request.getRequestDispatcher("/WEB-INF" + request.getPathInfo() + ".jsp").forward(request, response);
}

問題のJSPをhttp:// localhost:8080 / contextname / pages/fooに表示する必要があります。

参照:

于 2011-02-23T20:02:30.550 に答える
1

Servletここでの問題は、 a の代わりに aを使用している可能性があると思いますServletFilter

ServletFilter は、その名前が示すように、リクエストの前処理と後処理を提供することでリクエストをフィルタリングします。次のようなことをする必要がある場合は、おそらく Filter を使用する必要があります。

  • アプリケーション全体にセキュリティ チェックを提供する
  • サーブレットまたは JSP によって取得されるリクエスト プロパティを設定する
  • 応答を圧縮する
  • ログのタイミング情報
  • 等。

Servlet Filtersに関するドキュメントをご覧ください。

于 2011-02-23T19:38:14.273 に答える