spring-mvc入门

来源:互联网 发布:淘宝瑜伽服模特是谁 编辑:程序博客网 时间:2024/05/20 04:13

原始开发方式

步骤:

  1. 新建web project
  2. 创建jsp文件
  3. 需求
  4. 引入jar包

org.springframework.asm-3.1.0.RELEASE.jar

org.springframework.aop-3.1.0.RELEASE.jar

org.springframework.beans-3.1.0.RELEASE.jar

org.springframework.context-3.1.0.RELEASE.jar

org.springframework.context.support-3.1.0.RELEASE.jar

org.springframework.core-3.1.0.RELEASE.jar

org.springframework.expression-3.1.0.RELEASE.jar

org.springframework.web-3.1.0.RELEASE.jar

org.springframework.web.servlet-3.1.0.RELEASE.jarc

com.springsource.org.apache.commons.logging-1.1.1.jar

com.springsource.org.aopalliance-1.0.0.jar

com.springsource.javax.servlet.jsp.jstl-1.1.2.jar

com.springsource.org.apache.taglibs.standard-1.1.2.jar

  1. 配置分发器 DispatcherServlet

<!-- 配制spring分发器servlet -->

            <servlet>

                     <servlet-name>action</servlet-name>

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

            </servlet>

            <servlet-mapping>

                     <servlet-name>action</servlet-name>

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

            </servlet-mapping>

注:如果配置文件放到src下需要另行配置。并且更名为spring-mvc.xml

<servlet>

   <servlet-name>action</servlet-name>

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

   <init-param>

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

            <param-value>classpath:spring-mvc.xml</param-value>

   </init-param>

   <load-on-startup>1</load-on-startup>  在启动时加载

</servlet>

 

  1. 创建控制器类 HomeController

public class HomeControllerextends AbstractController {

            protectedModelAndView handleRequestInternal(HttpServletRequest arg0,

                               HttpServletResponsearg1) throws Exception {

                     System.out.println("helloworld");

                     //index为逻辑名

                     returnnew ModelAndView("index");

            }

   }

  1. 配置beans

创建spring配置文件./WEB-INF/action-servlet.xml

配置文件的名称命名规则为配置的DispatcherServlet的映射名称+-servlet”组成。

   <?xmlversion="1.0" encoding="UTF-8"?>

   <beansxmlns="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.0.xsd">

            <!--personService-->

            <beanid="ps"class="cn.itcast.springmvc.controller.PersonService" />

            <!--控制器 -->

            <beanname="/home.action" class="cn.itcast.springmvc.controller.HomeController">

                     <propertyname="ps" ref="ps" />

            </bean>

            <!--内部资源视图解析器 -->

                               <beanid="internalResourceViewResolver"class="org.springframework.web.servlet.view.InternalResourceViewResolver">

                     <!--前缀 -->

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

                     <!--后缀 -->

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

            </bean>

   </beans>

注:访问路径= 前缀 + 逻辑名 + 后缀 eg: /WEB-INF/jsps/index.jsp

  1. 发布、测试

         实际开发中,我们会后多个配置文件

<!-- 通过上下文参数指定分解的上下文配置文件 -->

    <context-param>

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

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

    </context-param>

    <!-- 配置上下文监听器ContextLoaderListener,可以完成在初始化的时候创建spring容器 -->

<listener>

<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>

</listener>

 

几种常见的mapping处理器映射


         

BeanNameUrlHandlerMapping(默认)

把你的url作为bean的名称,来找到bean,从而执行bean的方法

<!-- Bean名url处理器映射 -->

         <beanid="beanNameUrlHandlerMapping"class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping">

                   <!--  优先级 -->

                   <propertyname="order" value="0" />

         </bean>

<!-- 控制器 -->

<bean id="homeController" name="/hi.action"class="cn.itcast.springmvc.controller.HomeController"></bean>

优先级:多个映射的时候会通过优先级来决定先后顺序,优先级值越高会先被找。

 

SimpleUrlHandlerMapping

<!-- 简单url处理器映射 -->

<bean id="simpleUrlHandlerMapping"class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">

         <propertyname="mappings">  维护了map集合

                   <props>

                            <propkey="/home.action">homeController</prop> 指定控制器的id

                  </props>

         </property>

         <!--设置优先级 -->

         <propertyname="order" value="1" />

</bean>

<!-- 简单控制器 -->

<bean id="homeController"class="cn.itcast.springmvc.controller.HomeController">

         <propertyname="ps" ref="ps" />

</bean>

 

ControllerClassNameHandlerMapping

<!-- 控制器类名处理器映射 -->

<bean id="controllerClassNameHandlerMapping"

         class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping">

   <property name="order" value="2"/>

</bean>

规则:得到类名HomeControlller处理器类后,将Controller去掉,剩下的全部小写,作为url。如多个单词        也全小写

 

几种常见的controller控制器


/** * 简单控制器 */public class HomeController extends AbstractController {private PersonService ps ;//注入personServicepublic void setPs(PersonService ps) {this.ps = ps;}protected ModelAndView handleRequestInternal(HttpServletRequest arg0,HttpServletResponse arg1) throws Exception {List<Person> list= ps.findAllPersons();//ModelAndView可以传入三个参数(逻辑名,key,value)key与value相当于setAttrbut,供视图取值return new ModelAndView("index","personList",list);}}<!-- 简单控制器 --><bean id="homeController" class="cn.itcast.springmvc.controller.HomeController"><property name="ps" ref="ps" /></bean>/** *命令控制器,封装请求参数成命令对象 */public class MyCommandController extends AbstractCommandController {public MyCommandController(){//在构造函数中注册命令类this.setCommandClass(Person.class);//指定命令名称this.setCommandName("person");}protected ModelAndView handle(HttpServletRequest request,HttpServletResponse response, Object command, BindException errors)throws Exception {//将命令对象强转,将参数封装在 Command Object对象中 Person p = (Person) command ;System.out.println(p.getName());return new ModelAndView("index");}}<!-- 命令控制器 --><bean id="myCommandController" class="cn.itcast.springmvc.controller.MyCommandController"/>/** * 表单控制器 */public class MyFormController extends SimpleFormController {/** * 注册命令对象 */public MyFormController(){this.setCommandClass(Person.class);this.setCommandName("person");}protected void doSubmitAction(Object command) throws Exception {Person p = (Person) command ;System.out.println(p.toString());}}<!-- 表单控制器(处理表单提交) --><bean id="myFormController" class="cn.itcast.springmvc.controller.MyFormController"><!-- 表单视图   value为逻辑名--><property name="formView" value="personForm" /><!-- 成功视图 --><property name="successView" value="index" /></bean>详细:当方位myform.action的时候,是通过GET方式访问,这时候就会找到formView所对应的表单页面,  当用户填写完表单提交后,通过POST方式访问,这时候就会找到successView所对应的成功页面。/** * 向导表单控制器 */public class MyWizardFormController extends AbstractWizardFormController {public MyWizardFormController(){this.setCommandClass(Person.class);this.setCommandName("person");}/** * 处理完成 */protected ModelAndView processFinish(HttpServletRequest request,HttpServletResponse response, Object command, BindException errors)throws Exception {Person p = (Person) command ;System.out.println(p.toString());return new ModelAndView("index");}/** * 处理取消 */protected ModelAndView processCancel(HttpServletRequest request,HttpServletResponse response, Object command, BindException errors)throws Exception {return new ModelAndView("index");}}<!-- 向导表单控制器 --><bean id="myWizardFormController" class="cn.itcast.springmvc.controller.MyWizardFormController"><property name="pages"><list><value>wizard/1</value>  wizard文件夹下的1.jsp<value>wizard/2</value><value>wizard/3</value></list></property></bean>注:第一页为0,第二页为1.....   _target+页角标为跳转到哪一页,_cancel为取消,_finish为完成1.jsp<form action="mywizardform.action" method="post">id : <input type="text" name="id"><br><input type="submit" name="_target1" value="next"><input type="submit" name="_cancel" value="cancel"></form>2.jsp<form action="mywizardform.action" method="post">name : <input type="text" name="name"><br><input type="submit" name="_target0" value="back"><input type="submit" name="_target2" value="next"><input type="submit" name="_cancel" value="cancel"></form>3.jsp<form action="mywizardform.action" method="post">age : <input type="text" name="age"><br><input type="submit" name="_target1" value="back"><input type="submit" name="_cancel" value="cancel"><input type="submit" name="_finish" value="ok"></form>


     

原创粉丝点击