一、复杂参数绑定
1、数组类型绑定
@RequestMapping("queryItem")
public String queryItem(QueryVo vo, Integer[] ids) {
System.out.println(vo);
//输出传入的数组
if (ids != null && ids.length > 0) {
for (Integer id : ids) {
System.out.println("传入的商品列表分别为:" + id);
}
}
return "itemList";
}
2、List类型绑定
二、@RequestMapping注解的使用
1、加在类头部,便于路径分层管理
2、路径映射可以是数组
3、限定请求方法
三、Controller方法返回值
1、返回ModelAndView
2、返回void
request和response传递和设置参数
@RequestMapping("queryVoid")
public void queryVoid(HttpServletRequest request, HttpServletResponse response) throws Exception {
response.setCharacterEncoding("utf-8");
PrintWriter printWriter = response.getWriter();
printWriter.println("这个是response打印的消息");
}
3、返回string
redirect与forward设置跳转方式
四、图片上传处理
五、json数据交互
1、所需jar包
2、类方法上加入@ResponseBody注解
@ResponseBody是作用在方法上的,@ResponseBody 表示该方法的返回结果直接写入 HTTP response body 中,一般在异步获取数据时使用【也就是AJAX】,在使用 @RequestMapping后,返回值通常解析为跳转路径,但是加上 @ResponseBody 后返回结果不会被解析为跳转路径,而是直接写入 HTTP response body 中。 比如异步获取 json 数据,加上 @ResponseBody 后,会直接返回 json 数据。@RequestBody 将 HTTP 请求正文插入方法中,使用适合的 HttpMessageConverter 将请求体写入某个对象。
@RequestMapping("getItem")
//@ResponseBody把pojo转成json串响应用户,接收用户传入json串转成pojo
@ResponseBody
public Item getItem(@RequestBody Item item2) {
System.out.println("接收到的json商品数据为:" + item2);
Item item = itemServices.getItemById(3);
return item;
}
六、Springmvc实现Restful
原地址栏:http://localhost:8080/web_war_exploded/findById.action?id=1
Restful风格地址栏:http://localhost:8080/web_war_exploded/findById/1
@RequestMapping("/findById/{id}")
//RESTful风格url上的参数通过{}点位符绑定
//点位符参数名与方法参数名不一致时,通过@PathVariable绑定
public ModelAndView findById(@PathVariable("id") String id){
ModelAndView mav = new ModelAndView();
Commodity commodity = service.findById(id);
mav.addObject("commodity",commodity);
mav.setViewName("commodityEdit");
return mav;
}
七、登录拦截
- 有一个登录页面,需要写一个controller访问页面
- 登录页面有一提交表单的动作。需要在controller中处理。
- 判断用户名密码是否正确
- 如果正确 想session中写入用户信息
- 返回登录成功,或者跳转到商品列表
- 拦截器。
- 拦截用户请求,判断用户是否登录
- 如果用户已经登录。放行
- 如果用户未登录,跳转到登录页面。
LoginInterceptor
public class LoginInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object o) throws Exception {
Object username = request.getSession().getAttribute("username");
if(username == null){
response.sendRedirect(request.getContextPath()+"/jsp/login.jsp");
}
return true;
}
@Override
public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {
}
@Override
public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {
}
}
LoginController
@Controller
@RequestMapping("/user")
public class LoginController {
@RequestMapping("/login")
public String login(User user, HttpSession session){
if (user.getUsername().equals("admin")&&user.getPassword().equals("123456")){
session.setAttribute("username",user.getUsername());
return "redirect:/jsp/welcome.jsp";
}
return "redirect:/jsp/login.jsp";
}
}
springmvc.xml配置
<!--配置登录拦截器-->
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/**"/>
<mvc:exclude-mapping path="/user/*" />
<bean class="com.wasion.springmvc.interceptor.LoginInterceptor" />
</mvc:interceptor>
</mvc:interceptors>