springmvc返回JSP源码

springmvc返回JSP源码问题:请求返回jsp源码解决:将项目的web.xml中 <servlet-mapping>下的<url-pattern>/*</url-pattern>改为<url-pattern>/</url-pattern>原理:首先理解/和/*区别再理解SpringMVC处理请求的流程DispatcherServl…

问题:请求返回jsp源码

springmvc返回JSP源码

解决:将项目的web.xml中 <servlet-mapping> 下的<url-pattern>/*</url-pattern>改为<url-pattern>/</url-pattern>

springmvc返回JSP源码

原理:首先理解/ 和 /*区别

springmvc返回JSP源码

再理解SpringMVC处理请求的流程

DispatcherServlet——》HandlerMapping——》HandlerAdapter——》Handler

这样走完后得到handler处理后的返回的ModelAndView

springmvc返回JSP源码

然后我们从这个地方开始看源码

我们将会得到一个线路得到ModelAndeView后 ——》processDispatchResult方法——》render方法——》renderMergedOutputModel方法——》最后执行rd.forward(request, response)

下面部分源码的截图

springmvc返回JSP源码流程图
​​​​​​

 

我们可以发现最后rd.forward 这个是转发的意思 那就是要转发到另外一个处理器去处理,转发到哪呢?看spring日志打印出来的内容springmvc返回JSP源码

 

我们可以发现,它是要转发到/WEB-INF/jsp/studentList.jsp这个地址,既然是转发,那又要经过web.xml中配置的servlet 那就得去匹配<url-pattern> 。好接下去就是关键点。如何处理/WEB-INF/jsp/studentList.jsp这个请求

根据前面说的<url-pattern> /* </url-pattern>将匹配所有的类型的请求 那么像/WEB-INF/jsp/studentList.jsp这样的请求肯定是会被匹配上的 所以就是我们自己的quickWeb这个servlet去处理 ,但是我们自己的servlet是如何处理的呢?

首先我们自己没有这样的controller去处理,

其次看配置文件

springmvc返回JSP源码springmvc返回JSP源码

自己配置的静态资源路径也没有设置jsp是如何映射的 ,那怎么办 ?

仔细看配置文件<mvc:default-servlet-handler/>这句话就是如果自己的都匹配不上 那就用default-servlet去处理 这个default是谁?

它就是tomcat中名称为default的servlet 。 

看tomcat的web.xml文件

springmvc返回JSP源码springmvc返回JSP源码

 

这个servlet的作用是什么呢

springmvc返回JSP源码

这个类的作用是专门为大多数web应用提供静态资源服务的 

所以/WEB-INF/jsp/studentList.jsp 这个请求最后到了DefaultServlet这里 它就把这个当成静态资源来处理 所以就直接返回了这个路径下的文件,即studentList.jsp这个文件了 所以界面上就直接显示了jsp源码 如果没找到就返回了404,这就是404的来源了

springmvc返回JSP源码

好了 上面解释的是不正确的处理方式,下面就介绍一下正确的处理方式

我们将web.xml中url改成这个<url-pattern>/</url-pattern> (即不要之前的*)  

转发之前的步骤都一样 现在看如何处理/WEB-INF/jsp/studentList.jsp这个转发的请求。

首先自己的应用由于配置的是<url-pattern>/</url-pattern> 所以就不会去处理这个请求了

那谁来处理呢?答案就是Tomcat服务器。

看tomcat的web.xml配置文件

springmvc返回JSP源码

JspServlet就是专门处理*.jsp这样的请求的(我们发现还可以处理*.jspx这样的请求) 

所以我们可以深入思考一下 ,如果要改成Velocity、FreeMarker等模版 那只需要修改哪些地方呢?

总结:为什么返回JSP源码了呢?

          1、请求在controller处理完之后会转发到视图servlet去处理数据与模版结合的事

        2、在转发后我们自己的servlet “拦截”了这个转发的请求 ,却没有对应的模版引擎去处理,所以最后由tomcat 的defaultservlet就把它当成一个静态资源去处理 。所以就返回了源码

         为什么改了之后能返回正确的界面了呢?

           3、因为url-pattern改成/之后 自己的servlet就不会去“拦截”这个请求 ,所以最后就被tomcat的JspServlet匹配上了 ,在这个servlet里面就会去渲染,处理数据和界面结合的事情

今天的文章springmvc返回JSP源码分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/33010.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注