dispatcherServlet
org.springframework.web.servlet.DispatcherServlet
contextConfigLocation
classpath:spring.xml
dispatcherServlet
/
public class Mycontroller implements Controller{
@Override
public ModelAndView handleRequest(HttpServletRequest arg0, HttpServletResponse arg1) throws Exception {
ModelAndView mav=new ModelAndView();
mav.setViewName("success.jsp");
return mav;
}
}
1、转发
转发使用关键字forward
2、重定向
重定向使用关键字redirect
Springmvc工作流程描述(简易)
1. 客户端请求提交到DispatcherServlet
2. 由DispatcherServlet控制器查询一个或多个HandlerMapping,找到 处理请求的handler。
3. DispatcherServlet将请求转发给到handler。
4. 通过HandlerAdatper执行handler调用业务逻辑处理后,返回ModelAndView
5. DispatcherServlet查询一个或多个ViewResoler视图解析器,将model渲染到viewss。
6.将viewss结果显示到客户端。
//自定义拦截器
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object arg2) throws Exception {
Object o=request.getSession().getAttribute("user");
System.out.println("进入拦截器");
//不为空,已登录放行;
if(o!=null){
//放行
System.out.println("放行");
return true;
}
System.out.println("拦截");
return false;
}
对于任何一个应用而言在客户端做的数据有效性验证都不是安全有效的,这时候就要求我们在开发的时候在服务端也对数据的有效性进行验证
@NotNull(message="用户名不能为null",groups={UserLoginValidation.class,UserRegisterValidation.class})
@Pattern(regexp="^[a-zA-Z][a-zA-Z0-9_]{5,11}$",message="用户名只能以字母开头,包含字母,数字,下划线 共5-12位",groups={UserRegisterValidation.class})
private String username;
public class UserController {
@RequestMapping(value="/register.do",method={RequestMethod.POST})
public String register(@Validated(value={UserRegisterValidation.class})User user,
BindingResult result,HttpSession session){
Map map=new HashMap<>();
if(result.hasErrors()){
List errors=result.getFieldErrors();
for (FieldError fieldError : errors) {
String field=fieldError.getField();//拿到错误项
String message=fieldError.getDefaultMessage();//拿到错误提醒
System.out.println(field+" "+message);
map.put(field, message);
}
session.setAttribute("map", map);
return "redirect:register.jsp";
}
return "login.jsp";
}
}
1.导入包(2个)
2.设置form:
4.controller配置
//上传图片
@RequestMapping("/upload.do")
public String upload(MultipartFile icon,HttpServletRequest request,Model model) throws IOException{
//把文件对象读入到流中
InputStream is=icon.getInputStream();
//获取文件的名字
String filename=icon.getOriginalFilename();
//根据请求对象获取images文件夹的路径
String realpath=request.getServletContext().getRealPath("/images");
filename = getFileName(filename);
//根据文件夹和文件名得到一个输出流对象
OutputStream os=new FileOutputStream(new File(realpath,filename));
IOUtils.copy(is, os);
model.addAttribute("filename",filename);
os.flush();
os.close();
is.close();
return "success.jsp";
}
public String getFileName(String fileName){
//获取后缀文件名
String extension=FilenameUtils.getExtension(fileName);
//使用uuid和当前日期的毫秒数来作为文件名字
String finalname=UUID.randomUUID().toString()+new Date().getTime()+"."+extension;
return finalname;
}
//下载图片
@RequestMapping("/download.do")
public void download(String name,HttpServletRequest request,HttpServletResponse response) throws IOException{
//设置相应的内容:下载,预览"attachment;filename="为下载;
response.setHeader("content-Disposition", "filename="+name);
//获取项目名加文件夹路径
String path=request.getServletContext().getRealPath("/images");
//通过路径和文件名创建文件对象
File file=new File(path,name);
//把该文件读入输入流
InputStream is=new FileInputStream(file);
OutputStream os=response.getOutputStream();
IOUtils.copy(is, os);
os.flush();
os.close();
is.close();
}
public String disFilename(HttpServletRequest request,String filename) throws UnsupportedEncodingException{
String userAgent = request.getHeader("User-Agent");
if(userAgent.toUpperCase().indexOf("FIREFOX")>=0){
filename = "=?UTF-8?B?"+(new String(Base64.encodeBase64(filename.getBytes("utf-8"))))+"?=";
}else{
filename = URLEncoder.encode(filename, "utf-8");
}
return filename;
}
dispatcherServlet
org.springframework.web.servlet.DispatcherServlet
contextConfigLocation
classpath:spring.xml
1
dispatcherServlet
/
characterEncodingFilter
org.springframework.web.filter.CharacterEncodingFilter
encoding
utf-8
characterEncodingFilter
/*