SpringMVC框架学习笔记(一) 1. springmvc框架 2. 入门程序 3. 非注解的处理器映射器和适配器 4. DispatcherSerlvet.properties 5. 注解的处理器映射器和适配器  更多内容见SpringMVC框架学习笔记(二) 

SpringMVC框架学习笔记(一)
1. springmvc框架
2. 入门程序
3. 非注解的处理器映射器和适配器
4. DispatcherSerlvet.properties
5. 注解的处理器映射器和适配器
 更多内容见SpringMVC框架学习笔记(二) 

  在研究学术之余,来复习一下java的SpringMVC框架,最近也没什么项目,所以也有一段时间没有看这个框架了,都有点陌生了,现在每天都在看论文,研究方案,做实验,在论文看不下去的时候就来学习一下SPringMVC也是不错的选择,哈哈哈!!!!!!

1.1 什么是springmvc

springmvc是spring框架的一个模块,springmvc和spring无需通过中间整合层进行整合。springmvc是一个基于mvc的web框架。

SpringMVC框架学习笔记(一)
1. springmvc框架
2. 入门程序
3. 非注解的处理器映射器和适配器
4. DispatcherSerlvet.properties
5. 注解的处理器映射器和适配器
 更多内容见SpringMVC框架学习笔记(二) 

1.2 mvc在b/s系统 下的应用

mvc是一个设计模式,mvc在b/s系统 下的应用:

SpringMVC框架学习笔记(一)
1. springmvc框架
2. 入门程序
3. 非注解的处理器映射器和适配器
4. DispatcherSerlvet.properties
5. 注解的处理器映射器和适配器
 更多内容见SpringMVC框架学习笔记(二) 

1.3 springmvc框架

SpringMVC框架学习笔记(一)
1. springmvc框架
2. 入门程序
3. 非注解的处理器映射器和适配器
4. DispatcherSerlvet.properties
5. 注解的处理器映射器和适配器
 更多内容见SpringMVC框架学习笔记(二) 

步骤:

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

第二步:前端控制器请求HandlerMapping查找 Handler

         可以根据xml配置、注解进行查找

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

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

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

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

第七步:处理器适配器向前端控制器返回ModelAndView

         ModelAndView是springmvc框架的一个底层对象,包括 Model和view

第八步:前端控制器请求视图解析器去进行视图解析

         根据逻辑视图名解析成真正的视图(jsp)

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

第十步:前端控制器进行视图渲染

         视图渲染将模型数据(在ModelAndView对象中)填充到request域

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

组件:

1、前端控制器DispatcherServlet(不需要程序员开发)

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

有了DispatcherServlet减少了其它组件之间的耦合度。

2、处理器映射器HandlerMapping(不需要程序员开发)

作用:根据请求的url查找Handler

3、处理器适配器HandlerAdapter

作用:按照特定规则(HandlerAdapter要求的规则)去执行Handler

4、处理器Handler(需要程序员开发)

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

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

作用:进行视图解析,根据逻辑视图名解析成真正的视图(view)

6、视图View(需要程序员开发jsp)

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

2. 入门程序

2.1 需求

以案例作为驱动。

springmvc和mybaits使用一个案例(商品订单管理)。

功能需求:商品列表查询

2.2 环境准备

数据库环境:mysql5.7

java环境:

jdk1.8.0

apache-tomcat-8.0.51

eclipse neon

springmvc版本:spring3.2      spring4.3.9

需要spring3.2所有jar(一定包括spring-webmvc-3.2.0.RELEASE.jar)

SpringMVC框架学习笔记(一)
1. springmvc框架
2. 入门程序
3. 非注解的处理器映射器和适配器
4. DispatcherSerlvet.properties
5. 注解的处理器映射器和适配器
 更多内容见SpringMVC框架学习笔记(二) 

2.3 配置前端控制器

在web.xml中配置前端控制器。

 SpringMVC框架学习笔记(一)
1. springmvc框架
2. 入门程序
3. 非注解的处理器映射器和适配器
4. DispatcherSerlvet.properties
5. 注解的处理器映射器和适配器
 更多内容见SpringMVC框架学习笔记(二) 

2.4 配置处理器适配器

在classpath下的springmvc.xml中配置处理器适配器

通过查看源代码:

SpringMVC框架学习笔记(一)
1. springmvc框架
2. 入门程序
3. 非注解的处理器映射器和适配器
4. DispatcherSerlvet.properties
5. 注解的处理器映射器和适配器
 更多内容见SpringMVC框架学习笔记(二) 

此适配器能执行Controller接口的Handler。

SpringMVC框架学习笔记(一)
1. springmvc框架
2. 入门程序
3. 非注解的处理器映射器和适配器
4. DispatcherSerlvet.properties
5. 注解的处理器映射器和适配器
 更多内容见SpringMVC框架学习笔记(二) 

2.5 开发Handler

需要实现 controller接口,才能由org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter适配器执行。

public class ItemsController1 implements Controller{

    @Override
    public ModelAndView handleRequest(HttpServletRequest request, 
            HttpServletResponse response) throws Exception {
        
        //调用service查找数据库,查询商品列表,这里使用静态数据模拟
        List<Items> itemsList=new ArrayList<Items>();
         //向list中填充静态数据
        Items items_1 = new Items();
        items_1.setName("联想笔记本");
        items_1.setPrice(6000f);
        items_1.setDetail("ThinkPad T430 联想笔记本电脑!");
        
        Items items_2 = new Items();
        items_2.setName("苹果手机");
        items_2.setPrice(5000f);
        items_2.setDetail("iphone6苹果手机!");
        
        itemsList.add(items_1);
        itemsList.add(items_2);
        
        //返回ModelAndView
        ModelAndView modelAndView=new ModelAndView();
        //相当于request的setAttribute,在jsp页面中通过itemsList取数据
        modelAndView.addObject("itemsList", itemsList);
        
        //指定视图
        modelAndView.setViewName("/WEB-INF/jsp/items/itemsList.jsp");

        return modelAndView;
    }

}

2.6  视图编写

SpringMVC框架学习笔记(一)
1. springmvc框架
2. 入门程序
3. 非注解的处理器映射器和适配器
4. DispatcherSerlvet.properties
5. 注解的处理器映射器和适配器
 更多内容见SpringMVC框架学习笔记(二) 

2.7  配置Handler

将编写Handler在spring容器加载。

SpringMVC框架学习笔记(一)
1. springmvc框架
2. 入门程序
3. 非注解的处理器映射器和适配器
4. DispatcherSerlvet.properties
5. 注解的处理器映射器和适配器
 更多内容见SpringMVC框架学习笔记(二) 

2.8  配置处理器映射器

在classpath下的springmvc.xml中配置处理器映射器

 SpringMVC框架学习笔记(一)
1. springmvc框架
2. 入门程序
3. 非注解的处理器映射器和适配器
4. DispatcherSerlvet.properties
5. 注解的处理器映射器和适配器
 更多内容见SpringMVC框架学习笔记(二) 

2.9 配置视图解析器

需要配置解析jsp的视图解析器。

SpringMVC框架学习笔记(一)
1. springmvc框架
2. 入门程序
3. 非注解的处理器映射器和适配器
4. DispatcherSerlvet.properties
5. 注解的处理器映射器和适配器
 更多内容见SpringMVC框架学习笔记(二) 

2.10 部署调试

 访问地址:http://localhost:8080/springmvc/queryItems.action

 处理器映射器根据url找不到Handler,报下边的错误。说明url错误。

 SpringMVC框架学习笔记(一)
1. springmvc框架
2. 入门程序
3. 非注解的处理器映射器和适配器
4. DispatcherSerlvet.properties
5. 注解的处理器映射器和适配器
 更多内容见SpringMVC框架学习笔记(二) 

处理器映射器根据url找到了Handler,转发的jsp页面找到,报下边的错误,说明jsp页面地址错误了。

SpringMVC框架学习笔记(一)
1. springmvc框架
2. 入门程序
3. 非注解的处理器映射器和适配器
4. DispatcherSerlvet.properties
5. 注解的处理器映射器和适配器
 更多内容见SpringMVC框架学习笔记(二) 

刚开始的时候遇到一个错误,提示

java.lang.ClassNotFoundException: org.springframework.web.servlet.Dispatcher

SpringMVC框架学习笔记(一)
1. springmvc框架
2. 入门程序
3. 非注解的处理器映射器和适配器
4. DispatcherSerlvet.properties
5. 注解的处理器映射器和适配器
 更多内容见SpringMVC框架学习笔记(二) 

在输入正确的地址后,并没有访问到预期的效果,在查看代码后,发现是配置文件中的路径:

<servlet-class>org.springframework.web.servlet.DispatcherServlet </servlet-class> 

出现问题了,点击看看是否可以进去,发现进不去,所以说明这个路径我导错了,所以导致找不到这个类,重新导入源文件,拷贝正确的全路径后就可以正确的访问了,问题解决。

预期的正确的效果:

SpringMVC框架学习笔记(一)
1. springmvc框架
2. 入门程序
3. 非注解的处理器映射器和适配器
4. DispatcherSerlvet.properties
5. 注解的处理器映射器和适配器
 更多内容见SpringMVC框架学习笔记(二) 

3. 非注解的处理器映射器和适配器

3.1 非注解的处理器映射器

处理器映射器:

org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping

另一个映射器:

 org.springframework.web.servlet.handler.SimpleUrlHandlerMapping

 SpringMVC框架学习笔记(一)
1. springmvc框架
2. 入门程序
3. 非注解的处理器映射器和适配器
4. DispatcherSerlvet.properties
5. 注解的处理器映射器和适配器
 更多内容见SpringMVC框架学习笔记(二) 

多个映射器可以并存,前端控制器判断url能让哪些映射器映射,就让正确的映射器处理。

3.2 非注解的处理器适配器

org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter

要求编写的Handler实现 Controller接口。

org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter

要求编写的Handler实现 HttpRequestHandler接口。

SpringMVC框架学习笔记(一)
1. springmvc框架
2. 入门程序
3. 非注解的处理器映射器和适配器
4. DispatcherSerlvet.properties
5. 注解的处理器映射器和适配器
 更多内容见SpringMVC框架学习笔记(二) 

//使用此方法可以通过修改response,设置响应的数据格式,比如响应json数据
/* response.setCharacterEncoding("utf-8");
response.setContentType("application/json;charset=utf-8");
response.getWriter().write("json串");*/

4. DispatcherSerlvet.properties

 在springmvc中如果没有设置处理映射器的话,前端控制器从下边的文件中加载处理映射器、适配器、视图解析器等组件,使用默认加载的。

 SpringMVC框架学习笔记(一)
1. springmvc框架
2. 入门程序
3. 非注解的处理器映射器和适配器
4. DispatcherSerlvet.properties
5. 注解的处理器映射器和适配器
 更多内容见SpringMVC框架学习笔记(二) 

5. 注解的处理器映射器和适配器

在spring3.1之前使用org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping注解映射器。

在spring3.1之后使用org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping注解映射器。

在spring3.1之前使用org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter注解适配器。

在spring3.1之后使用org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter注解适配器。

 5.1 配置注解映射器和适配器。

 SpringMVC框架学习笔记(一)
1. springmvc框架
2. 入门程序
3. 非注解的处理器映射器和适配器
4. DispatcherSerlvet.properties
5. 注解的处理器映射器和适配器
 更多内容见SpringMVC框架学习笔记(二) 

 SpringMVC框架学习笔记(一)
1. springmvc框架
2. 入门程序
3. 非注解的处理器映射器和适配器
4. DispatcherSerlvet.properties
5. 注解的处理器映射器和适配器
 更多内容见SpringMVC框架学习笔记(二) 

5.2 开发注解Handler

使用注解的映射器和注解的适配器。(注解的映射器和注解的适配器必须配对使用)

SpringMVC框架学习笔记(一)
1. springmvc框架
2. 入门程序
3. 非注解的处理器映射器和适配器
4. DispatcherSerlvet.properties
5. 注解的处理器映射器和适配器
 更多内容见SpringMVC框架学习笔记(二) 

5.3 在spring容器中加载Handler

 SpringMVC框架学习笔记(一)
1. springmvc框架
2. 入门程序
3. 非注解的处理器映射器和适配器
4. DispatcherSerlvet.properties
5. 注解的处理器映射器和适配器
 更多内容见SpringMVC框架学习笔记(二) 

5.4 部署调试

访问:http://http://localhost:8080/springmvc/queryItems.action

首次访问遇到如下错误,好像是版本的问题。

 SpringMVC框架学习笔记(一)
1. springmvc框架
2. 入门程序
3. 非注解的处理器映射器和适配器
4. DispatcherSerlvet.properties
5. 注解的处理器映射器和适配器
 更多内容见SpringMVC框架学习笔记(二) 

  今天晚上将近修改了三个小时,终于把问题解决了,还是由于各个软件的版本问题造成的,一个问题一个问题的排查,以及下载各种安装包,更新spring版本,加上网速有点慢,自己一个人能力也是有限,所以把问题解决了还是非常不错的,之前的版本:SpringMVC框架学习笔记(一)
1. springmvc框架
2. 入门程序
3. 非注解的处理器映射器和适配器
4. DispatcherSerlvet.properties
5. 注解的处理器映射器和适配器
 更多内容见SpringMVC框架学习笔记(二) 现在把spring3.2升级到了spring4.3.9,问题解决。

在这里,提醒一下大家,以后在写项目时,版本一定要统一对应好,要不然后面会出现各种麻烦,还非常棘手,今天的任务就是把前面的遗留的问题解决,后面的改天再继续。下面是修改后的效果:

 SpringMVC框架学习笔记(一)
1. springmvc框架
2. 入门程序
3. 非注解的处理器映射器和适配器
4. DispatcherSerlvet.properties
5. 注解的处理器映射器和适配器
 更多内容见SpringMVC框架学习笔记(二) 

 更多内容见SpringMVC框架学习笔记(二)