1.Jsp页面配置:html
<a href="dlfile/?fileName=a.doc">下载</a>
2.后台:java
@RequestMapping("dlfile")
public ResponseEntity<byte[]> dlfile(String fileName) throws IOException {
//文件路径
String path="E:\\第三阶段\\day08";
//定义要下载的文件
File file=new File(path,"day08.doc");
HttpHeaders headers=new HttpHeaders();
//headers指定文件下载的方式以及在浏览器显示的名称
headers.setContentDispositionFormData("attachment",fileName);
//将文件以流的方式响应到页面。
headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
//参数一:文件对应的二进制字节数组
(FileUtils.readFileToByteArray(file),文件转二进制数组)
//参数二:设置响应头
(headers)
//参数三:设置响应状态
(HttpStatus.OK,状态正常(200)))
return new ResponseEntity<>(FileUtils.readFileToByteArray(file), headers, HttpStatus.OK);
}
复制代码
@Override
public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response,
Object o, Exception e) {
ModelAndView mv = new ModelAndView();
if(e instanceof NullPointerException){
mv.setViewName("error");
mv.addObject("msg","空指针异常");
return mv;
}
mv.setViewName("error");
mv.addObject("msg","其余异常");
return mv;
}
复制代码
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
${msg}
</body>
</html>
复制代码
<bean class="com.springmvc.utils.MyHandlerExpResolver"/>
public class LoginIter implements HandlerInterceptor {
/*
在执行handler以前来执行的,
用途:用于用户认证校验、用户权限校验
*/
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object o) throws Exception {
HttpSession session = request.getSession();
User user= (User) session.getAttribute("user");
System.out.println("第一个拦截器,在处理器执行前的方法");
//判断用户是否登录
if(user!=null){
System.out.println("true");
//登录成功
return true;
}
System.out.println("false");
request.getRequestDispatcher("/login.jsp").forward(request,response);
return false;
}
/*
在执行handler返回modelAndView以前来执行
用途:若是须要向页面提供一些公用 的数据或配置一些视图信息,
使用此方法实现 从modelAndView入手
*/
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object o, ModelAndView modelAndView) throws Exception {
System.out.println("第一个拦截器,在执行handler返回modelAndView以前来执行");
}
/*
执行handler以后执行此方法
用途:1.做为系通通一异常处理,进行方法执行性能监控,
在preHandle中设置一个时间点,在afterCompletion设置一个时间,
两个时间点的差就是执行时长。
2.实现系统 统一日志记录
*/
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object o, Exception e) throws Exception {
System.out.println("第一个拦截器,执行handler以后执行此方法");
}
复制代码
${loginError}//显示登录失败的信息
<form action="${pageContext.request.contextPath}/login" method="get">
输入帐户:<input type="text" name="uname"><br>
<input type="submit" value="登录">
</form>
复制代码
@RequestMapping("login")
public String login(Model m,User user, HttpSession session){
if(user.getUname().equals("admin")){
session.setAttribute("user",user);
return "index";
}
m.addAttribute("loginError","从新登录");
return "login";
}
复制代码
<!--配置拦截器 -->
<mvc:interceptors>
<mvc:interceptor>
<!-- "/**"能够拦截路径无论多少层 -->
<mvc:mapping path="/**"/>
<!--选择不拦截登录方法-->
<mvc:exclude-mapping path="/login"/>
<!--实例化LoginIter类-->
<bean class="com.springmvc.utils.LoginIter"/>
</mvc:interceptor>
</mvc:interceptors>
复制代码
<%@taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<a href="/addUser">添加用户</a>
<form:form action="saveUsers" method="post" modelAttribute="user">
<form:label path="uname">名字:</form:label> <br>
<form:input path="uname"/><br>
<form:label path="uid">ID:</form:label><br>
<form:input path="uid"/><br>
<form:label path="birthday">生日:</form:label><br>
<form:input path="birthday"/><br>
爱好: <br>
<form:checkbox path="hobbies" value="1"/>聊天1<br>
<form:checkbox path="hobbies" value="2"/>聊天2<br>
<form:checkbox path="hobbies" value="3"/>聊天3<br>
<hr>
<form:checkboxes path="jobs" items="${jlist}" itemValue="jid" itemLabel="jname" />
<form:button>保存</form:button>
</form:form>
复制代码
@RequestMapping("addUser")
public String addUser(Model m){
User user = new User();
user.setUname("李四");
List<Job> list=new ArrayList<>();
list.add(new Job("1","高级工程师"));
list.add(new Job("2","项目经理"));
list.add(new Job("3","人事总监"));
m.addAttribute("user",user);
m.addAttribute("jlist",list);
return "form";
}
复制代码
@RequestMapping("saveUsers")
@ResponseBody
public User saveUser(User user){
System.out.println(user);
return user;
}复制代码
public class User {
@NotEmpty(message = "用户名不能为空")
private String uname;
private Integer uid;
@Length(min = 3,max = 6,message = "密码介于3-6位之间")
private String password;
//@DateTimeFormat(pattern = "yyyy-MM-dd")//日期格式化注解
private Date birthday;
private String hobbies;
@NotEmpty(message = "职位不能为空")
private List<Integer> jobs;
}
复制代码
public String saveUser(Model m, @ModelAttribute("user") @Valid User user, BindingResult br)
@RequestMapping("saveUsers")
public String saveUser(Model m, @ModelAttribute("user") @Valid User user, BindingResult br){
//@ModelAttribute至关于:m.addAttribute("user"),
//@Valid:用于验证注解是否符合要求,直接加在变量user以前,在变量中添加验证信息的要求,当不符合要求时就会在方法中返回message 的错误提示信息。
if(br.hasErrors()){//若是有错误信息
List<Job> list=new ArrayList<>();
list.add(new Job("1","高级工程师"));
list.add(new Job("2","项目经理"));
list.add(new Job("3","人事总监"));
m.addAttribute("jlist",list);
return "form";
}
System.out.println(user);
return "main";
}
复制代码
<form:form action="saveUsers" method="post" modelAttribute="user">
<form:label path="uname">名字:</form:label> <br>
<form:input path="uname"/><br>
<form:errors path="uname"/><!--验证名字-->
<form:label path="password">密码:</form:label><br>
<form:password path="password"/><br>
<form:errors path="password"/><!--验证密码-->
<form:label path="birthday">生日:</form:label><br>
<form:input path="birthday"/><br>
爱好: <br>
<form:checkbox path="hobbies" value="1"/>聊天1<br>
<form:checkbox path="hobbies" value="2"/>聊天2<br>
<form:checkbox path="hobbies" value="3"/>聊天3<br>
<hr>
<form:checkboxes path="jobs" items="${jlist}" itemValue="jid" itemLabel="jname" />
<form:errors path="jobs"/><!--验证职位-->
<form:button>保存</form:button>
</form:form>
复制代码
第一次写文章,有错误还请你们帮忙指出,万分感谢
spring