首页 > 代码库 > 04springMVC结构,mvc模式,spring-mvc流程,spring-mvc的第一个例子,三种handlerMapping,几种控制器,springmvc基于注解的开发,文件上传,拦截器,s

04springMVC结构,mvc模式,spring-mvc流程,spring-mvc的第一个例子,三种handlerMapping,几种控制器,springmvc基于注解的开发,文件上传,拦截器,s



1.Spring-mvc介绍

1.1市面上流行的框架

  • Struts2(比较多)

  • Springmvc(比较多而且属于上升的趋势)

  • Struts1(即将被淘汰)

  • 其他

1.2  spring-mvc结构

  1.  DispatcherServlet:中央控制器,把请求给转发到具体的控制类

  1. Controller:具体处理请求的控制器(配置文件方式需要配置,注解方式不用配置)

  2. handlerMapping:映射处理器,负责映射中央处理器转发给controller时的映射策略

  3. ModelAndView:服务层返回的数据和视图层的封装类(无论是配置文件还是注解都不需要配置)

  4. ViewResolver  & View:视图解析器,解析具体的视图

  5. Interceptors :拦截器,负责拦截我们定义的请求然后做处理工作(无论是配置文件方式还是注解都需要先创建再配置)

    红色的是需要自己创建,黑色的需要配置。

技术分享

1.4spring-mvc流程

技术分享 

2.spring-mvc的第一个例子

1.创建一个web工程

2.导入依赖包

技术分享

3.创建springmvc的配置文件

  • 配置中央控制技术分享

创建springmvc的核心配置文件

文件的命名规则:中央控制器(servlet的名称)的名称+-servlet.xml

默认位置:WEB-INF

配置:controller和视图解析器

技术分享

4.创建controller

技术分享

3 .三种handlerMapping

1. BeanNameUrlHandlerMapping (默认)

<!--按着controllername来映射寻找controller,默认存在 -->             

  <beanclass="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"></bean>

2.SimpleUrlHandlerMapping

<!--使用简单url来映射 -->

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

     <propertyname="mappings">

       <props>

          <propkey="/hello1.do">myController</prop>

       </props>

     </property>

  </bean>

3.ControllerClassNameHandlerMapping

<!--控制类的类名控制器,访问时类名首字母需要小写 -->

  <beanclass="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping"></bean>

4.几种控制器

  1. ParameterizableViewController(参数控制器)

     

<beanname="/toIndex.do"class="org.springframework.web.servlet.mvc.ParameterizableViewController">

     <!--配置你所要跳转到视图的名称 -->

     <propertyname="viewName"value="index"></property>

</bean>

  1.  AbstractCommandController(命令控制器)

技术分享 

技术分享

  1.  FormController(表单控制器)
  1. 只支持post请求方式

  2. 表单控制器有简单的验证功能

  3. 如果提交失败返回表单页面,如果提交成功就跳转到成功页面

  4. 有收集表单数据的功能技术分享技术分享

  5. 日期类型转换

  6. 技术分享

5 springmvc基于注解的开发

5.1注解第一个例子

  1. 创建web项目

  2. springmvc的配置文件中指定注解驱动,配置扫描器

  3. 技术分享

  4. @controller:标识当前类是控制层的一个具体的实现

  5. @requestMapping:放在方法上面用来指定某个方法的路径,当它放在类上的时候相当于命名空间需要组合方法上的requestmapping来访问。

5.2注解方式参数

1.在方法中可以自己随意去定义方法的参数,如果方法的参数的名称与传入参数的name匹配就会自动接收,别且转换我们所定义的数据类型。如果参数列表里定义了自定义的类springmvc会给我们把匹配的参数手机起来并且组装成对象。

2. requestMapping里面的method的类型必须要与前台form的类型一致

3.重定向:

技术分享

6.文件上传

  1. 引入jar

  2. 技术分享

  3. 配置视图解析器

  1. 技术分享写上传逻辑

 

/**

   * model层的处理使用map

   * desc

   * author:任亮

   * mail:renliangjava@163.com

   * qq群:2636378537

   * @throws Exception

   */

@RequestMapping(value=http://www.mamicode.com/"/personForUpload.do",method=RequestMethod.POST)

  public String personForUpload(HttpServletRequest request,Person person, Map<String,Object> map) throws Exception{

     //第一步转化request

     MultipartHttpServletRequest mr = (MultipartHttpServletRequest)request;

     //获得上传的文件mr.getFile(String fileName),fileName<input type="file" name="pic"><br>pic

     CommonsMultipartFile cf = (CommonsMultipartFile) mr.getFile("pic");

     byte[] fb =cf.getBytes();

     String fileName = "";

     //设置时间戳格式

     SimpleDateFormat af = new SimpleDateFormat("yyyyMMddhhmmssSSS");

     //获得时间戳的字符串

     fileName = af.format(new Date());

     //加三位随机数

     Random random = new Random();

     for(int i = 0; i < 3; i++){

       fileName = fileName + random.nextInt(10);

     }

     String path =request.getSession().getServletContext().getRealPath("/");

     OutputStream out = new FileOutputStream(path+"/img/"+fileName+".jpg");

     out.write(fb);

     out.flush();

     out.close();

     map.put("person", person);

     return"success";

}

7.拦截器

 技术分享

技术分享

技术分享

8.Ssm整合

参见代码

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

  <web-appxmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

     xmlns="http://java.sun.com/xml/ns/javaee"xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"

     xsi:schemaLocation="http://java.sun.com/xml/ns/javaeehttp://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"

     id="WebApp_ID"version="2.5">

 

  <!--springmvc中央的转发器 -->

  <servlet>

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

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

     <init-param>

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

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

     </init-param>

  </servlet>

  <servlet-mapping>

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

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

  </servlet-mapping>

  

  <listener>

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

  </listener>

  <context-param>

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

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

  </context-param>

</web-app>

 

 

 

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

<beansxmlns="http://www.springframework.org/schema/beans"

  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

  xmlns:mvc="http://www.springframework.org/schema/mvc"

  xmlns:context="http://www.springframework.org/schema/context"

  xmlns:aop="http://www.springframework.org/schema/aop"

  xmlns:tx="http://www.springframework.org/schema/tx"

  xsi:schemaLocation="http://www.springframework.org/schema/beans

                http://www.springframework.org/schema/beans/spring-beans.xsd

                http://www.springframework.org/schema/mvc

                http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd

                http://www.springframework.org/schema/context

                http://www.springframework.org/schema/context/spring-context-3.0.xsd

                http://www.springframework.org/schema/aop

                http://www.springframework.org/schema/aop/spring-aop-3.0.xsd

                http://www.springframework.org/schema/tx

                http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">

     <!--注解扫描器 -->

     <context:component-scanbase-package="cn.itcast"/>

  

     <beanid="dataSource"class="org.springframework.jdbc.datasource.DriverManagerDataSource">

       <propertyname="driverClassName"value="com.mysql.jdbc.Driver"></property>

       <propertyname="url"value="jdbc:mysql://127.0.0.1:3306/springmvc"></property>

       <propertyname="username"value="root"></property>

       <propertyname="password"value="root"></property>

     </bean>

     

     <beanid="sessionFactory"class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">

       <propertyname="dataSource"ref="dataSource"></property>

       <propertyname="mappingDirectoryLocations">

          <value>classpath:cn/itcast/hbm</value>

       </property>

       <propertyname="hibernateProperties">

          <props>

             <propkey="hibernate.Dialect">org.hibernate.dialect.MySQL5Dialect</prop>

             <propkey="hibernate.show_sql">true</prop>

             <propkey="hibernate.hbm2ddl">update</prop>

          </props>

       </property>

     </bean>

     

     <beanid="txManager"class="org.springframework.orm.hibernate3.HibernateTransactionManager">

       <propertyname="sessionFactory"ref="sessionFactory"></property>

     </bean>

     

     <tx:adviceid="txAdvice"transaction-manager="txManager">

       <tx:attributes>

          <tx:methodname="save*"propagation="REQUIRED"/>

          <tx:methodname="update*"propagation="REQUIRED"/>

          <tx:methodname="get*"propagation="NEVER"read-only="true"/>

       </tx:attributes>

     </tx:advice>

     

     <aop:config>

       <aop:advisoradvice-ref="txAdvice"pointcut="execution(* cn.itcast.service..*.*(..))"/>

     </aop:config>

</beans>

 

04springMVC结构,mvc模式,spring-mvc流程,spring-mvc的第一个例子,三种handlerMapping,几种控制器,springmvc基于注解的开发,文件上传,拦截器,s