記事ディレクトリ
[Shang Silicon Valley] SpringBoot2 Zero-Basic 入門チュートリアル - 講師: Lei Fengyang
Notes
道はまだ続く 夢はまだ待っている
1. ネイティブ サーブレット API を使用する
この方法でネイティブ サーブレット API を使用することをお勧めします。
1.1、サーブレット
Servlet 3.0 以降で提供されるネイティブ アノテーションを使用します。
@WebServlet(urlPatterns = “/my”)
効果: web.xml に構成を記述する必要はなく、直接応答、Spring インターセプターなし、urlPatterns: アクセス パス。
メイン構成クラスでネイティブ サーブレット コンポーネントをスキャンするパッケージを指定します: @ServletComponentScan(basePackages = “com.atguigu.admin.servlet”)。記述されていない場合、グループ構成クラスにあるすべてのパッケージがデフォルトでスキャンされます。
@WebServlet(urlPatterns = "/my")
public class MyServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.getWriter().write("6666");
}
}
1.2、フィルター
Servlet 3.0 以降で提供されるネイティブ アノテーションを使用します。
@WebFilter(urlPatterns={“/css/ “,”/images/ ”})
効果: web.xml に構成を記述する必要はありません。urlPatterns: インターセプト パス。複数のパスをインターセプトできます。
@WebFilter(urlPatterns={
"/my"})
public class MyFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("MyFilter初始化完成");
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
System.out.println("MyFilter工作");
chain.doFilter(request, response);
}
@Override
public void destroy() {
System.out.println("MyFilter销毁");
}
}
1.3、リスナー
Servlet 3.0 以降で提供されるネイティブ アノテーションを使用します。
@WebListener
@WebListener
public class MyServletContextListener implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent sce) {
System.out.println("监听项目初始化完成");
}
@Override
public void contextDestroyed(ServletContextEvent sce) {
System.out.println("监听项目销毁");
}
}
1.4. ネイティブサーブレットがインターセプターによってインターセプトされない理由
システムには 2 つのサーブレットがあります (スプリング ブート: DispatcherServlet –>/ および MyServlet -->/my)
1.5. 拡張機能: DispatchServlet の登録方法
● DispatcherServlet プロパティはコンテナ内で自動的に設定され、WebMvcProperties にバインドされます。対応する設定ファイルの設定項目は spring.mvc です。
● ServletRegistrationBean を通じて DispatcherServlet を設定します。
● デフォルトのマッピングは / パスです。
Tomcat サーブレットを開発に使用する前に、複数のサーブレット パスが互いに重なり合い、正確な最適化原則を使用して複数のサーブレットが同じレイヤー パスを処理できます。
例:
2 つのパス
A: /my/
B: /my/1
/my/1 が送信されると B パスが使用され、/my/2 が送信されると A パスが使用されます。
2. RegistrationBean を使用する
ServletRegistrationBean、FilterRegistrationBean、ServletListenerRegistrationBean を使用してコンポーネントを登録することもできます。
@Configuration
public class MyRegistConfig {
// servlet
@Bean
public ServletRegistrationBean myServlet() {
MyServlet servlet = new MyServlet();
return new ServletRegistrationBean<MyServlet>(servlet, "/my");
}
// filter
@Bean
public FilterRegistrationBean myFilter() {
MyFilter myFilter = new MyFilter();
FilterRegistrationBean filter = new FilterRegistrationBean(new MyFilter());
filter.setUrlPatterns(Arrays.asList("/my"));
return filter;
}
// listener
@Bean
public ServletListenerRegistrationBean myListener() {
MyServletContextListener listener = new MyServletContextListener();
return new ServletListenerRegistrationBean(listener);
}
}