[リストへもどる]
一括表示
タイトルSpring2日目:ThymeleafでWebアプリを作るに関する質問2
記事No6989
投稿日: 2023/10/09(Mon) 11:09
投稿者katayama
リクエスト→ディスパッチャー→コントローラーの流れは理解しましたが、疑問に思う事がありました。

コントローラーがA,Bがあった場合、
ディスパッチャーでAのコントローラーを見に行けと言う記述がどこかに書かれているという事でしょうか?


また、Springの場合はコントローラのクラスに書かれている

@RequestMapping("/input")

この記述が最初にWEBアプリケーショURLを指定する時と、ボタン押下後の遷移先URLを担っているということになりますか?


Strutsの場合は、一番最初にWEBアプリケーションに入るURL(末尾が.jspとか)で、
ボタン押下時はStrutsコンフィグファイルのURL(末尾が.do)だったと思うのですが。


質問の背景として、
当方は、StrutsからSpringに変換する方法を考えております。

タイトルRe: Spring2日目:ThymeleafでWebアプリを作るに関する質問2
記事No6990
投稿日: 2023/10/09(Mon) 11:16
投稿者katayama
> リクエスト→ディスパッチャー→コントローラーの流れは理解しましたが、疑問に思う事がありました。
>
> コントローラーがA,Bがあった場合、
> ディスパッチャーでAのコントローラーを見に行けと言う記述がどこかに書かれているという事でしょうか?
>
>
> また、Springの場合はコントローラのクラスに書かれている
>
> @RequestMapping("/input")
>
> この記述が最初にWEBアプリケーショURLを指定する時と、ボタン押下後の遷移先URLを担っているということになりますか?
>
>
> Strutsの場合は、一番最初にWEBアプリケーションに入るURL(末尾が.jspとか)で、
> ボタン押下時はStrutsコンフィグファイルのURL(末尾が.do)だったと思うのですが。
>
>
> 質問の背景として、
> 当方は、StrutsからSpringに変換する方法を考えております。


すみません、追加で質問させてください。

Springboot起動中に、
http://localhost:8080/input
でURLに入れるのですが、

http://localhost:8080/output
はボタンからではなく、
URLを直指定して入るとエラーになります。

この仕組みがよくわからなかったので、
教示頂けますでしょうか。

タイトルRe^2: Spring2日目:ThymeleafでWebアプリを作るに関する質問2
記事No6992
投稿日: 2023/10/09(Mon) 18:58
投稿者サーチマン佐藤
> コントローラーがA,Bがあった場合、
> ディスパッチャーでAのコントローラーを
> 見に行けと言う記述がどこかに書かれているという事でしょうか?

いえ、AだけでなくBも、全てのコントローラーを見にいきます。

> この記述が最初にWEBアプリケーショURLを指定する時と、
> ボタン押下後の遷移先URLを担っているということになりますか?

そのボタンに遷移先のURLが書いてあれば、担うことになります。

タイトルRe^3: Spring2日目:ThymeleafでWebアプリを作るに関する質問2
記事No6996
投稿日: 2023/10/09(Mon) 20:41
投稿者katayama
> > コントローラーがA,Bがあった場合、
> > ディスパッチャーでAのコントローラーを
> > 見に行けと言う記述がどこかに書かれているという事でしょうか?
>
> いえ、AだけでなくBも、全てのコントローラーを見にいきます。
>
> > この記述が最初にWEBアプリケーショURLを指定する時と、
> > ボタン押下後の遷移先URLを担っているということになりますか?
>
> そのボタンに遷移先のURLが書いてあれば、担うことになります。

なんとなく、理解しました。
有難う御座います。

タイトルRe^2: Spring2日目:ThymeleafでWebアプリを作るに関する質問2
記事No6993
投稿日: 2023/10/09(Mon) 19:02
投稿者サーチマン佐藤
> http://localhost:8080/output
> はボタンからではなく、
> URLを直指定して入るとエラーになります。

私の環境ではエラーになりませんが、
どんなえらメッセージがでますか?

タイトルRe^3: Spring2日目:ThymeleafでWebアプリを作るに関する質問2
記事No6994
投稿日: 2023/10/09(Mon) 20:37
投稿者katayama
> > http://localhost:8080/output
> > はボタンからではなく、
> > URLを直指定して入るとエラーになります。
>
> 私の環境ではエラーになりませんが、
> どんなえらメッセージがでますか?

長いですが、全コピーしたものを貼り付けます。

Whitelabel Error Page
This application has no explicit mapping for /error, so you are seeing this as a fallback.

Mon Oct 09 20:36:28 JST 2023
There was an unexpected error (type=Bad Request, status=400).
Required parameter 'number' is not present.
org.springframework.web.bind.MissingServletRequestParameterException: Required request parameter 'number' for method parameter type String is not present
at org.springframework.web.method.annotation.RequestParamMethodArgumentResolver.handleMissingValueInternal(RequestParamMethodArgumentResolver.java:218)
at org.springframework.web.method.annotation.RequestParamMethodArgumentResolver.handleMissingValue(RequestParamMethodArgumentResolver.java:193)
at org.springframework.web.method.annotation.AbstractNamedValueMethodArgumentResolver.resolveArgument(AbstractNamedValueMethodArgumentResolver.java:114)
at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:122)
at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:179)
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:146)
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:118)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:884)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:797)
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1081)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:974)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1011)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:903)
at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:564)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885)
at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:205)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149)
at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149)
at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:482)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:115)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:341)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:391)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:894)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1740)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52)
at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191)
at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.base/java.lang.Thread.run(Thread.java:833)

タイトルRe^4: Spring2日目:ThymeleafでWebアプリを作るに関する質問2
記事No6995
投稿日: 2023/10/09(Mon) 20:39
投稿者katayama
> > > http://localhost:8080/output
> > > はボタンからではなく、
> > > URLを直指定して入るとエラーになります。
> >
> > 私の環境ではエラーになりませんが、
> > どんなえらメッセージがでますか?
>
> 長いですが、全コピーしたものを貼り付けます。
>
> Whitelabel Error Page
> This application has no explicit mapping for /error, so you are seeing this as a fallback.
>
> Mon Oct 09 20:36:28 JST 2023
> There was an unexpected error (type=Bad Request, status=400).
> Required parameter 'number' is not present.
> org.springframework.web.bind.MissingServletRequestParameterException: Required request parameter 'number' for method parameter type String is not present
> at org.springframework.web.method.annotation.RequestParamMethodArgumentResolver.handleMissingValueInternal(RequestParamMethodArgumentResolver.java:218)
> at org.springframework.web.method.annotation.RequestParamMethodArgumentResolver.handleMissingValue(RequestParamMethodArgumentResolver.java:193)
> at org.springframework.web.method.annotation.AbstractNamedValueMethodArgumentResolver.resolveArgument(AbstractNamedValueMethodArgumentResolver.java:114)
> at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:122)
> at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:179)
> at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:146)
> at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:118)
> at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:884)
> at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:797)
> at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
> at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1081)
> at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:974)
> at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1011)
> at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:903)
> at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:564)
> at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885)
> at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658)
> at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:205)
> at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149)
> at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
> at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174)
> at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149)
> at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)
> at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
> at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174)
> at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149)
> at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)
> at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
> at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174)
> at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149)
> at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)
> at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
> at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174)
> at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149)
> at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167)
> at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90)
> at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:482)
> at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:115)
> at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93)
> at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
> at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:341)
> at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:391)
> at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63)
> at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:894)
> at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1740)
> at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52)
> at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191)
> at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
> at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
> at java.base/java.lang.Thread.run(Thread.java:833)



http://localhost:8080/input

送信ボタン押下時では、
このエラーはでないです。

タイトルRe^5: Spring2日目:ThymeleafでWebアプリを作るに関する質問2
記事No6998
投稿日: 2023/10/09(Mon) 22:09
投稿者サーチマン佐藤
パラメータが渡っていないことが原因だと思います。

例えば、以下でアクセスしてください。
http://localhost:8080/output?number=122

送信ボタンを押したときは、パラメータのnumberが渡っているので、
エラーにならないのです。

タイトルRe^6: Spring2日目:ThymeleafでWebアプリを作るに関する質問2
記事No6999
投稿日: 2023/10/10(Tue) 01:20
投稿者katayama
> パラメータが渡っていないことが原因だと思います。
>
> 例えば、以下でアクセスしてください。
> http://localhost:8080/output?number=122
>
> 送信ボタンを押したときは、パラメータのnumberが渡っているので、
> エラーにならないのです。

なるほど、という事は、
input画面で何も入れずに送信ボタンを押した場合は、

number

""

が入るってことですかね。

空文字はOKだけど、
nullは許容していない挙動として認識致しました。

基本的にはコントローラーに書かれている
@RequestMapping("/input")
は直接URLで見に行けるという事で、理解致しました。

有難う御座います。

タイトルRe^7: Spring2日目:ThymeleafでWebアプリを作るに関する質問2
記事No7000
投稿日: 2023/10/10(Tue) 07:17
投稿者サーチマン佐藤
> 空文字はOKだけど、
> nullは許容していない挙動として認識致しました。

コントローラーのoutputのメソッドでnumberが定義されていますから。
そのことを意識して頂ければ。