A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 梦想飞翔的猪 于 2018-2-1 17:01 编辑

【石家庄校区】总复习系列贴-springMvc(二)

1.  SpringMvc常用注解
        i.     @Controller
1.  @Controller 用于标记在一个类上,使用它标记的类就是一个SpringMVC Controller 对象。分发处理器将会扫描使用了该注解的类的方法,并检测该方法是否使用了@RequestMapping 注解。@Controller 只是定义了一个控制器类,而使用@RequestMapping 注解的方法才是真正处理请求的处理器。
       ii.     @RequestMapping
1.  RequestMapping是一个用来处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。返回值会通过视图解析器解析为实际的物理视图,对于 InternalResourceViewResolver 视图解析器,会做如下的解析:通过 prefix + returnVal +suffix 这样的方式得到实际的物理视图,然后做转发操作;
[XML] 纯文本查看 复制代码
[/align]<!-- 配置视图解析器:如何把 handler 方法返回值解析为实际的物理视图 -->
     <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
         <property name="prefix" value="/WEB-INF/views/"></property>
         <property name="suffix" value=".jsp"></property>
     </bean>
a)  value:2.  RequestMapping注解有六个属性:
value:指定请求的实际地址;
b)  method:
method: 指定请求的method类型, GET、POST、PUT、DELETE等
c)       consumes:
consumes: 指定处理请求的提交内容类型(Content-Type),例如application/json, text/html;
d)       produce:
produces:   指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回;
e)       params;
params: 指定request中必须包含某些参数值是,才让该方法处理。
f)       headers:
headers: 指定request中必须包含某些指定的header值,才能让该方法处理请求。
                            @RequestMapping("/helloword/?/aa") Ant 路径,匹配符:
                       ?  :匹配文件名的一个字符
                       *  :匹配文件名的所有字符
                        **:匹配多层路径
                 iii.           Restful请求处理
1.       @PathVariable
a)       用于将请求URL中的模板变量映射到功能处理方法的参数上,即取出uri模板中的变量作为参数。如:
[Java] 纯文本查看 复制代码
[/align]@RequestMapping(value="/user/{userId}/roles/{roleId}",method = RequestMethod.GET)  
     public String getLogin(@PathVariable("userId") String userId,  
         @PathVariable("roleId") String roleId){}
2.       @ResponseBody
a)      作用: 该注解用于将Controller的方法返回的对象,通过适当的HttpMessageConverter转换为指定格式后,写入到Response对象的body数据区。
b)      使用时机:返回的数据不是html标签的页面,而是其他某种格式的数据时(如json、xml等)使用;
                 iv.           @RequestParam
1.       使用@RequestParam常用于处理简单类型的绑定。
2.  value:参数名字,即入参的请求参数名字,如value=“item_id”表示请求的参数区中的名字为item_id的参数的值将传入;
3.  required:是否必须,默认是true,表示请求中一定要有相应的参数,否则将报TTP Status 400 -Required Integer parameter 'XXXX' is not present
4.       defaultValue:默认值,表示如果请求中没有同名参数时的默认值
5.       这里通过required=true限定item_id参数为必需传递,如果不传递则报400错误,可以使用defaultvalue设置默认值,即使required=true也可以不传item_id参数值
                  v.           @CookieValue
1.      作用:用来获取Cookie中的值;
2.      参数:value:参数名称  required:是否必须 defaultValue:默认值
                 vi.           @SessionAttributes
1.      @SessionAttributes即将值放到session作用域中,写在class上面。@SessionAttributes 除了可以通过属性名指定需要放到会话中的属性外(value 属性值),还可以通过模型属性的对象类型指定哪些模型属性需要放到会话中(types 属性值)。
[Java] 纯文本查看 复制代码
[/align]@SessionAttributes(value = {"user"}, types = {String.class})
@RequestMapping("/springmvc")
@Controller
public class SessionAttributesTest {
    @RequestMapping("/testSessionAttributes")
    public String testSessionAttributes(Map<String, Object> map) {
        User user = new User(1, "刘邦", "qwe", "123", "辽宁");
        map.put("user", user);
        map.put("school", "重庆");
        return "success";
    }
}
2.      @ModelAttribute
a)      代表的是:该Controller的所有方法在调用前,先执行此@ModelAttribute方法,可用于注解和方法参数中,可以把这个@ModelAttribute特性,应用在BaseController当中,所有的Controller继承BaseController,即可实现在调用Controller时,先执行@ModelAttribute方法。
2.      springMvc返回值
a)      ModelAndView
                    i.           controller方法中定义ModelAndView对象并返回,对象中可添加model数据、指定view。
b)      String
                    i.           controller方法返回字符串可以指定逻辑视图名,通过视图解析器解析为物理视图地址。
//指定逻辑视图名,经过视图解析器解析为jsp物理路径:/WEB-INF/jsp/item/editItem.jsp
return "item/editItem";
                  ii.           redirect 重定向
Contrller方法返回结果重定向到一个url地址,如下商品修改提交后重定向到商品查询方法,参数无法带到商品查询方法中。
//重定向到queryItem.action地址,request无法带过去
return "redirect:queryItem.action";
redirect方式相当于“response.sendRedirect()”,转发后浏览器的地址栏变为转发后的地址,因为转发即执行了一个新的request和response。
由于新发起一个request原来的参数在转发时就不能传递到下一个url,如果要传参数可以/item/queryItem.action后边加参数,如下:
/item/queryItem?...&…..
                 iii.           forward:请求转发
controller方法执行后继续执行另一个controller方法,如下商品修改提交后转向到商品修改页面,修改商品的id参数可以带到商品修改方法中。
//结果转发到editItem.action,request可以带过去
return "forward:editItem.action";
forward相当于“request.getRequestDispatcher().forward(request,response)”,转发后浏览器地址栏还是原来的地址。转发并没有执行新的request和response,而是和转发前的请求共用一个request和response。所以转发前请求的参数在转发后仍然可以读取到。
c)      Void
在controller方法形参上可以定义request和response,使用request或response指定响应结果:
1、使用request转向页面,如下:
request.getRequestDispatcher("页面路径").forward(request, response);
2、也可以通过response页面重定向:response.sendRedirect("url")
3、也可以通过response指定响应结果,例如响应json数据如下:
response.setCharacterEncoding("utf-8");
response.setContentType("application/json;charset=utf-8");

response.getWriter().write("json串")






0 个回复

您需要登录后才可以回帖 登录 | 加入黑马