SpringMvc

作者: AAnna珠 | 来源:发表于2019-05-06 20:06 被阅读0次

一、

第一步:发起请求到前端控制器(dispatcherServlet)

第二步:前端控制器请求handlerMapping查找handler,可以根据xml配置,注解进行查找

第三步:处理器映射器handlerMapping向前端控制器返回handler

第四步:前端控制器调用处理器适配器去执行handler

第五步:处理器适配器去执行handler

第六步:handler执行完成给适配器返回ModelAndView

第七步:处理器适配器向前端控制器返回ModelAndView,ModelAndView是SpringMVC框架的一个底层对象,包括Model和View

第八步:前端控制器请求视图解析器去进行视图解析,根据逻辑视图名解析成真正的视图

第九步:视图解析器向前端控制器返回view

第十步:前端控制器进行视图渲染,视图渲染将模型数据(在ModelAndView对象中)填充到request域

第十一步:前端控制器向用户响应结果

二、mvc组件

1.前端控制器dispatcherservlet

作用:接收请求,响应结果,相当于转发器,中央处理器

有了前端控制器减少了其他组件之间的耦合度

2.处理器映射器HandlerMapping

作用:根据请求URL查询handler

3.处理器适配器handlerAdapter

作用:按照特定规则去执行handler

4.处理器handler(程序员开发)

注意:编写handler时按照handlerAdapter的要求去做,这样适配器才能正确执行Handler

5.视图解析器View resolver(不需要程序员开发)

作用:进行视图解析,根据逻辑视图解析或者真正的视图view

6.视图view(需要程序员开发jsp)

view是一个接口,实现类支持不同的view类型(jsp、freemarker、pdf...)

三、注解开发步骤

创建web工程

导入jar包

在web.xml中配置dispatcherservlet

配置注解映射器和适配器

编写注解处理器

在Spring容器中加载处理器

编写视图

配置视图解析器

部署调试

四、@RequestMapping映射请求

1.使用@RequestMapping注解为控制器指定可以处理哪些URL请求

2.在控制器的类定义及方法定义处可标注。

2.1类定义处:提供初步的请求映射信息,相对WEB应用的根目录

2.2方法处:提供进一步的细分映射信息,相对于类定义出的url。若类定义处未标注@RequestMapping,则方法处标记的URL相对于WEB应用根目录

2.3DispathcherServlet截获请求后,就通过控制器上的@RequestMapping提供的映射信息确定请求所对应的处理方法

3.1@RequestMapping修饰类

``

@Controller

@RequestMapping(“items”)

public classItemController3{

        @RequestMapping(“/queryItems”)

        public ModelAndView queryItems()throws Exception{

``

3.2@RequestMapping修饰方法

3.2.1@RequestMapping除了可以使用请求url映射请求外。可以使用请求方法、请求参数及请求头映射请求

3.2.2@RequestMapping的value、method、params、heads分别表示请求url、请求方法、请求参数及请求头的映射条件,他们之间是与的关系,联合使用多个条件可让请求映射更加精确化

4.params和headers支持简单的表达式:

-param1:表示请求必须包含名为param1的请求参数

-!param1:表示请求不能包含名为param1的请求参数

-param1!=value1:表示请求包含名为param1的请求参数,但其值不能为value1

-{"param1=value1","param2"}:请求必须包含名为param1和param2的两个请求参数,且param1参数值必须为value1

··

//限制http请求方法,可以post和get

@RequestMapping(value="/editIttems",method=RequestMethod.GET,RequestMethod.POST)

public ModelAndView editItems() throws Exception{

    ItemCustom itemCustom =itemCustom.findItemsById(1);

    ModelAndView modelAndViewm=new ModelAndView();

    modelAndViewm.addObject("itemsCustom",itemsCustom);

    modelAndViewm.setViewName("/items/editItems");

    return modelAndViewm;

}

@RequestMapping(value="/delete",method=RequestMethod.POST,params="userId")

public String test1(){
return "user/test1";

}

@RequestMapping(value="/show",headers="contentType=test/*")

public String test2(){

return "user/test2";

}

5.controller方法的返回值:返回ModelAndView,返回字符串,返回void

5.1返回ModelAndView

@RequestMapping("/queryItems")

public ModelAndView queryItem(HttpServletRequest request) throws Exception {

//测试请求转发时,共享request数据

System.out.print("测试request共享性"+request.getParameter(“id”));

//调用service查找数据,查询 商品列表

List<ItemsCustom> itemsList = new  ArrayList<ItemsCustom>();

itemsList = itemsService.findItemsList(null);

// 创建modelAndView准备填充数据、设置视图

ModelAndView modelAndView = new ModelAndView();

// 填充数据

modelAndView.addObject("itemsList", itemsList);

// 指定视图

modelAndView.setViewName("items/itemsList");

return modelAndView;

}

5.2Controller返回字符串

-2.2.1表示返回逻辑视图名

@RequestMapping("/editItems",method={RequestMethod.POST,RequestMethod.GET)

public String editItems(Model model) throws Exception {

    //调用service根据商品id查询商品信息

    ItemsCustom itemsCustom=itemsCustom.findItemsById(1);

    //通过形参中的model将model数据传到页面

    //相当于modelAndView.addObject方法

model.addAttribute("itemsCustom",itemsCustom);

return "items/editItems";

}

-redirect重定向

redirect重定向特点:浏览器地址栏中的url会变化。修改提交的request数据无法传到重定向的地址。因此重定向后重新进行request(request无法共享)

//重定向到商品查询列表

return“redirect:queryItems.action”;

-forward页面转发

通过forWord进行页面转发,浏览器地址栏url不要,request可以共享。

//页面转发

return “forward:queryItems。action”;

5.3返回void

在controller方法形参上可以定义request和response,使用request或response指定响应结果:

5.3.1使用request转向页面,如:

    request。getRequestDispatcher("页面路径”)。forward(request,response);

5.3.2可以通过response页面重定向:

    response。sendRedirect("url")

5.3.3可以通过response指定响应结果。例如响应json数据如下:

    response.setCharcterEncoding("utf-8");

    response.setContentType("application/json.charset=utf-8");

    response.getWrite().Write("json串“);

五、绑定

1.处理器形参中可添加的参数类型,①HTTPServletRequest,②HTTPServletResponse③HTTPSession④Model/ModelMap

2.简单类型绑定

通过@RequestParam对简单类型进行绑定。

2.1@RequestParam的参数

- value=" "入参的请求参数的名字

- value=“item_id”请求的参数中的名字为item_id的参数值传入

- required是否必须,默认是true

- defaultValue默认值

2.2pojo绑定

<td><input type="text" name="name" value="${itemsCustom.name}"/></td>

public class Items{

    private String name;

@RequestMapping("/editItemsSubmit")

public String editItemsSubmit(HttpServletRequest request,int id,ItemsCustom itemsCustom ) throws Exception{

itemsService.updateItems(id,itemsCustom);

3.包装pojo类型绑定

将pojo对象作为一个包装对象的属性,controller方法中以该包装对象作为形参。

public class ItemsQueryVo{

    private Items items ;

    private ItemsCustom itemsCustom ;

<td>商品名称<input type="text" name="itemCustom.name/></td>

@RequestMapping("/queryItems")

public ModelAndView queryItems(HttpServletRequest request,ItemsQueryVo itemsQueryVo ) throws Exception{

List<itemsCustom> itemsList =new ArrayList<itemsCustom>();

itemsList = itemsService.findItemsList (itemsQueryVo);

六、校验

SpringMVC使用hibernate的校验框架validation。

数据校验步骤:

- 导入校验jar文件

- 配置校验器

- 校验器注入到处理器适配器中

- 添加校验规则

- 错误信息文件

- 捕获错误信息

- 显示错误信息

相关文章

网友评论

      本文标题:SpringMvc

      本文链接:https://www.haomeiwen.com/subject/xbzdoqtx.html