【Spring MVC】(五)页面在 WEB-INF 下的处理方式(jsp页面、html页面)、SpringMVC 参数校验

简介: 【Spring MVC】(五)页面在 WEB-INF 下的处理方式(jsp页面、html页面)、SpringMVC 参数校验

文章目录


一、SpringMVC 框架中页面在 WEB-INF 下的处理方式

1、页面为 JSP 的项目

2、如果项目由HTML页面构成,采用AJAX的方式获取数据


二、SpringMVC 参数校验

1、SpringMVC 参数校验概述

2、SpringMVC 参数校验步骤:

3、常见的校验规则注解


一、SpringMVC 框架中页面在 WEB-INF 下的处理方式


1、页面为 JSP 的项目


(1)由 JSP 页面构成的项目,如果想将 JSP 页面放到 WEB-INF 目录下,可以将核心控制器的地址匹配规则设置为*.do或者*.html(项目中不支持ajax请求)。但是注意,静态资源是不能放到 WEB-INF 之下的,例如 js、css、图片等。


(2)项目结构:


image.png


(3)核心控制器的地址匹配规则

<!-- 核心控制器 -->
<servlet>
  <servlet-name>springmvc</servlet-name>
  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
<servlet-mapping>
  <servlet-name>springmvc</servlet-name>
  <url-pattern>*.do</url-pattern>
</servlet-mapping>


(4)一旦将 JSP 页面放到 WEB-INF 目录中,访问 JSP 页面就不能直接通过页面的地址直接进行访问,任何一个页面都需要提供一个业务控制器中的方法用转发的方式来访问页面。


为了便于转发 JSP,可以使用 SpringMVC 提供的视图解析器来配置前后缀。

<!--配置视图解析器 -->
<bean  class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property  name="prefix"  value="/WEB-INF/page/"></property>
<property  name="suffix"  value=".jsp"></property>
</bean>


(5)对于业务控制器的分工来讲,这时分为两种情况。


① 类似于首页,登录页面,注册页面这种公共的页面,我们可以专门定义一个 PageController 提供页面的访问方式。如下:

@Controller
public class PageController {
  //访问index.jsp的地址映射
  @RequestMapping("index")
  public String index() {
  return "index";
  }
  //访问regist.jsp的地址映射
  @RequestMapping("regist")
  public String regist() {
  return "regist";
  }
  //访问login.jsp的地址映射
  @RequestMapping("login")
  public String login() {
  return "login";
  }
}


配置完成之后,按照以前 Springmvc 的配置扫描包,添加注解驱动后可以在浏览器中,分别通过index.do、login.do、register.do来访问首页、登录页面、注册页面等等。


② 对于其他的 JSP 访问,由于通常都和业务挂钩,所以自然需要我们根据业务的分类定义对应的业务控制器,在处理完业务之后转发到其他页面。


这时就要注意一个问题,由于login.do和register.do的请求地址在项目中已经使用了,是用来访问登录页面和注册页面的,那么切记我们在执行真正的登录和注册业务时就不能再直接使用login.do和register.do了。为了解决这个问题,我们可以将业务请求定义在对应的命名空间之下,例如我们可以将登录的请求地址定义为user/login.do,注册定义为user/register.do,这时我们就需要在控制器类上添加一个@RequestMapping("user")注解来定义命名空间。如下:

@Controller
@RequestMapping("user")
public class UsersController {
  //定义登录的请求地址映射
  @RequestMapping("login")
  public String login() {
  return "index";
  }
}


通过命名空间的配置,我们可以将 login 页面请求和 login 业务请求区分开来,但是加上命名空间所带来的一个新问题就是命名空间的加入会造成相对路径在使用时的障碍,所以 JSP 中推荐发送任何请求时都采用绝对路径的方式来访问,要访问绝对路径可以在 jsp 页面中首先动态获取项目的绝对路径,如下:

<%
  String path = request.getContextPath();
  String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/";
%>


然后在发送请求时统一采用绝对路径的方式来访问,如下:


超链接:

<a href=""<%=basePath %>login.do">登录</a>


表单提交:

<form action="<%=basePath %>user/login.do" method="post">
  <input type="submit" value="登录">
</form>


引入js和引入css

<script type="text/javascript" src="<%=basePath %>js/jquery-3.3.1.js"></script>
<link rel="stylesheet" type="text/css" href="<%=basePath %>css/style.css"/>

2、如果项目由HTML页面构成,采用AJAX的方式获取数据


(1)如果一个项目完全由HTML组成,采用了AJAX的方式获取数据,那么首先要明确一点,页面间的跳转不再依赖于控制器的转发,而是直接访问HTML网页,这时也可以将HTML网页放到WEB-INF 中处理。


(2)项目结构:


image.png


(3)所有的静态资源都放到了WEB-INF下,那么我们对于任何静态资源的访问,都不能直接访问,而是要通过 SpringMVC 的进行响应,所以对核心控制器的地址匹配规则需要定义为/不能定义为*.do。

<!-- 核心控制器 -->
<servlet>
  <servlet-name>springmvc</servlet-name>
  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
<servlet-mapping>
  <servlet-name>springmvc</servlet-name>
  <url-pattern>/</url-pattern>
</servlet-mapping>


(4)SpringMVC 在3.0以后专门提供了静态资源处理器,用于对静态资源和它的路径进行映射,这是一个非常强大且实用的工具,使用它我们可以可以访问WEB-INF下的静态资源。

<mvc:resources location="/WEB-INF/resources/page/" mapping="/page/**"/>
<mvc:resources location="/WEB-INF/resources/js/" mapping="/js/**"/>
<mvc:resources location="/WEB-INF/resources/css/" mapping="/css/**"/>
<mvc:resources location="/WEB-INF/resources/img/" mapping="/img/**"/>
<mvc:resources location="/WEB-INF/resources/fonts/" mapping="/fonts/**"/>


上述标签需要配置在 SpringMVC 的配置文件中,其含义是,将请求地址以 page 开头的所有请求地址映射到 WEB-INF下resources 文件夹下的 page 文件中,SpringMVC 会从该文件夹下去响应网页文件,将所有以 js 开头的请求地址映射到 WEB-INF 下 resources 文件夹下的 js 文件中,以此类推。


二、SpringMVC 参数校验


1、SpringMVC 参数校验概述


SpringMVC 提供了非编程式的后端参数校验,Spring3 以后支持 JSR-303 验证框架,JSR-303 是JAVA EE 6 中的一项子规范,叫做 Bean Validation,官方推荐的实现是 Hibernate Validator(与Hibernate ORM 没有关系),JSR 303 用于对 Java Bean 中的字段的值进行验证。


2、SpringMVC 参数校验步骤:


(1)添加jar包


image.png


添加jar包时,注意不同版本 springmvc 对 Hibernate-Validator 框架的兼容性,如 SpringMVC 5.1.6 兼容 Hibernate-Validator 6.0 版本,Hibernate-Validator6.0 需要其他3个依赖包,所以总共需要导入4个包。


(2)在springmvc配置文件中加载参数校验器

<bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
  <!-- 校验器 -->
  <property name="providerClass" value="org.hibernate.validator.HibernateValidator" />
</bean>


(3)在实体类的属性中使用注解添加验证规则以及错误信息

public class Users {
    private Integer userId;
    @NotNull(message="用户名不能为空")
    @NotEmpty(message="用户名不能为空")
    private String userName;
    @NotNull(message="密码不能为空")
    @NotEmpty(message="密码不能为空")
  @Length(max=16,min=6,message="密码长度为6-16位")
    private String userPassword;
    @Pattern(regexp="[a-zA-Z0-9]{1,}@{1}[a-zA-Z0-9]{1,}(\\.[a-z]{2-3}){1,2}",message="邮箱格式不正确")
    private String email;
    //省略get、set方法
}


(4)在控制器中接收 User 类型的参数时,添加注解进行校验,添加@Validated表示在 springmvc对 user 参数绑定时进行校验,校验信息写入BindingResult中,在要校验的实体类对象后边添加BingdingResult, 一个BindingResult对应一个实体类对象,且BingdingResult放在实体类对象的后边。

@RequestMapping("login")
public ModelAndView login(@Validated @ModelAttribute("users") Users users, BindingResult br) {
  ModelAndView mav = new ModelAndView();
  //如果验证未通过,将错误信息保存到模型中并返回到登录界面
  if(br.hasErrors()) {
    lList<ObjectError> errors = br.getAllErrors();
    mav.addObject("errors", errors);
    mav.setViewName("login.jsp");
  }else{
  //验证通过,跳转到首页
  mav.setViewName("index.jsp");
  }
  return mav;
}


(5)在 jsp 页面中显示错误信息

<c:forEach items="${errors}" var="error">
  ${error.defaultMessage}
</c:forEach>


3、常见的校验规则注解

image.png

image.png


目录
相关文章
|
前端开发 Java 数据库连接
SpringBoot参数校验底层原理和实操。深度历险、深度解析(图解+秒懂+史上最全)
SpringBoot参数校验底层原理和实操。深度历险、深度解析(图解+秒懂+史上最全)
SpringBoot参数校验底层原理和实操。深度历险、深度解析(图解+秒懂+史上最全)
超好看的404提示页面HTML源码
超好看的404提示页面HTML源码
821 77
|
人工智能 程序员 UED
【01】完成新年倒计时页面-蛇年新年快乐倒计时领取礼物放烟花html代码优雅草科技央千澈写采用html5+div+CSS+JavaScript-优雅草卓伊凡-做一条关于新年的代码分享给你们-为了C站的分拼一下子
【01】完成新年倒计时页面-蛇年新年快乐倒计时领取礼物放烟花html代码优雅草科技央千澈写采用html5+div+CSS+JavaScript-优雅草卓伊凡-做一条关于新年的代码分享给你们-为了C站的分拼一下子
1111 21
【01】完成新年倒计时页面-蛇年新年快乐倒计时领取礼物放烟花html代码优雅草科技央千澈写采用html5+div+CSS+JavaScript-优雅草卓伊凡-做一条关于新年的代码分享给你们-为了C站的分拼一下子
简约404错误页面HTML源码
简约404错误页面HTML源码
548 12
|
前端开发 JavaScript
【02】v1.0.1更新增加倒计时完成后的放烟花页面-优化播放器-优化结构目录-蛇年新年快乐倒计时领取礼物放烟花html代码优雅草科技央千澈写采用html5+div+CSS+JavaScript-优雅草卓伊凡-做一条关于新年的代码分享给你们-为了C站的分拼一下子
【02】v1.0.1更新增加倒计时完成后的放烟花页面-优化播放器-优化结构目录-蛇年新年快乐倒计时领取礼物放烟花html代码优雅草科技央千澈写采用html5+div+CSS+JavaScript-优雅草卓伊凡-做一条关于新年的代码分享给你们-为了C站的分拼一下子
1042 14
【02】v1.0.1更新增加倒计时完成后的放烟花页面-优化播放器-优化结构目录-蛇年新年快乐倒计时领取礼物放烟花html代码优雅草科技央千澈写采用html5+div+CSS+JavaScript-优雅草卓伊凡-做一条关于新年的代码分享给你们-为了C站的分拼一下子
css3 svg制作404页面动画效果HTML源码
css3 svg制作404页面动画效果HTML源码
386 34
|
前端开发
【2025优雅草开源计划进行中01】-针对web前端开发初学者使用-优雅草科技官网-纯静态页面html+css+JavaScript可直接下载使用-开源-首页为优雅草吴银满工程师原创-优雅草卓伊凡发布
【2025优雅草开源计划进行中01】-针对web前端开发初学者使用-优雅草科技官网-纯静态页面html+css+JavaScript可直接下载使用-开源-首页为优雅草吴银满工程师原创-优雅草卓伊凡发布
1408 1
【2025优雅草开源计划进行中01】-针对web前端开发初学者使用-优雅草科技官网-纯静态页面html+css+JavaScript可直接下载使用-开源-首页为优雅草吴银满工程师原创-优雅草卓伊凡发布
|
JSON 前端开发 Java
Spring MVC——获取参数和响应
本文介绍了如何在Spring框架中通过不同的注解和方法获取URL参数、上传文件、处理cookie和session、以及响应不同类型的数据。具体内容包括使用`@PathVariable`获取URL中的参数,使用`MultipartFile`上传文件,通过`HttpServletRequest`和`@CookieValue`获取cookie,通过`HttpSession`和`@SessionAttribute`获取session,以及如何返回静态页面、HTML代码片段、JSON数据,并设置HTTP状态码和响应头。
472 1
Spring MVC——获取参数和响应
|
前端开发 测试技术 定位技术
如何利用HTML和CSS构建企业级网站的全过程。从项目概述到页面结构设计,再到HTML结构搭建与CSS样式设计,最后实现具体页面并进行优化提升,全面覆盖了网站开发的关键步骤
本文深入介绍了如何利用HTML和CSS构建企业级网站的全过程。从项目概述到页面结构设计,再到HTML结构搭建与CSS样式设计,最后实现具体页面并进行优化提升,全面覆盖了网站开发的关键步骤。通过实例展示了主页、关于我们、产品展示、新闻动态及联系我们等页面的设计与实现,强调了合理布局、美观设计及用户体验的重要性。旨在为企业打造一个既专业又具吸引力的线上平台。
1151 7
html页面点击按钮实现页面跳转功能
html页面点击按钮实现页面跳转
3327 11