springnvc基本入门程序
因为是入门程序就不接数据库了,单纯的springmvc
springmvc介绍:springmvc是sping的一个模块,与springmvc整合无需通过中间层进行整合
springmvc属于mvc的设计模式
M:model模型 ,包括pojo、service、dao、action等
V:view 视图,供用户观赏的页面,不多说
C:control 控制,进行流程控制,所有的request请求都需经过C,可以说是mvc的核心
执行流程:request请求过来之后首先到Control层,control层则请求或者调用model层来处理用户的各种请求来返回数据,
自然的C调用返回的数据也是返回到C,C可以直接响应,但一般都是经过视图渲染到request域到V,在就是response响应
其次就是springmvc的几个核心组件及其作用,如下:
1、前端控制器:DispacherServlet 接受请求,返回结果,转发器
2、处理器映射器:HandlerMapping 根据请求url查来Handler
3、处理器适配器:HandlerAdapter 按照特定的规则去执行Handler
4、视图解析器:View resourver 根据逻辑视图来返回真的页面 (就是为jsp加前后缀)
5、view接口:实现类呢可以支持不同的View类型,这里只介绍jsp,但是要知道还有一些如freemaker、pdf等视图
基本上用到的也就这几个组件,下面开始正式写代码
如下:
1、新建项目考入所需的jar包,注意spring-webmvc一定要有,老规矩具体的jar就不贴图了
2、在WEB-INF下的web.xml中配置 springmvc的核心控制器DispacherServlet,位于上面的spring-webmvc的包中
当然映射也不能忘掉,他规定了要拦截那些请求去处理,具体的请看注释
<!-- springmvc前端控制器,所有的前台的请求都会在先进过前端控制器 由前端控制器分发到具体的处理类:如处理器映射器等 --> <servlet> <servlet-name>springmvc</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <!-- contextConfigLocation配置springmvc 加载配置文件:(处理器、映射器等) 如果不配置contextConfigLocation:默认加载的是/web- inf/servletName-servlet.xml 既: springmvc-servlet.xml --> <init-param > <param-name> contextConfigLocation</param-name > <param-value> classpath:spring/springmvc.xml</param-value > </init-param > <!-- 实例化这个servlet的时候被载入的顺序 等于0或者大于0的时候容器启动就加载这个servlet 若没有指定,则表示在这个servlet被选择时在会init,整数值越小则servlet加载的优先级就越高 --> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>springmvc</servlet-name> <!--第一种:*.action 访问以 .action结尾的有DispathcerServlet解析 第二种:/ 所有访问的地址都由DispathcerServlet解析,对于静态文件的解析需要配置不然Ds解析,使用这种方式可以实现restful风格url 第三中:/* 这种配置不对,使用的话,最终我们要转发到jsp页面时,这是仍然会有ds解析 jsp 不能根据jsp页面来找到handler 会报错 --> <url-pattern>*.action</url-pattern> </servlet-mapping>
3、然后就是springmvc几个核心的组件的配置了,配置好之后基本上springmvc基本框架就算完成了
首先新建一个sprngmvc.xml,名字随意,文件的位置有两种,以一种是系统默认加载位置在,只要你
将名字格式写成servletName-servlet.xml,并放在WEB-INF目录下,系统会自动的加载这个配置文件,
如果不是上面的规则,就需要用第2步的init-param去指定文件位置。我就按照自己的习惯,新建一个
与src平级的sourceFolder 用来存放配置文件,后期会有mybaits等整合配置文件都放在这里如图:
springmvc中主要是想让容器自动加载几个组件来让我们直接使用,如下:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd"> <!-- 处理器映射器:将bean的name作为 url进行查找,需要在配置 Handerl时指定 Bean的name就是 url --> <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping" /> <!-- 处理器适配器:所有的适配器都实现了HandlerAdapter,框架可以根据这个接口 来判断bean是否是适配器 --> <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter" /> <!-- 视图解析器 :解析 jsp视图 默认使用 jstl classpath 要有jstl的包--> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" /> </beans>
4、下面就该写Handler,大多数人习惯叫Controller,就是叫法不同,两者是等价的,非注解的controller
需要实现Controller接口:org.springframework.web.servlet.mvc.Controller;
public class ItemsController implements Controller{ @Override public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception { //调用service查询数据库,查询用户列表,这里不连接数据库,使用静态模拟 List<User> userList = new ArrayList<User>(); //向list中填充静态数据 User user1 = new User(); user1.setBrithday(new Date()); user1.setId(001); user1.setName("zs"); User user2 = new User(); user1.setBrithday(new Date()); user2.setId(002); user2.setName("ls"); userList.add(user1); userList.add(user2); //返回modelAndView ModelAndView modelAndView = new ModelAndView(); //相当于request的setAttribute modelAndView.addObject("userList" , userList ); //指定视图:写入我们jsp存放的路径 modelAndView.setViewName("/WEB-INF/jsp/userList.jsp" ); return modelAndView ; } }
5、controller完成之后记得要在springmvc.xml中配置才行(因为是非注解的,所有的需要创建的对象都需要注册)
<!-- 配置Handler:上面配置的处理器映射器就就根据这个bean的name来匹配我们所需的类,一个url 我们才能根据这个请求的url来找到我们方才所写的controller --> <bean name="/queryUser.action" class="cn.hh.controller.ItemsController" />
6、在WEB-INF下新建一个jsp的目录和userList.jsp的页面,用EL表达式将值放在request中的数据取出来展示即可
<body>
${userList }
</body>
最后翻入tomcat运行:得出
注意这个queryUser.action 就是我们在springmvc中配置的Handler的名字,还有其他的配置方法,这个是最直观
的,个人感觉容易理解
有问题请赐教,愿与君共勉