1.Spring MVC参数绑定
Spring MVC参数绑定是指将用户提交的数据绑定到控制器方法的参数中。Spring MVC支持多种参数类型,包括基本类型、字符串、集合和自定义类型。您可以使用注释(@RequestParam、@PathVariable、@ModelAttribute等)来指定如何绑定参数。以下是一个基本的示例:
控制器方法:
java
Copy code
@RequestMapping("/user")
public String showUserInfo(@RequestParam("username") String username,
@RequestParam("password") String password,
Model model) {
// 处理用户信息
model.addAttribute("username", username);
return "user";
}
该方法接受两个参数:用户名和密码,并使用@RequestParam注释将它们绑定到方法参数中。最后,使用模型将用户名添加到模板中。
2.参数绑定的list和map类型的数据
Spring MVC还支持将表单提交的数据绑定到集合和映射中。以下是一个示例:
控制器方法:
java
Copy code
@RequestMapping("/submit")
public String submitForm(@RequestParam("name") String name,
@RequestParam("emails") List<String> emails,
Model model) {
// 处理表单数据
model.addAttribute("name", name);
model.addAttribute("emails", emails);
return "result";
}
该方法接受三个参数:一个名称和一个电子邮件列表。表单中的电子邮件输入框的名称必须是“emails”,以便Spring将其绑定到List参数中。
3.拦截器
拦截器是一种用于在请求处理之前和之后执行预处理和后处理任务的机制。在Spring MVC中,拦截器是一种用于拦截控制器方法调用的组件。拦截器可以用于许多用途,例如身份验证、日志记录和性能测量。
以下是一个拦截器示例:
java
Copy code
public class LoggingInterceptor extends HandlerInterceptorAdapter {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
// 记录请求日志
String url = request.getRequestURI();
String method = request.getMethod();
String ip = request.getRemoteAddr();
String logMsg = String.format("%s %s from %s", method, url, ip);
System.out.println(logMsg);
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
// 记录响应日志
int status = response.getStatus();
String logMsg = String.format("Response withstatus %d", status);
System.out.println(logMsg);
}
}
该拦截器覆盖了HandlerInterceptorAdapter类中的preHandle和postHandle方法。在preHandle方法中,它记录了来自请求的URL、请求方法和IP地址。在postHandle方法中,它记录了响应状态码。
要使用该拦截器,您需要在配置文件中声明它:
xml
Copy code
<mvc:interceptors>
<bean class="com.example.LoggingInterceptor" />
</mvc:interceptors>
4.文件上传
Spring MVC支持文件上传,允许用户将文件提交给Web应用程序。以下是一个文件上传示例:
控制器方法:
java
Copy code
@RequestMapping(value = "/upload", method = RequestMethod.POST)
public String handleFileUpload(@RequestParam("file") MultipartFile file,
RedirectAttributes redirectAttributes) {
// 处理文件上传
if (!file.isEmpty()) {
try {
byte[] bytes = file.getBytes();
// 处理上传的文件
redirectAttributes.addFlashAttribute("message", "上传成功!");
} catch (IOException e) {
redirectAttributes.addFlashAttribute("message", "上传失败:" + e.getMessage());
}
} else {
redirectAttributes.addFlashAttribute("message", "请选择文件上传!");
}
return "redirect:/";
}
该方法使用@RequestParam注释接受一个MultipartFile参数,该参数表示上传的文件。如果文件不为空,则读取文件的内容并执行必要的处理。如果上传失败,则向重定向属性添加消息以供显示。最后,它使用redirect:/重定向到主页。要使用文件上传,您需要在表单中添加一个文件输入字段,并在表单提交时将其绑定到控制器方法中。