SSM框架---SpringMVC的知识点(六)

一、@RequestMapping的用法

1、URL路径映射:作用于方法,可以将多个url映射到同一个方法。      
     单个地址映射:@RequestMapping("/list")      
     多个地址映射:@RequestMapping(value={"/list","/list2"})
2、窄化请求映射:作用于类,@RequestMapping可以写到Controller上。
3、请求方法限定:作用于方法,限制请求方式 method={RequestMethod.GET,RequestMethod.POST}
     @RequestMapping(method=RequestMethod.GET):如果通过Post访问则报错:HTTP Status 405 - Request method 'POST' not supported
     @RequestMapping(method=RequestMethod.POST):如果通过Post访问则报错:HTTP Status 405 - Request method 'GET' not supported
     @RequestMapping(method={RequestMethod.GET,RequestMethod.POST}):GET和POST都可以

二、Controller方法的返回类型

1、ModelAndView

ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("itemList",list);//设置数据,相当于把数据放到request域中;"itemList"是在jsp配置的名字
modelAndView.setViewName("WEB-INF/jsp/itemList.jsp");//设置逻辑视图。逻辑视图,就是jsp的路径//WEB-INF/jsp/itemList.jsp
return modelAndView;

2、String

public String itemEdit(Model model){
    model.addAttribute("item",items);
    return "editItem";//逻辑视图:其实是返回jsp的路径。//WEB-INF/jsp/editItem.jsp
    //return "redirect:list2Temp.do";//重定向,不同的request域
    //return "forward:list2Temp.do";//请求转发,同一个request域
}

3、void:只能使用最原始的servlet的方法


public void itemEdit(HttpServletRequest request, HttpServletResponse response){
        1、请求转发
	request.getRequestDispatcher("页面路径").forward(request, response);//请求转发

	2、重定向:
	response.sendRedirect("页面路径");

	3、也可以通过response指定响应结果,例如响应json数据如下:
	response.setCharacterEncoding("utf-8");
	response.setContentType("application/json;charset=utf-8");
	response.getWriter().write("json串");
}

三、springmvc对restful风格的支持

什么是restful风格?url中没有参数,如:https://mp.csdn.net/postedit/103509565

正常模式:  http://localhost:7001/xxx/itemEdit.do?id=2&name='牡丹'
restful风格:http://localhost:7001/xxx/itemEdit/2/牡丹

1、修改web.xml中DispatcherServlet的url-pattern: <url-pattern>*.do</url-pattern> 改成  <url-pattern>/</url-pattern>
2、修改方法的 @RequestMapping("/方法名/{参数1}/{参数2}")与@PathVariable("参数1")@PathVariable("参数2")保持一致

@RequestMapping("/itemEdit2Temp/{idXxx}/{idXxx2}")
public String itemEdit(@PathVariable("idXxx")int id,@PathVariable("idXxx2")int id2,Model model){...}

3、配置静态资源  如:http://ip:port/Xxx/js/jquery-1.4.4.min.js, 因为前端控制器现在是通过/过滤方法,很明显.js方法不属于需要过滤的方法。我们这里配置:以js开头的请求,直接从js文件夹中找相应的文件。pic文件也一样。

springmvc.xml文件:
<!--  配置静态资源 -->
<!-- location:请求地址    mapping:映射的位置 -->
<mvc:resources location="/js/" mapping="/js/**"> </mvc:resources>
<mvc:resources location="/pic/" mapping="/pic/**"> </mvc:resources>

四、拦截器interceptor

1、定义

Spring Web MVC 的处理器拦截器类似于Servlet 开发中的过滤器Filter,用于对处理器进行预处理和后处理。

2、自定义拦截器,实现HandlerInterceptor接口

3、拦截器的配置

springmvc.xml:
<!--拦截器 -->
<mvc:interceptors>
	<!--多个拦截器,顺序执行,/** 任意层级的目录 -->
	<mvc:interceptor>
		<mvc:mapping path="/**/"/>
		<bean class="com.ly.ssm.interceptor.MyHandlerInterceptor1"></bean>
	</mvc:interceptor>
	
	<mvc:interceptor>
		<mvc:mapping path="/**/"/>
		<bean class="com.ly.ssm.interceptor.MyHandlerInterceptor2"></bean>
	</mvc:interceptor>
</mvc:interceptors>

4、测试:拦截器的顺序

MyHandlerInterceptor1----preHandle。。。
MyHandlerInterceptor2----preHandle。。。
MyHandlerInterceptor2----postHandle。。。
MyHandlerInterceptor1----postHandle。。。
MyHandlerInterceptor2----afterCompletion。。。
MyHandlerInterceptor1----afterCompletion。。。
注意:只有preHandle方法返回ture时,postHandle和afterCompletion方法才会执行(true:放行;false:拦截

 5、拦截器的应用:登录校验

//true:放行;  false:拦截
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
	Object attribute = request.getSession().getAttribute("user");
	if(null == attribute){
		HandlerMethod HandlerMethod = (HandlerMethod)handler;
		if(HandlerMethod.getMethod().getName().equals("login")){
			return true;//放行
		}
		request.getRequestDispatcher("/WEB-INF/jsp/login.jsp").forward(request, response);
		return false;  //拦截
	}else{
		return true;//放行
	}
}

 

 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值