0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

web.xmlのjsp設定をspringに移行する。

Posted at

web.xmlとは?

web.xmlは、JavaのWebアプリケーションにおけるデプロイメント記述子。

デプロイメント?

アプリケーションやシステムを実際に利用できる環境に配置・展開すること。

中に何を書くの?

主に
filter
servlet
error-page
jsp-config
session-config
などを設定する。

その前に、springでweb.xmlが使えるの?

springプロジェクトでは、web.xmlがあっても良いけど、最近のSpringアプリケーションでは、Java ConfigやSpring Bootの導入によりweb.xmlは不要。web.xmlを使わない設定方法が主流になっている。

主流に合わせたいので、
従来のweb.xmlの設定が必要な場合に、どうやってその内容をSpringに設定するか?を調べた。
私の環境はspring boot 2.7.18で、jspを使っている。

方法1:application.properties

例えば、
jspのサイズが大きすぎて、tomcatからjsp 65535 bytes limitsエラーが出た。

The code of method _jspService(HttpServletRequest, HttpServletResponse) is exceeding the 65535 bytes limit Stacktrace:

これの解決策としては、web.xmlに以下の設定をのinit-paramとして記載すること。

  1. genStringAsCharArray = true
  2. mappedFile = false
  3. trimSpaces = true
<servlet>
     <servlet-name>jsp</servlet-name>
     <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
     <init-param>
       <param-name>ここにgenStringAsCharArrayとかの設定名</param-name>
       <param-value>ここに設定値</param-value>
     </init-param>

しかし、私のプロジェクトにはweb.xmlがない。
なのでspringのapplication.propertiesで、同じ設定を1ラインで書くことが出来る。

server.servlet.jsp.init-parameters.ここにgenStringAsCharArrayとかの設定名 = ここに設定値

これで解決。

方法2:ConfigurableServletWebServerFactory

例えば、
全てのjspに自動で含まれる部品のjspを設定したい時。
これは従来のweb.xmlではこんな感じで設定できる。

    <jsp-config>
        <jsp-property-group>
            <url-pattern>*.jsp</url-pattern>
            ...
            <include-prelude>/WEB-INF/jsp/部品のjsp.jsp</include-prelude>
            ...
        </jsp-property-group>
    </jsp-config>

しかし、私のプロジェクトにはweb.xmlがない。
なのでspringでBeanを一個作って対応する。

@SpringBootApplicationタグが付いているクラスが対象。

...

@Bean
    public ConfigurableServletWebServerFactory configurableServletWebServerFactory ( ) { 
        return new TomcatServletWebServerFactory() { 
            @Override 
            protected void postProcessContext(Context context) { 
                super.postProcessContext(context); 
                JspPropertyGroup jspPropertyGroup = new JspPropertyGroup(); 
                jspPropertyGroup.addUrlPattern("*.jsp");
                ...
                jspPropertyGroup.addIncludePrelude("/WEB-INF/jsp/base.jspf");
                ...
                JspPropertyGroupDescriptorImpl jspPropertyGroupDescriptor = new JspPropertyGroupDescriptorImpl(jspPropertyGroup); 
                context.setJspConfigDescriptor(new JspConfigDescriptorImpl(Collections.singletonList(jspPropertyGroupDescriptor), Collections.emptyList())); 
            } 
        }; 
    }
...

( ・。。・ )🖐

間違っている内容がありましたら、教えて頂ければ喜びます。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?