springmvc 入门环境搭建

来源:互联网 发布:北京黑马程序员地址 编辑:程序博客网 时间:2024/06/05 06:28

springmvc框架

什么是springmvc

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

springmvc是一个基于mvc的web框架。

 


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...)

 

 

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

 

 

 

配置前端控制器

在web.xml中配置前端控制器要点击 org.springframework.web.servlet.DispatcherServlet添加spring-webmvc-3.2.0.RELEASE-sources.jar源码

<!--    前端控制器 -->

 <servlet>

    <servlet-name>springmvc</servlet-name>  

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

     <!--contextConfigLocation 配置springMVC加载的配置文件配置文件重要配置映射器,适配器 -->

    <!-- 如果不配置 contextConfigLocation,默认加载/WEB-INF/SERVLER-SERVLET.XML(SPRINGMVC.XMl)-->

    <init-param>

         <param-name>contextConfigLocation</param-name>

         <param-value>classpath:springmvc.xml</param-value>

    </init-param>

</servlet>

<servlet-mapping>

   <servlet-name>springmvc</servlet-name>

   <!--

    第一种 *.action访问以.action结尾由DispathcherServlet进行解析

    第二种 /所有访问的地址都有DispathcherSerclet进行解析,对于静态的文件需要配置不让DispathcherSerclet进行解析

    是有此种方式可以实现RESful的风格url

    第三种 /*这样配置不对,使用这种配置,最终需要转发给一个jsp页面是仍然会有DispathcherSerclet解析jsp地址,不能根据jsp找到handle

    -->

    <url-pattern>*.action</url-pattern>

配置处理器适配器

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

    <!-- 处理器适配器所有处理器适配器都实现 HandlerAdapter接口 -->

    <bean

        class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>

    <!-- 另一个非注解的适配器 -->

    <beanclass="org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter"/>

    <!--注解适配器 -->

    <beanclass="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/>

 

开发Handler

在非注解适配器中,对于不同的适配器,controller 需要实现不同的接口。

采用注解适配器,则需要注解。

1 org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter

public classItemsController1 implements Controller{

    public ModelAndViewhandleRequest(HttpServletRequest request,

            HttpServletResponseresponse) throwsException {

        // TODO Auto-generated method stub

        // 调用service查找数据库,查询商品列表,使用静态数据模,填充数据

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

                Itemsitems_1 = newItems();

                items_1.setName("联想笔记本");

                items_1.setPrice(6000f);

                items_1.setDetail("ThinkPad T430联想笔记本电脑!");

                Itemsitems_2 = newItems();

                items_2.setName("苹果手机6");

                items_2.setPrice(5000f);

                items_2.setDetail("iphone6苹果手机!");

                itemsList.add(items_1);

                itemsList.add(items_2);

 

//返回ModelAndView

        ModelAndViewmodelAndView=newModelAndView();

        //相当于requesrsetAttribut,在jsp页面中通过itemsList来取得数据

        modelAndView.addObject("itemsList",itemsList);

        //指定视图

        modelAndView.setViewName("/WEB-INF/jsp/items/itemsList.jsp");

        return modelAndView;

}

}

2    "org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter

public classItemsController2 implements HttpRequestHandler{

        public voidhandleRequest(HttpServletRequest request,

                HttpServletResponseresponse) throwsServletException, IOException {

           

            // 调用service查找数据库,查询商品列表,使用静态数据模  

//设置模型数据

            request.setAttribute("itemsList",itemsList);

            //设置转发的视图

            request.getRequestDispatcher("/WEB-INF/jsp/items/itemsList.jsp").forward(request, response);

           

            //使用此方法可以通过修改response,设置响应的数据格式,比如响应json数据

    /*

            response.setCharacterEncoding("utf-8");

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

            response.getWriter().write("json");*/

        }

}

3 注解开发 org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter

 

//使用controller标识它是一个控制器

@Controller

public classItemsController3  {

    //商品查询

    //一般建议方法名和url写成一样,方便维护

    //@RequestMapping实现queryItems方法和url进行映射一个方法对应一个url

    @RequestMapping("/queryItems")

    public ModelAndViewqueryItems()throwsException{

         //调用service查找数据库,查询商品列表,使用静态数据模

//返回ModelAndView

                ModelAndViewmodelAndView=newModelAndView();

//相当于requesrsetAttribut,在jsp页面中通过itemsList来取得数据

                modelAndView.addObject("itemsList",itemsList);

                //指定视图

                //下边的路径在试图解析器中配置前缀和后缀

                modelAndView.setViewName("items/itemsList");

                //modelAndView.setViewName("/WEB-INF/jsp/items/itemsList.jsp");

                return modelAndView;

}

//定义其他方法例如商品添加

}

视图编写

编写jsp界面

配置Handler

<!-- 配置Handler -->

    <beanid="itemsController1"name="/queryItems_test.action"class="cn.hpu.ssm.controller.ItemsController1"/>

    <!-- 配置另外一个Handler -->

    <beanid="itemsController2"class="cn.hpu.ssm.controller.ItemsController2"/>

   

    <!-- 对于注解的Handler可以单个配置

    实际开发中建议使用组件扫描

     -->

    <!-- <beanclass="cn.itcast.ssm.controller.ItemsController3" /> -->

    <!-- 可以扫描controllerservice...

    这里让扫描controller,指定controller的包

     -->

    <context:component-scanbase-package="cn.hpu.ssm.controller"></context:component-scan>

 

配置处理器映射器

<!-- 处理器映射器beanname作为url进行查找,需要在配置Handler时指定beanname(就是url

    所有的映射器都实现 HandlerMapping接口。

    -->

<!—非注解映射器 -->

    <bean

        class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>

       

    <!--非注解映射器简单url映射  -->

    <beanclass="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">

        <propertyname="mappings">

            <props>

                <!-- itemsController1进行url映射,url/queryItems1.action-->

                <propkey="/queryItems1.action">itemsController1</prop>

                <propkey="/queryItems2.action">itemsController1</prop>

                <propkey="/queryItems3.action">itemsController2</prop>

            </props>

        </property>

    </bean>

   

    <!--注解映射器 -->

   <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/>

 

<!-- 使用 mvc:annotation-driven代替上边注解映射器和注解适配器配置

    mvc:annotation-driven默认加载很多的参数绑定方法,

    比如json转换解析器就默认加载了,如果使用mvc:annotation-driven不用配置上边的RequestMappingHandlerMappingRequestMappingHandlerAdapter

    实际开发时使用mvc:annotation-driven

     -->

    <!--<mvc:annotation-driven></mvc:annotation-driven> -->

配置视图解析器

<!-- 视图解析器

    解析jsp解析,默认使用jstl标签,classpath下的得有jstl的包

     -->

    <bean

        class="org.springframework.web.servlet.view.InternalResourceViewResolver">

        <!-- 配置jsp路径的前缀 -->

        <propertyname="prefix"value="/WEB-INF/jsp/"/>

        <!-- 配置jsp路径的后缀 -->

        <propertyname="suffix"value=".jsp"/>

    </bean>

部署调试

 

0 0
原创粉丝点击