专业网站设计发展前景,泰安网站制作推荐,为什么百度不收录wordpress,店面设计费计入什么科目SpringMVC入门程序的扩展说明
注册前端控制器的细节
在web.xml文件注册SpringMVC的前端控制器DispatcherServlet时使用url-pattern标签中使用/和/*的区别
/可以匹配.html或.js或.css等方式的请求路径,但不匹配*.jsp的请求路径/*可以匹配所有请求(包括.jsp请求), 例如在过滤器…SpringMVC入门程序的扩展说明
注册前端控制器的细节
在web.xml文件注册SpringMVC的前端控制器DispatcherServlet时使用url-pattern标签中使用/和/*的区别
/可以匹配.html或.js或.css等方式的请求路径,但不匹配*.jsp的请求路径/*可以匹配所有请求(包括.jsp请求), 例如在过滤器中使用/*表示匹配所有请求DispatcherServlet并没有能力将jsp翻译成对应的Servlet,所以如果让它处理*.jsp请求会导致页面无法访问
由于SpringMVC核心配置文件是由DispatcherServlet初始化时自动解析的,所以配置文件的名称和位置必须固定,也可以在web.xml文件中进行指定等Tomcat自动解析
SpringMVC核心配置文件默认需要放在WEB-INF目录下且文件名称为springMVC-servlet.xml(springMVC由servlet-name决定)init-param初始化参数标签的子标签param-value设置SpringMVC配置文件位置和名称load-on-startup标签设置DispatcherServlet的初始化时间(默认在第一次请求时初始化), DispatcherServlet在启动过程中有大量的初始化操作要做,这些操作都放在第一次请求时执行会严重影响访问速度
?xml version1.0 encodingUTF-8?
web-app xmlnshttp://xmlns.jcp.org/xml/ns/javaeexmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsdversion4.0!--配置SpringMVC的前端控制器对浏览器发送的请求统一进行处理--servletservlet-namespringMVC/servlet-nameservlet-classorg.springframework.web.servlet.DispatcherServlet/servlet-class!--设置SpringMVC配置文件的位置和名称--init-param!--contextConfigLocation为固定值--param-namecontextConfigLocation/param-name!--使用classpath:表示从类路径查找配置文件例如maven工程中的src/main/resources--param-valueclasspath:springMVC.xml/param-value/init-param!--将前端控制器DispatcherServlet的初始化时间提前到服务器启动时,默认第一次访问时初始化--load-on-startup1/load-on-startup/servletservlet-mappingservlet-namespringMVC/servlet-name!--设置springMVC的核心控制器所能处理的请求的请求路径--url-pattern//url-pattern/servlet-mapping
/web-appTomcat中的Servlet
DefaultServlet是Tomcat中专门处理静态资源(除jsp和servlet)请求的Servlet, 遇到这些静态资源请求时Tomcat会在服务器下找到这个资源并返回
若DispatcherServlet的url-pattern/表示代替DefaultServlet处理静态资源请求(webapp的web.xml的配置会覆盖Tomcat服务器的web.xml配置)
DispatcherServlet前端控制器处理请求的方式是看哪个方法的RequestMapping是这个静态资源名,找到则执行方法找不到则报错
servletservlet-namedefault/servlet-nameservlet-classorg.apache.catalina.servlets.DefaultServlet/servlet-classinit-paramparam-namedebug/param-nameparam-value0/param-value/init-paraminit-paramparam-namelistings/param-nameparam-valuefalse/param-value/init-paramload-on-startup1/load-on-startup
/servletservlet-mappingservlet-namedefault/servlet-name!--DefaultServlet可以处理除jsp外的所有请求--url-pattern//url-pattern
/servlet-mappingJspServlet是Tomcat中专门负责处理.jsp请求的,将jsp翻译成对应的Servlet,访问这个Servlet把jsp页面中所有的内容以响应的方式输出到浏览器*
若DispatcherServlet的url-pattern/* 表示代替JspServlet处理.jsp请求 , 由于DispatcherServlet没有能力处理这种请求就会导致 jsp页面不能访问
servletservlet-namejsp/servlet-nameservlet-classorg.apache.jasper.servlet.JspServlet/servlet-classinit-paramparam-namefork/param-nameparam-valuefalse/param-value/init-paraminit-paramparam-namexpoweredBy/param-nameparam-valuefalse/param-value/init-paramload-on-startup3/load-on-startup
/servlet
servlet-mapping!--JspServlet它专门处理*.jsp请求--servlet-namejsp/servlet-nameurl-pattern*.jsp/url-patternurl-pattern*.jspx/url-pattern
/servlet-mapping视图解析器的类型
InternalResourceViewResolver是SpringMvc自带的视图解析器可以帮我们拼接页面地址,得到最终jsp页面的物理地址后解析语法并在服务器当中转发到视图对应的页面
?xml version1.0 encodingUTF-8?
beans xmlnshttp://www.springframework.org/schema/beansxmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexmlns:contexthttp://www.springframework.org/schema/contextxsi:schemaLocationhttp://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd!-- 扫描所有组件 --context:component-scan base-packagecom.atguigu/context:component-scan!-- 配置一个视图解析器 ,能帮我们拼接页面地址--bean classorg.springframework.web.servlet.view.InternalResourceViewResolverproperty nameprefix value/WEB-INF/pages//propertyproperty namesuffix value.jsp/property/bean
/beansThymeleaf是第三方的视图解析器可以帮我们拼接页面地址,得到最终html页面物理地址后解析页面中的语法并在服务器当中转发到视图对应的页面
?xml version1.0 encodingUTF-8?
beans xmlnshttp://www.springframework.org/schema/beansxmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexmlns:contexthttp://www.springframework.org/schema/contextxsi:schemaLocationhttp://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd!--自动扫描控制层组件--context:component-scan base-packagecom.atguigu.mvc.controller/context:component-scan!--配置Thymeleaf视图解析器--bean idviewResolver classorg.thymeleaf.spring5.view.ThymeleafViewResolverproperty nameorder value1/property namecharacterEncoding valueUTF-8/property nametemplateEnginebean classorg.thymeleaf.spring5.SpringTemplateEngineproperty nametemplateResolverbean classorg.thymeleaf.spring5.templateresolver.SpringResourceTemplateResolver!--视图前缀--property nameprefix value/WEB-INF/templates//!--视图后缀--property namesuffix value.html/property nametemplateMode valueHTML5/property namecharacterEncoding valueUTF-8 //bean/property/bean/property/bean
/beans总结**MVC的执行流程
客户端点击超链接发送请求后服务器处理请求的具体过程
若请求地址符合前端控制器的url-pattern(除*.jsp外的所有请求)该请求就会被前端控制器DispatcherServlet处理前端控制器解析SpringMvc的核心配置文件,扫描控制层组件找到所有的控制器将请求地址和这些控制器中RequestMapping注解的value属性值进行匹配若匹配成功说明该注解所标识的控制器方法就是处理该请求的方法, 然后利用反射机制执行目标方法得到一个字符串类型的逻辑视图名称视图解析器Thymeleaf拿到逻辑视图名称加上前缀和后缀组成完整的物理视图, 得到html页面地址后解析页面中的语法并在服务器当中转发到视图对应的页面