---恢复内容开始---
web.xml:
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" version="4.0"> <context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/applicationContext.xml</param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <servlet> <servlet-name>dispatcher</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>dispatcher</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping> <!--处理编码格式的问题--> <filter> <filter-name>CharacterEncodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>CharacterEncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!--编码格式结束--> </web-app>
dispatcher-servlet.xml:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd"> <mvc:default-servlet-handler/> <mvc:annotation-driven></mvc:annotation-driven> <!--配置 Spring的注解 扫包--> <context:component-scan base-package="com.hxzy"></context:component-scan> <!--配置SpringMVC的视图 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/view/"></property> <property name="suffix" value=".jsp"></property> </bean> <!--配置国际化显示工具--> <bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource"> <!-- 指定文件基名 --> <property name="basename" value="message"/> <!-- 当没有找到资源文件时,用这基名文件 --> <property name="useCodeAsDefaultMessage" value="true" /> </bean> <!--配置适配 MVC基本配置--> <mvc:annotation-driven></mvc:annotation-driven> <!--配置SpringMVC 不经过Handler 直接访问jsp 拦截器必须是 / 不能是 *.do--> <mvc:view-controller path="A/gugugu" view-name="success"></mvc:view-controller> <!--配置静态资源访问权限 需要跟<mvc:annotation-driven> 配合使用--> <mvc:default-servlet-handler></mvc:default-servlet-handler> <!--配置类的转换器 1.将自定义的转换器加载到Bean--> <bean id="converter" class="com.hxzy.test.MyConverter"></bean> <!--3.结束 此配置是SpringMVC的基础配置,很功能都需要通过该注解来协调 --> <mvc:annotation-driven conversion-service="conversionService"></mvc:annotation-driven> <!-- 配置 数据格式化 注解 所依赖的bean 2.将自定义的Bean 加入到SpringMVC提供的Bean中 --> <bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean"> <property name="converters"> <set> <ref bean="converter"></ref> </set> </property> </bean> </beans>
TestSpringMVC:
package com.hxzy.test; import com.hxzy.pojo.Address; import com.hxzy.pojo.Student; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.ui.ModelMap; import org.springframework.validation.BindingResult; import org.springframework.validation.FieldError; import org.springframework.web.bind.annotation.*; import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpServletRequest; import javax.validation.Valid; import java.util.Map; //@SessionAttributes("student") //放在Session作用域中 可以是type= "Student.class" 或者是 key的值 @RequestMapping("/SpringMvc") @Controller //将该类加载到SpringIOC容器 public class TestSpringMVC { /** * 普通方法操作 * @return */ @RequestMapping("show1") public String show1(){ System.out.println("进入show1"); return "success"; } /** * 普通的POST方式 */ @RequestMapping(value = "show2",method = RequestMethod.POST) public String show2(){ return "success"; } /** * name 属性的值必须是zs 并且 年龄不能是25岁(也可以没有这个age 属性) 并且 不能包含sex属性 () */ @RequestMapping(value = "show3",method = RequestMethod.POST,params = {"user=zs","age!=25","!sex"}) public String show3(){ return "success"; } /** * 参数要求 包含一个参数 并获取他 */ @RequestMapping(value = "show4/{name}",method = RequestMethod.POST) public String show4(@PathVariable("name") String name){ System.out.println(name); return "success"; } /** * 获取 通过普通的方式获取表单里面的值 * * 多个方式的话 在方法里面填写就可以了 * 为了处理 前台页面传来的值小于获取的值需要设置 * (前台传来了3个值 可是Handler里面接受 5个值) * @RequestParam(value = "age",required = false,defaultValue ="25") Integer age) * 需要这样写 */ @RequestMapping(value = "show_form",method = RequestMethod.POST) public String show_from(@RequestParam("user") String name ,@RequestParam(value = "age",required = false,defaultValue ="25") Integer age){ System.out.println("name="+name); System.out.println("age=" + age); return "success"; } /** * 使用SpringMVC的核心功能 最牛逼的地方 将前台的数据传输到实体类 * 注意属性一定要对应 */ @RequestMapping(value = "show_allCanshuw",method = RequestMethod.POST) public String show_allCanshuw(Student student){ System.out.println(student); return "success"; } /** * 使用原生Servlet */ @RequestMapping(value = "use_servlet",method = RequestMethod.POST) public String use_servlet(HttpServletRequest request){ System.out.println(request); return "success"; } /** * 返回数据和视图 使用 ModelAndView */ @RequestMapping(value = "show_student") public ModelAndView show_student(){ System.out.println("进入ModelAndView........."); ModelAndView mv = new ModelAndView(); mv.setViewName("success"); Student student = new Student(); student.setS_age(15); student.setS_name("大黄"); mv.addObject("student",student); return mv; } /** * 返回数据类型 Map */ @RequestMapping("show_map") public String show_map(Map<String,Object> map){ Student student = new Student(); student.setS_name("古斌map"); map.put("studentMap",student); return "success"; } /** * 返回数据类型 Model */ @RequestMapping("show_model") public String show_model(Model model){ Student student = new Student(); student.setS_name("古斌Model"); model.addAttribute("studentModel",student); return "success"; } /** * 返回数据类型 Modelmap */ @RequestMapping("show_ModelMap") public String show_ModelMap(ModelMap modelMap){ Student student = new Student(); student.setS_name("古斌ModelMap"); modelMap.put("studentModelMap",student); return "success"; } /** * 修改数据 从数据库读出来的数据 进行修改 跟下面的方法对应!!! */ @RequestMapping(value = "updateStudent",method = RequestMethod.POST) public String updateStudent(@RequestParam("updatename") String name,@ModelAttribute("s") Student student){ student.setS_name(name); System.out.println(student); return "success"; } //为了配合修改 加上ModelAttribute @ModelAttribute public void queryStudent(Map<String,Object> map){ System.out.println("ModelAttribute开始执行"); //假设数据是从数据库查看的 Student student = new Student(); student.setS_name("古斌"); student.setS_age(18); Address address = new Address(); address.setSchool_address("石家庄"); System.out.println(student); map.put("s",student); //如果 Map的key 跟修改的方法的参数对不上 需要在参数 加上@ModelArrribute } /** * 国际化处理 */ @RequestMapping("i18n_test") public String i18n_test(){ return "success"; } /** * 测试指定方式请求 转发||重定向 * * 通过“forward:”指定跳转方式为请求转发 * 通过“redirect:”指定跳转方式为重定向 */ @RequestMapping("SetHttp") public String SetHttp(){ return "redirect:/view/success.jsp"; } /** * 配置类的转换器 String 古斌-18 转换 成 Student对象 */ @RequestMapping("StudentInfo") public String StudentInfo(@RequestParam("studentinfo") Student student){ System.out.println(student); return "success"; } /** * 配置格式化的类 日期格式化 */ @RequestMapping("Studentinfoss") public String Studentinfoss(Student student ,BindingResult result){ //如果有错误信息 if (result.getErrorCount() > 0) { //循环遍历所有错误信息 for (FieldError error : result.getFieldErrors()) { System.out.println(error.getField() + ":" + error.getDefaultMessage()); } } System.out.println(student); return "success"; } /** * 数据的校验 演示 校验Email * * @Null 被注释的元素必须为 null。 * @NotNull 被注释的元素必须不为 null。 * @AssertTrue 被注释的元素必须为 true。 * @AssertFalse 被注释的元素必须为 false。 * @Min(value) 被注释的元素必须是一个数字,其值必须大于或等于value。 * @Max(value) 被注释的元素必须是一个数字,其值必须小于或等于value。 * @DecimalMin(value) 被注释的元素必须是一个数字,其值必须大于或等于value。 * @DecimalMax(value) 被注释的元素必须是一个数字,其值必须小于或等于value。 * @Size(max, min) 被注释的元素的取值范围必须是介于min和max之间。 * @Digits (integer, fraction) 被注释的元素必须是一个数字,其值必须在可接受的范围内。 * @Past 被注释的元素必须是一个过去的日期。 * @Future 被注释的元素必须是一个将来的日期。 * @Pattern(value) 被注释的元素必须符合指定的正则表达式。 * Hibernate Validator 是JSR 303的扩展。Hibernate Validator 提供了 JSR 303中所有内置的注解,以及自身扩展的4个注解,如下: * * 注解 简介 * @Email 被注释的元素值必须是合法的电子邮箱地址。 * @Length 被注释的字符串的长度必须在指定的范围内。 * @NotEmpty 被注释的字符串的必须非空。 * @Range 被注释的元素必须在合适的范围内。 * */ @RequestMapping("Jiaoyan") public String Jiaoyan(@Valid Student student, BindingResult result){ //如果有错误信息 if (result.getErrorCount() > 0) { //循环遍历所有错误信息 for (FieldError error : result.getFieldErrors()) { System.out.println( ":"+ error.getDefaultMessage()+error.getField()); } } System.out.println(student); return "success"; } }
index.jsp
<%-- Created by IntelliJ IDEA. User: 古斌 Date: 2019/3/14 Time: 17:33 To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>测试类</title> </head> <body> <%--普通方式--%> <a href="SpringMvc/show1.do">Get方式指定</a><br> <%--post模式--%> <form action="SpringMvc/show2.do" method="post"> <input type="submit" value="普通的POST方式"> </form> <hr> <%--name属性必须等于zs--%> <form action="SpringMvc/show3.do" method="post"> 账号 <input name="user">年龄<input name="age"> <input type="submit"> </form> <hr> <%--有存取一个姓名 如果有.do .action 都写在名字后面--%> <form action="SpringMvc/show4/古斌.do" method="post"> <input type="submit" value="获取姓名"> </form> <hr> <%--获取name的值 普通方式操作--%> <form action="SpringMvc/show_form.do" method="post"> <input name="user"> <input type="submit" value="普通方式查询name的值"> </form> <hr> <%--测试Spring MVC最牛逼之处 将前台表单的数据 直接封装到实体类--%> <form action="SpringMvc/show_allCanshuw.do" method="post"> 姓名 <input name="s_name"> 年龄<input name="s_age"> 地址<input name="address.school_address"> <input type="submit" value="提交_封装到实体类"> </form> <hr> <%--原生Servlet--%> <form action="SpringMvc/use_servlet.do" method="post"> <input type="submit" value="使用原生Servlet"> </form> <hr> <%--获取requeest作用域中的数据--%> <form action="SpringMvc/show_student.do" method="post"> <input type="submit" value="ModelAndView方式"> </form> <hr> <%--使用Map集合方式实现数据交互--%> <a href="SpringMvc/show_map.do">Map方式</a> <hr> <%--使用ModelMap--%> <a href="SpringMvc/show_ModelMap.do">ModelMap方式</a><hr> <%--使用Model--%> <a href="SpringMvc/show_model.do">Model方式</a><hr> <%--修改数据--%> <form method="post" action="SpringMvc/updateStudent.do"> name; <input type="text" name="updatename"> <input type="submit" value="新修改"> </form><hr> <%--国际化显示数据--%> <a href="SpringMvc/i18n_test.do">i18N</a><hr> <%--不经过Handler处理直接进入数据 这个web.xml中的Spring配置必须是/ 不能是*.do 等--%> <a href="A/gugugu">NoApplicable_</a><hr> <%--配置修改请求方式 转发 重定向 这种方式对国际化会有影响 导致 国际化代码不能使用--%> <a href="SpringMvc/SetHttp.do">转发or重定向</a><hr> <%--配置转换器--%> <form method="post" action="SpringMvc/StudentInfo.do"> 信息; <input type="text" name="studentinfo"> <input type="submit" value="转换"> </form><hr> <%--配置日期格式化--%> <form method="post" action="SpringMvc/Studentinfoss.do"> 日期; <input type="text" name="birthday"> 姓名:<input type="text" name="s_name"/><br> 年龄:<input type="text" name="s_age"/><br> <input type="submit" value="显示日期"> </form><hr> <%--数据的校验--%> <form method="post" action="SpringMvc/Jiaoyan.do"> 日期; <input type="text" name="birthday"><br> 姓名:<input type="text" name="s_name"/><br> 年龄:<input type="text" name="s_age"/><br> Email:<input name="email"> <br> <input type="submit" value="显示日期"> </form><hr> </body> </html>
Student.java
package com.hxzy.pojo; import lombok.Data; import org.hibernate.validator.constraints.Email; import org.springframework.format.annotation.DateTimeFormat; import org.springframework.format.annotation.NumberFormat; import java.util.Date; @Data public class Student { private String s_name; @NumberFormat(pattern = "##,#") private Integer s_age; @DateTimeFormat(pattern="yyyy-MM-dd")//格式化:前台传递来的数据,将前台传递来到数据 固定为yyyy-MM-dd private Date birthday ;// 2018-12-13 @Email private String email; @Override public String toString() { return "Student{" + "姓名='" + s_name + '\'' + ", 年龄=" + s_age + "日期"+birthday+ // ", 地址=" + address.getSchool_address() + '}'; } }