【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


目录
相关文章
|
1月前
|
JSON 前端开发 Java
Spring MVC——获取参数和响应
本文介绍了如何在Spring框架中通过不同的注解和方法获取URL参数、上传文件、处理cookie和session、以及响应不同类型的数据。具体内容包括使用`@PathVariable`获取URL中的参数,使用`MultipartFile`上传文件,通过`HttpServletRequest`和`@CookieValue`获取cookie,通过`HttpSession`和`@SessionAttribute`获取session,以及如何返回静态页面、HTML代码片段、JSON数据,并设置HTTP状态码和响应头。
49 1
Spring MVC——获取参数和响应
|
1月前
|
前端开发 Java 应用服务中间件
【Spring】Spring MVC的项目准备和连接建立
【Spring】Spring MVC的项目准备和连接建立
54 2
|
2月前
|
缓存 前端开发 Java
【Java面试题汇总】Spring,SpringBoot,SpringMVC,Mybatis,JavaWeb篇(2023版)
Soring Boot的起步依赖、启动流程、自动装配、常用的注解、Spring MVC的执行流程、对MVC的理解、RestFull风格、为什么service层要写接口、MyBatis的缓存机制、$和#有什么区别、resultType和resultMap区别、cookie和session的区别是什么?session的工作原理
【Java面试题汇总】Spring,SpringBoot,SpringMVC,Mybatis,JavaWeb篇(2023版)
|
1月前
|
XML 前端开发 Java
Spring,SpringBoot和SpringMVC的关系以及区别 —— 超准确,可当面试题!!!也可供零基础学习
本文阐述了Spring、Spring Boot和Spring MVC的关系与区别,指出Spring是一个轻量级、一站式、模块化的应用程序开发框架,Spring MVC是Spring的一个子框架,专注于Web应用和网络接口开发,而Spring Boot则是对Spring的封装,用于简化Spring应用的开发。
112 0
Spring,SpringBoot和SpringMVC的关系以及区别 —— 超准确,可当面试题!!!也可供零基础学习
|
3月前
|
Java 数据库连接 Spring
后端框架入门超详细 三部曲 Spring 、SpringMVC、Mybatis、SSM框架整合案例 【爆肝整理五万字】
文章是关于Spring、SpringMVC、Mybatis三个后端框架的超详细入门教程,包括基础知识讲解、代码案例及SSM框架整合的实战应用,旨在帮助读者全面理解并掌握这些框架的使用。
后端框架入门超详细 三部曲 Spring 、SpringMVC、Mybatis、SSM框架整合案例 【爆肝整理五万字】
|
3月前
|
缓存 Java 应用服务中间件
SpringMVC入门到实战------七、SpringMVC创建JSP页面的详细过程+配置模板+实现页面跳转+配置Tomcat。JSP和HTML配置模板的差异对比(二)
这篇文章详细介绍了在SpringMVC中创建JSP页面的全过程,包括项目的创建、配置、Tomcat的设置,以及如何实现页面跳转和配置模板解析器,最后还对比了JSP和HTML模板解析的差异。
SpringMVC入门到实战------七、SpringMVC创建JSP页面的详细过程+配置模板+实现页面跳转+配置Tomcat。JSP和HTML配置模板的差异对比(二)
|
3月前
|
前端开发 JavaScript Java
springmvc前端jsp与html
在Spring MVC框架中,前端页面既可以使用JSP(JavaServer Pages)也可以使用HTML,具体使用哪一种或哪几种技术,主要取决于项目的需求、团队的熟悉度以及项目的可维护性等因素。
32 2
|
3月前
|
XML 前端开发 Java
Spring MVC接收param参数(直接接收、注解接收、集合接收、实体接收)
Spring MVC提供了灵活多样的参数接收方式,可以满足各种不同场景下的需求。了解并熟练运用这些基本的参数接收技巧,可以使得Web应用的开发更加方便、高效。同时,也是提高代码的可读性和维护性的关键所在。在实际开发过程中,根据具体需求选择最合适的参数接收方式,能够有效提升开发效率和应用性能。
121 3
|
3月前
|
XML 前端开发 Java
Spring MVC接收param参数(直接接收、注解接收、集合接收、实体接收)
Spring MVC提供了灵活多样的参数接收方式,可以满足各种不同场景下的需求。了解并熟练运用这些基本的参数接收技巧,可以使得Web应用的开发更加方便、高效。同时,也是提高代码的可读性和维护性的关键所在。在实际开发过程中,根据具体需求选择最合适的参数接收方式,能够有效提升开发效率和应用性能。
182 2
|
3月前
|
前端开发 Java Spring
Java 新手入门:Spring Boot 轻松整合 Spring 和 Spring MVC!
Java 新手入门:Spring Boot 轻松整合 Spring 和 Spring MVC!
62 0

热门文章

最新文章