springmvc学习日志三
一、文件的上传
1.首先在lib中添加相应的jar包
2.建立jsp页面,表单必须是post提交,编码必须是multipart/form-data,文件上传文本框必须起名
<body>
<!-- 文件上传是上传到本地服务器下 而数据库中存放的是 图片的路径-->
<form action="upload" method="post" enctype="multipart/form-data">
请选择上传的文件:<input type="file" name="myfile"><br>
<input type="submit" value="上传"/>
</form>
</body>
3.在springmvc的配置文件中必须配置文件上传解析器
<!-- 配置文件上传解析器 -->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- 设置文件上传的大小 字节 -->
<property name="maxUploadSize" value="9999999"></property>
</bean>
4.在UploadController处理代码,接受页面传过来的文件
@Controller
public class UploadController { @RequestMapping("upload") //HttpServletRequest:作用是为获取上传文件的路径
public String upload(MultipartFile myfile,HttpServletRequest request) { //把你上传的文件封装到MultipartFile中
//1.获取文件上传真实保存的路径
//一般情况下上传到服务器的目录下,获取网站根目录
String path=request.getServletContext().getRealPath("/upload");
System.out.println(path);
//2.创建一个文件对象
File file=new File(path);
if(!file.exists()) { //该路径不存在
file.mkdirs();
}
//3.获取文件名
String name=System.currentTimeMillis()+myfile.getOriginalFilename(); File targetFile=new File(path+"/"+name); try {
//把文件写入到指定的目录下
FileUtils.writeByteArrayToFile(targetFile, myfile.getBytes());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return "redirect:/index.jsp";
}
}
二、springmvc的拦截器设置(拦截的都是控制层的地址)
1.先创建一个Controller类
@Controller
@RequestMapping("user")
@SessionAttributes(names= {"name","password","registername","registerpass"}) //键名叫:name保存的作用域为session
public class UserController {
@RequestMapping("tologin")
public ModelAndView tologin() {
ModelAndView mv=new ModelAndView();
mv.setViewName("login");
return mv;
}
@RequestMapping("login")
public String login(String name,String password,Model model,HttpSession session) {
System.out.println("登录"); if(session.getAttribute("registername").equals(name)&&"123456".equals(password)) {
model.addAttribute("name", name);
model.addAttribute("password", password);
return "forward:list";
}else {
return "login";
} } @RequestMapping("toregister")
public ModelAndView toregister() {
ModelAndView mv=new ModelAndView();
mv.setViewName("register");
return mv;
}
@RequestMapping("register")
public String register(String name,String password,Model model) {
if(name!=null&&password!=null) {
model.addAttribute("registername", name);
model.addAttribute("registerpass", password);
return "login";
}else {
return "register";
}
}
@RequestMapping("list")
public ModelAndView list() {
ModelAndView mv=new ModelAndView("list");
User user1=new User("张三","123456",20);
User user2=new User("李四","123456",20);
User user3=new User("王五","123456",20); List<User> list=new ArrayList<>();
list.add(user1);
list.add(user2);
list.add(user3);
mv.addObject("list",list);
return mv;
}
@RequestMapping("delete")
public String delete(HttpServletRequest request) { return "redirect:/index.jsp";
}
}
2.创建一个类实现接口HandlerInterceptor,并重写接口中的方法
public class MyInterceptor implements HandlerInterceptor { @Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object arg2, Exception arg3)
throws Exception {
System.out.println("请求处理后执行该方法"); } @Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object arg2, ModelAndView arg3)
throws Exception {
System.out.println("=============="); } @Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object arg2) throws Exception {
System.out.println("处理请求等价于doFilter方法");
Object name=request.getSession().getAttribute("name");
if(name!=null) {
return true;//如果返回true表示允许通过
}else {
response.sendRedirect("../login.jsp");
return false;
}
} }
3.把创建的类配置到springmvc的配置文件中
<!-- 配置拦截器 -->
<mvc:interceptors>
<!-- 可配置多个拦截器 -->
<mvc:interceptor>
<!-- **表示user下所有的子目录以及请求地址,哪些请求路径经过拦截器 -->
<mvc:mapping path="/user/**"/>
<!-- 不包括要拦截的请求路径 -->
<mvc:exclude-mapping path="/user/login"/>
<mvc:exclude-mapping path="/user/tologin"/>
<mvc:exclude-mapping path="/user/register"/>
<mvc:exclude-mapping path="/user/toregister"/>
<bean class="com.zhiyou100.xz.interceptor.MyInterceptor"></bean>
</mvc:interceptor>
</mvc:interceptors>
三、数据校验(后台校验 hibernate validate)
1.引入相应的jar包
2.在相应的实体类中加入注解
public class User {
@NotEmpty(message="用户名不能为空") //提示的错误信息
private String name;
@Length(min=6,max=12,message="密码的长度在【6~12】之间")
private String password;
@Pattern(regexp="^(?:[1-9][0-9]?|1[01][0-9]|120)$")
private int age;
@Pattern(regexp="^1[3456789]\\d{9}$",message="手机格式不正确")
private String phone;
//要写get和set
}
3.在控制层接受参数时
@RequestMapping("uregister")
public String uregister(@Valid User user,BindingResult br,Model model) { //validate在验证第一个失败后仍会继续验证
//BindingResult br 把验证的所有的错误信息封装到BindingResult类中
if(br.hasErrors()) { //判断有没有错误信息
List<FieldError> fieldErrors=br.getFieldErrors();
Map<String, Object> errorMsg=new HashMap<String, Object>();
for(FieldError f:fieldErrors) {
//System.out.println(f.getField()+"---"+f.getDefaultMessage());
errorMsg.put(f.getField(), f.getDefaultMessage());
}
model.addAttribute("errorMsg", errorMsg);
return "forward:../uregister.jsp";
}
return "list";
}
4.建立jsp页面,并进行输入验证
<body>
<form action="uregister" method="post" enctype="multipart/form-data">
姓名:<input type="text" name="name" />${errorMsg.name }<br>
密码:<input type="text" name="password" />${errorMsg.password }<br>
手机号:<input type="text" name="phone" />${errorMsg.phone }<br>
<input type="submit" value="注册"/>
</form>
</body>
springmvc学习日志三的更多相关文章
- SpringMVC学习笔记(三)
一.SpringMVC使用注解完成 1.首先,导入SpringMVC需要的jar包. 2.添加Web.xml配置文件中关于SpringMVC的配置 <!--configure the setti ...
- springmvc学习第三天
利用spring mvc 实现crud 1.导入jar包 commons-logging-1.2.jarjstl.jarspring-aop-4.1.6.RELEASE.jarspring-beans ...
- springmvc学习(三)
第一点---------使用 @RequestMapping 映射请求• Ant 风格资源地址支持 3 种匹配符:?:匹配文件名中的一个字符 *:匹配文件名中的任意字符 **:** 匹配多层路径 @R ...
- SpringMVC学习手册(三)------EL和JSTL(上)
1.含义 EL: Expression Language , 表达式语言 JSTL: Java Server Pages Standard Tag Library, JSP标准标签库 ...
- SpringMVC学习(三)———— springmvc的数据校验的实现
一.什么是数据校验? 这个比较好理解,就是用来验证客户输入的数据是否合法,比如客户登录时,用户名不能为空,或者不能超出指定长度等要求,这就叫做数据校验. 数据校验分为客户端校验和服务端校验 客户端校验 ...
- SpringMVC学习记录三——8 springmvc和mybatis整合
8 springmvc和mybatis整合 8.1 需求 使用springmvc和mybatis完成商品列表查询. 8.2 整合思路 springmvc+mybaits的 ...
- SpringMVC 学习笔记(三)数据的校验
34. 尚硅谷_佟刚_SpringMVC_数据绑定流程分析.avi 例如:在jsp中输入一个String字符串类型,需要转换成Date类型的流程如下 convertservice对传入的数据进行转换 ...
- spring学习日志三
一.回顾 1.1 依赖注入的方式. set方法来注入 <property name="属性名" /> 构造方法来注入<construtor-arg index=& ...
- springmvc学习日志四
一.回顾 1.文件上传 1.1引入fileupload的jar包 1.2在springmvc的配置文件中引入CommonsMutilpartResolver文件上传解析器 1.3在控制层在写入代码 2 ...
随机推荐
- python sqlite3 类
import sys import os import sqlite3 ##sys.path.append(os.path.abspath(os.path.dirname(__file__) + '/ ...
- AcWing 1086. 恨7不成妻(【代码简洁】标准记忆化搜索+超详解!!)
看到这题用循环写的dp代码瑟瑟发抖~ 数位dp一般记忆化搜索的写法思维难度较低,也比较常用,这题的简洁代码应该就可以显现出其优越性 (用时4ms,可能比用循环写的dp还要快) 那这里补充一下记忆化搜索 ...
- Leetcode6. Z 字形变换
> 简洁易懂讲清原理,讲不清你来打我~ 输入字符串,按下右上下右上排列后输出字符串![在这里插入图片描述](https://img-blog.csdnimg.cn/4578280a7c1848c ...
- springMVC-11-验证码
springMVC-11-验证码 导入依赖 <!--Kaptcha 验证码依赖 前面已导过servlet-api需排除--> <dependency> <groupId& ...
- PAT乙级:1061 判断题 (15分)
PAT乙级:1061 判断题 (15分) 题干 判断题的评判很简单,本题就要求你写个简单的程序帮助老师判题并统计学生们判断题的得分. 输入格式: 输入在第一行给出两个不超过 100 的正整数 N 和 ...
- 03_Nginx支持SSL
1.申请证书 https://freessl.cn/ 2.创建证书 3.离线生产 4.下载Keymanager https://keymanager.org/ 5.打开生产密钥 6.DNS验证 进入域 ...
- SLF4J日志桥接的应用
最近在给公司的测试部门开发一套自动化测试框架,为了是框架产生的测试报告更易于分析,我考虑将每一个用例与运行过程中产生的日志相关联,为了实现这样的效果,首先就需要统一项目的日志输出,那么具体怎么做呢? ...
- 17Java进阶——反射、进程、Java11新特性
1.Java反射机制 Java反射(Reflection)概念:在运行时动态获取类的信息以及动态调用对象方法的功能. 1.1反射的应用--通过全类名获取类对象及其方法 package two.refl ...
- 学习笔记-CCS-MSP430F5529[快速入门篇二]
由于2021的全国电赛延期了,从今天开始打算好好整理一下使用CCS编程的经验,本篇笔记会好好整理一下我备赛期间用CCS写的程序,包括外部中断,定时器部分的定时中断,定时器输入捕获,PWM波输出,UAR ...
- 重返MySQL之MySQL基础
重返MySQL之MySQL基础 本章详细介绍了,什么是数据库,常见的关系型数据库有哪些,什么是MySQL,及MySQL中DDL操作表,DML操作表记录. 1.0 数据库概述 1.1 数据存储的方式 目 ...