springmvc_day02

一、复杂参数绑定

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;
}

七、登录拦截

  1. 有一个登录页面,需要写一个controller访问页面
  2. 登录页面有一提交表单的动作。需要在controller中处理。
    1. 判断用户名密码是否正确
    2. 如果正确 想session中写入用户信息
    3. 返回登录成功,或者跳转到商品列表
  3. 拦截器。
    1. 拦截用户请求,判断用户是否登录
    2. 如果用户已经登录。放行
    3. 如果用户未登录,跳转到登录页面。

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>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值