dede能建立手机网站吗计算机做网站开题报告
web/
2025/10/4 12:20:35/
文章来源:
dede能建立手机网站吗,计算机做网站开题报告,手机版网站源码,怀化市住房与城乡建设厅网站目录: SpringMVC 的 “整合支持” ( 引入Web依赖启动器#xff0c;几乎可以在无任何额外的配置的情况下进行Web开发)1.SpringMVC 自动配置 介绍 ( 引入Web依赖启动器后#xff0c;SpringBoot会自动进行一些“自动配置”#xff0… 目录: SpringMVC 的 “整合支持” ( 引入Web依赖启动器几乎可以在无任何额外的配置的情况下进行Web开发)1.SpringMVC 自动配置 介绍 ( 引入Web依赖启动器后SpringBoot会自动进行一些“自动配置”自动把相关的类加入到IOC容器中 )2.Spring MVC功能扩展实现 实际开发中SpringBoot提供了很多自动化配置但还要进行一些”功能拓展“ 2.1 项目基础环境搭建2.2 功能拓展实现 ( MVC拓展功能 )① 创建视图管理器 ( 属于MVC拓展功能要自行在SpringBoot进行相关配置 )② 创建自定义拦截器 ( 将该 自定义的拦截器 用于在SpringBoot的MVC开发中添加“拦截器”默认情况下SpringBoot不会自动为项目配置一个“拦截器” ) 作者简介 一只大皮卡丘计算机专业学生正在努力学习、努力敲代码中! 让我们一起继续努力学习 该文章参考学习教材为 《Spring Boot企业级开发教程》 黑马程序员 / 编著 文章以课本知识点 代码为主线结合自己看书学习过程中的理解和感悟 最终成就了该文章 文章用于本人学习使用 同时希望能帮助大家。 欢迎大家点赞 收藏⭐ 关注哦 侵权可联系我进行删除如果雷同纯属巧合 通常在 Web 开发中会涉及 静态资源的访问支持 、视图解析器 的配置、 转换器 和 格式化器 的定制、文件上传下载 等功能甚至还需要考虑到与Web服务器关联的 Servlet相关组件的定制。Spring Boot框架 支持整合一些 常用Web框架从而实现Web开发并 默认支持Web开发中的一些通用功能。 SpringMVC 的 “整合支持” ( 引入Web依赖启动器几乎可以在无任何额外的配置的情况下进行Web开发) 为了在SpringBoot中 实现并简化Web开发SpringBoot为一些**常用的Web开发框架**提供了 整合支持例如 Spring MVC、Spring WebFlux 等框架 使用 SpringBoot进行Web开发时只需要在 项目 中 引入 对应 Web开发框架 的 依赖启动器 即可。 1.SpringMVC “自动配置” 介绍 ( 引入Web依赖启动器后SpringBoot会自动进行一些“自动配置”自动把相关的类加入到IOC容器中 ) 在Spring Boot项目中一旦引入了 Web依赖启动器 : spring-boot-starter-web 那么SpringBoot 整合Spring MVC框架 默认实现的一些 xxxAutoConfiguration 自动配置类 就会自动生效 ( 通过配置类 把相关的类加入到IOC容器中 ) 几乎 可以在无任何额外配置 的情况下 进行Web 开发。 SpringBoot为整合SpringMVC框架实现Web开发主要提供了以下 自动化配置的功能特性 (1内置了两个视图解析器 : ContentNegotiatingViewResolver 和 BeanNameViewResolver。 (2) 支持静态资源以及 WebJars。 (3自动注册了转换器和格式化器。 (4支持 Http消息转换器。 (5自动注册了**消息代码解析器。 (6支持静态项目首页 index.html。 (7支持定制应用图标 favicon.ico。 (8自动初始化** Web数据绑定器 ConfigurableWebBindingInitializer。 Spring Boot 整合Spring MVC进行 Web开发 时 提供了很多默认配置而且 大多数时候 使用 默认配置 即 可满足开发需求。 例如Spring Boot整合Spring MVC进行Web开发时不需要额外配置视图解析器。 2.Spring MVC功能扩展实现 实际开发中SpringBoot提供了很多自动化配置但还要进行一些”功能拓展“ 导入web场景依赖启动器后Spring Boot会为MVC开发进行很多“自动化配置”但在 实际开发中 还需要进行关于MVC开发的 功能拓展下面将通过一个具体的案例讲解Spring Boot整合Spring MVC框架中的 MVC功能拓展 。 对一些 功能进行扩展实现。 2.1 项目基础环境搭建 基础环境搭建 MyLocalResolver.java : package com.myh.chapter_10.config;import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.context.annotation.Bean;
import org.springframework.web.servlet.LocaleResolver;
import org.thymeleaf.util.StringUtils;import java.util.Locale;Configuration
public class MyLocalResolver implements LocaleResolver {Overridepublic Locale resolveLocale(HttpServletRequest httpServletRequest) {String l httpServletRequest.getParameter(l);String header httpServletRequest.getHeader(Accept-Language);Locale locale null;if (!StringUtils.isEmpty(l)) {String[] split l.split(_);//根据-进行字符串拆分locale new Locale(split[0], split[1]);} else {String[] splits header.split(,);String[] split splits[0].split(-);locale new Locale(split[0], split[1]);}return locale;}Overridepublic void setLocale(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Locale locale) {}Bean //将该方法的返回值对象交给IOC容器管理public LocaleResolver localeResolver() {return new MyLocalResolver();}
}LoginController.java : package com.myh.chapter_10.controller;import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;import java.util.Calendar;Controller
public class LoginController {GetMapping(/toLoginPage)public String toLoginPage(Model model) { //参数类型为Model类型该类型可以返回文本给前端model.addAttribute(currentYear, Calendar.getInstance().get(Calendar.YEAR));return login; //String的返回值类型可以返回一个视图}
}login.properties : login.tip请登录
login.username用户名
login.password密码
login.rememberme记住我
login.button登录login_en_US.properties : login.tipPlease sign in
login.usernameUsername
login.passwordPassword
login.remembermeRemember me
login.buttonLoginlogin_zh_CN.properties : login.tip请登录
login.username用户名
login.password密码
login.rememberme记住我
login.button登录css 和 img ( 百度网盘 ) login.html : !DOCTYPE html
!-- 让该页面支持 --
html langen xmlns:thhttp://www.thymeleaf.org
headmeta charsetUTF-8meta http-equivContent-Type contenttext/html;charsetUTF-8meta nameviewport contentwidthdevice-width,initial-scale1,shrink-to-fitnotitle用户登录页面/titlelink th:href{/login/css/bootstrap.min.css} relstylesheetlink th:href{/login/css/signin.css} relstylesheet
/head
body classtext-center
form classform-signinimg classmb-4 th:src{/login/img/login.jpg} width72 height72/h1 classh3 mb-3 font-weight-normal th:text#{login.tip}请登录/h1input typetext classform-control th:placeholder#{login.username} required autofocusinput typepassword classform-control th:placeholder#{login.password} requireddiv classcheckbox mb-3label input typecheckbox valueremember-me/[[#{login.rememberme}]]/label/divbutton classbtn btn-lg btn-primary btn-block typesubmit th:test#{login.button}登录/buttonp classmt-5 mb-3 text-mutedspan th:text${currentYear}2018/span-span th:text${currentYear}12019/span/pa classbtn btn-sm th:href{/toLoginPage(lzh_CN)}中文/aa classbtn btn-sm th:href{/toLoginPage(len_US)}English/a
/form
/body
/htmlpom.xml : ?xml version1.0 encodingUTF-8?
project xmlnshttp://maven.apache.org/POM/4.0.0 xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsdmodelVersion4.0.0/modelVersionparentgroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-parent/artifactIdversion3.2.4/versionrelativePath/ !-- lookup parent from repository --/parentgroupIdcom.myh/groupIdartifactIdchapter_10/artifactIdversion0.0.1-SNAPSHOT/versionnamechapter_10/namedescriptionchapter_10/descriptionpropertiesjava.version17/java.version/propertiesdependenciesdependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-thymeleaf/artifactId/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-test/artifactIdscopetest/scope/dependency/dependencies!-- build--
!-- plugins--
!-- plugin--
!-- groupIdorg.springframework.boot/groupId--
!-- artifactIdspring-boot-maven-plugin/artifactId--
!-- /plugin--
!-- /plugins--
!-- /build--/project运行项目后访问 http://localhost:8080/toLoginPage 能查看到项目的登录页面login.html如下所示 2.2 功能拓展实现 ( MVC拓展功能 ) 在 SpringBoot 中提供了很多关于 MVC 的 “自动化配置”很多 MVC对象 都 默认配置好 / 大部分MVC内容SpringBoot 都给你 自动默认配置 好了很多的 MVC功能 / MVC效果都是可以免配置直接使用的 ( 如: 实现的页面跳转 ) 但此时如果想要使用一些 拓展功能 / 实现功能的拓展 可以通过 WebMvcConfigurer 这个 接口来实现WebMvcConfigurer 接口有很多 方法 该接口 中的 方法 可用于 “MVC功能拓展”。 “MVC功能拓展功能① ” 注册 “视图管理器” : 视图管理器” 可以 将“多个url”自动映射到指定的“视图页面”上 通过 WebMvcConfigurer接口的 addViewController( ViewControllerRegistry registry )方法 即可创建“视图管理器” 达到想要的需求效果。 “MVC功能拓展功能② ” 自定义 “拦截器” : 自定义一个拦截器 ( 用于拦截url请求 ) 在SpringBoot的MVC中用这个 自定义的 “拦截器” 替代 SpringBoot中 “默认的拦截器”。 “MVC功能拓展功能③ ” 注册 “格式化器” : … ( 其他MVC拓展功能 ) ( WebMvcConfigurer接口 中的每一个方法都可用于拓展MVC功能 ) ① 创建视图管理器 ( 属于MVC拓展功能要自行在SpringBoot进行相关配置 ) “视图管理器” 能解决的需求 可以 将“多个url”自动映射到指定的“视图页面”上 例如 通过配置“视图管理器” 可以让 /toLoginPage请求 和 /login.html请求都自动映射到login.html这个页面中。 创建 视图管理器 的 操作步骤/流程为 ①首先 创建一个类实现WebMvcConfigurer接口 ②在 类 中重写该 接口的 addViewController( ViewControllerRegistry registry)方法。 ③在方法体中通过ViewControllerRegistry对象中的 setViewName( )方法来决定哪些url能访问指定的“视图页面”。 视图管理器 的例子如 在项目基础环境搭建代码的基础上添加如下代码 MyMVCconfig.java : package com.myh.chapter_10.config;import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;/*** 在SpringBoot中提供了很多关于MNC的“自动化配置”很多MVC对象都默认配置好/大部分MVC内容SpringBoot都给你自动默认配置好了很多的* MNC功能/MVC效果都是可以免配置直接使用的如实现的页面跳转但此时如果想要使用一些拓展功能/实现功能的拓展可以通过* WebMvcConfigurer这个接口来实现WebMvcConfigurer接口有很多方法该接口中的方法可用于MVc功能拓展。** MVC拓展功能① : 视图管理器 :* 现在你想要实现无论用户访问/toLoginPage 还是 访问/login.html 还是其他ulr 都能跳转到 login.html这个页面这时候就可以调用* WebMvcConfigurer接口 的 addViewControllers(ViewControllerRegistry registry) 方法来来创建“视图管理器”的方式来实现“上面要求的效果”* ( 通过视图管理器可以实现多个url访问到同一个视图页面,但通过这种方式是无法在后端中传递“参数”给“视图页面的”,这时可用拓展功能中的 过滤器: 来赋值/传递之给“指定的视图页面” )**/
Configuration //比较给类为“配置类”,同时将给类加入到IOC容器中
public class MyMVCconfig implements WebMvcConfigurer { //该类实现了用于MVC功能拓展的“WebMvcConfigurer接口”/*** SpringBoot中的关于MVC的拓展功能一 : 视图管理器* 具体的操作为:* ①首先创建一个类实现WebMvcConfigurer接口(改接口的作用: 通过该接口中的方法来拓展MVC功能)* ②在类中重写WebMvc中关于能实现“视图管理器”效果的addViewController(ViewControllerRegistry registry)方法* ③在方法体中通过ViewControllerRegistry对象中的方法来决定哪些url能访问指定的“视图页面”*///添加“视图管理器” (属于SpringBoot中的MVC的“拓展功能”)Overridepublic void addViewControllers(ViewControllerRegistry registry) {//让 /toLoginPage 这个请求自动映射到 login.html这个页面中registry.addViewController(/toLoginPage222).setViewName(login);//让 /login.html 这个请求自动映射到 login.html这个页面registry.addViewController(/login222.html).setViewName(login);}
}在MyMVCconfig实现了接口 WebMvcConfigurer的 addViewControllers( ViewControllerRegistry registry ) 方法。在addViewControllers( )方法内部使用ViewControllerRegistry的 addViewControlle( )方法分别定义了 /toLoginPage222 和 /login222.htm 的请求控制并使用setViewName(login’)方法 将路径映射为login.html页面。定制完MVC的 视图管理器功能后就可以进行效果测试了项目启动成功后在浏览器上分别访问http://localhost:8080/toLoginPage222 和 http://localhost:8080/login222.html 效果如下图所示 : 从上图的运行效果可以看出使用 WebMvConfigurer接口定义的用户请求控制方法也实现了用户请求控制跳转的效果相比于传统的请求处理方法而言这种方法 更加简洁、直观和方便。同时也可以看出使用这种方式无法获取后台处理的数据例如登录页面中的年份。 需要说明的是使用WebMveConfigurer接口中的addViewControllers(ViewControllerRegistry registry)方法定制视图控制只适合较为简单的无参数视图Get方式的请求跳转对于 有参数 或需要 业务处理的跳转需求 最好还是采用传统方式处理请求 。 注意点 : 使用“视图管理器”的方式来通过多url路径来访问到“指定视图页面” , 有 如上图所示的 问题 这时可用 MVC拓展功能中的 : 创建拦截器在拦截器中给“指定视图”传递数据。 ② 创建自定义拦截器 ( 将该 “自定义的拦截器” 用于在SpringBoot的MVC开发中添加“拦截器”默认情况下SpringBoot不会自动为项目配置一个“拦截器” ) 注册自定义拦截器。WebMvcConfigurer接口提供了许多MVC开发相关方法例如添加 “拦截器” 方法addInterceptors( )方法、添加 “格式化器” 方法 addFormatters( ) 等。 注册自定义拦截器 代码例子如 : 在 项目基础环境搭建 代码的基础上 添加如下代码 MyInterceptor.java : 自定义的拦截器 package com.myh.chapter_10.config;import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;import java.util.Calendar;/**自定义的拦截器,用于替代SpringBoot中MVC的默认的“拦截器” ,可通过实现HandlerInterceptor接口来自定义一个拦截器 :用于拦截“指定的请求” 和 对“指定的请求”放行*/
Component //将该类加入到IOC容器中
public class MyInterceptor implements HandlerInterceptor { //实现HandlerInterceptor接口/*** preHandle : 预处理方法 :* url请求发出后,先执行拦截器中的preHandle()方法,再执行controller中的方法*/Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {/*** request.getRequestURI() : 获取并返回发送请求的客户端请求的 “URI字符串”。** URI(统一资源标识符) : uri为url的一部分,但不包括协议和 主机名(域名或IP地址)* 例如如果请求的完整 URL 是 http://www.example.com/some/info.html 那么 request.getRequestURI()方法* 将返回 /some/info.html* ---上面的内容即为uri(统一资源标识符)*/String uri request.getRequestURI(); //获得请求中的统一资源标识符/uriObject loginUser request.getSession().getAttribute(LoginUser);//如果已登录会在session中的添加一个LoginUser属性/*用户请求/admin开头路径时判断用户是否登录*///判断uri是否以/admin开头if (uri.startsWith(/admin) null loginUser) {//进入这里面表明用户还未登录拦截器将不对该url放行,同时重定向到login.html页面(同时跳转到login.html页面)response.sendRedirect(/toLoginPage);return false;}//没进if语句中表明其要么不是/admin请求开头要么是没登录的用户,对其放行return true;}/*** postHandle : 该方法会在执行“控制器方法”之后执行但在“渲染视图页面”之前执行。可以通过此方法对请求域中的“模型和视图”做出进一步的修改* url请求发出后,先执行拦截器中的preHandle()方法,再执行controller中的方法,然后就是执行postHandle()方法, 然后就是渲染视图页面,最后执行afterCompletion()方法*/Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {//想request域中存放当前年份用于前端页面动态展示request.setAttribute(currentYear, Calendar.getInstance().get(Calendar.YEAR));}/*** afterCompletion : 该方法在 “整个请求完成” 后执行即“视图渲染”结束之后执行。可以通过此方法实现一些资源清理、记录日志信息等。*/Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {}//接下来将该自定义的“拦截器”添加到SpringBoot中通过WebMvcConfigurer接口中的 addInterceptors()方法为将该拦截器加入到SpringBoot中 }WebMvcConfigurer.java : 自定义的拦截器 package com.myh.chapter_10.config;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;/*** 在SpringBoot中提供了很多关于MNC的“自动化配置”很多MVC对象都默认配置好/大部分MVC内容SpringBoot都给你自动默认配置好了很多的* MNC功能/MVC效果都是可以免配置直接使用的如实现的页面跳转但此时如果想要使用一些拓展功能/实现功能的拓展可以通过* WebMvcConfigurer这个接口来实现WebMvcConfigurer接口有很多方法该接口中的方法可用于MVc功能拓展。** MVC拓展功能 (其中之一) : 自定义拦截器*/
Configuration //比较给类为“配置类”,同时将给类加入到IOC容器中
public class MyMVCconfig implements WebMvcConfigurer { //该类实现了用于MVC功能拓展的“WebMvcConfigurer接口”/*** 使用 addInterceptors(InterceptorRegistry registry) 方法将“自定义拦截器” 加入到 SpringBoot中*/Autowiredprivate MyInterceptor myInterceptor;Overridepublic void addInterceptors(InterceptorRegistry registry) {/*addPathPatterns() : 要拦截的url路径excludePathPatterns() : 不进行拦截的url路径*/registry.addInterceptor(myInterceptor).addPathPatterns(/**).excludePathPatterns(/login.html);}
}项目启动成功后在浏览器上分别访问http://localhost:8080/admin 自动跳转到了 用户登录页面同时在 页面中动态显示 出了 当前年份这就说明了定制的“自定义拦截器” 生效。 需要说明的是Spring Boot在整合Spring MVC过程中提供了许多默认自动化配置和特性开发者可以通过Spring Boot提供的 WebMvcConfigurer接口 对 MVC功能 进行 定制和扩展。 如果开发者不想使用Spring Boot整合MVC时提供的一些 默认配置而是想要 绝对 的 自定义管理那么可以编写一个 Configuration注解配置类同时添加 EnableWebMvc注解 来 关闭Spring Boot提供的 所有关于MVC功能的默认配置。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/86772.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!