01基于配置文件方式的SpringMVC,三种HandlerMapping,三种控制器



1
 添加Spring MVC所需的jar包.


创建一个以下项目结构的springmvc项目


web.xml的配置如下:


<?xml
version="1.0"
encoding="UTF-8"?>

<web-app
version="3.0"

xmlns="http://java.sun.com/xml/ns/javaee"

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

xsi:schemaLocation="http://java.sun.com/xml/ns/javaee

   
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
>

<servlet>

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

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

</servlet>

<servlet-mapping>

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

<!--
structs用/*,springmvc不能是/*类型,要是*.xxx类型
-->

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

</servlet-mapping>

</web-app>


springmvc-servlet.xml的配置,这里的springmvc-servlet.xml名字默认是web.xml文件中的“映射名称”+“-”+“servlet”+”.xml”文件。


<?xml
version="1.0"
encoding="UTF-8"?>

<beans
xmlns="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-3.0.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 "
>

<!--

如果不配置映射处理器会采用默认的映射处理器BeanNameHandlerMapping

下面可以通过:http://localhost:8080/springmvc/hello.do来访问

-->

<bean
id="testController"
name="/hello.do"
class="com.rl.controller.TestController"
/>

<!--
定义视图解析器 -->

<bean

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

<property
name="prefix"
value="/WEB-INF/jsp/"></property>

<property
name="suffix"
value=".jsp"></property>

</bean>

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

<property
name="mappings">

<props>

<!--
通过:http://localhost:8080/springmvc/hello1.do可以访问
-->

<prop
key="/hello1.do">testController</prop>

<!--
通过:http://localhost:8080/springmvc/toIndexBean.do可以访问
-->

<prop
key="/toIndexBean.do">toIndexBean</prop>

</props>

</property>

</bean>

<bean

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

<!--
使用Controller的类名的首字符小写加.do
-->

<bean

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

<bean
id="toIndexBean"
name="/toIndex.do"

class="org.springframework.web.servlet.mvc.ParameterizableViewController">

<!--
也需要使用视图解析器来解析 -->

<property
name="viewName"
value="jsp1/index"></property>

</bean>

<!--
通过:http://localhost:8080/springmvc/toIndex1.do访问
-->

<bean
name="/toIndex1.do"

class="org.springframework.web.servlet.mvc.ParameterizableViewController">

<!--

也需要使用视图解析器来解析,下面的实际访问的是地址是:

上面的prefix +
下面的value +
上面的suffix

-->

<property
name="viewName"
value="jsp1/index"></property>

</bean>

<!--

访问方式是:http://localhost:8080/springmvc/comm.do?id=2&name=toto&XXXXX=方式

在控制台可以看到输出结果

-->

<bean
name="/comm.do"
class="com.rl.controller.CommController">

<!--
指定Controller中的object类型的参数上的数据类型
-->

<property
name="commandClass"
value="com.rl.model.Person"></property>

</bean>

<!--

这种可以做简单的类型转换,如果数据类型不一致,它会返回到页面中

访问路径是:http://localhost:8080/springmvc/form.do-->

<bean
name="/form.do"
class="com.rl.controller.FormController">

<!--
指定Controller中Object类型的参数上的数据类型
-->

<property
name="commandClass"
value="com.rl.model.Person"></property>

<property
name="formView"
value="form"></property>

<property
name="successView"
value="success"></property>

</bean>

</beans>

5
 TestController的代码如下:


package com.rl.controller;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.ModelAndView;

import org.springframework.web.servlet.mvc.AbstractController;

/**

* @brief TestController.java springmvc中Controller层

* @attention

* @author toto

* @date 2014-12-28

* @note begin modify by
涂作权

*/

public class TestController extends AbstractController {

@Override

protected ModelAndView handleRequestInternal(HttpServletRequest arg0,

HttpServletResponse arg1) throws Exception {

System.out.println("hello springmvc");

//视图解析器在解析ModelAndView的时候会自动追加前缀和后缀,

//如果视图解析器的前缀下依然有目录结构,在ModelAndView中

//来指定前缀和后缀直接的一段路径

return new ModelAndView("jsp1/index");

}

}

浏览器访问地址:http://localhost:8080/springmvc/hello.do结果如下:

浏览器访问地址:http://localhost:8080/springmvc/hello1.do结果如下:

浏览器访问地址:http://localhost:8080/springmvc/toIndexBean.do结果如下:


Person的javaBean代码如下:


package com.rl.model;

import java.sql.Date;

/**

*
@brief Person.java person对应的JavaBean

*
@attention

*
@author
toto-pc

*
@date 2014-12-28

*
@note begin modify by
涂作权

*/

public
class Person {

Integer id;

String name;

Integer age;

String address;

/**

* 修改所有同名的变量Shift +
Alt + R

*/

Date birthday;

/**

* @return the id

*/

public Integer getId() {

return
id;

}

/**

* @param id the id to set

*/

public
void setId(Integer id) {

this.id
= id;

}

/**

* @return the name

*/

public String getName() {

return
name;

}

/**

* @param name the name to set

*/

public
void setName(String name) {

this.name
= name;

}

/**

* @return the age

*/

public Integer getAge() {

return
age;

}

/**

* @param age the age to set

*/

public
void setAge(Integer age) {

this.age
= age;

}

/**

* @return the address

*/

public String getAddress() {

return
address;

}

/**

* @param address the address to set

*/

public
void setAddress(String address) {

this.address
= address;

}

/**

* @return the birthday

*/

public Date getBirthday() {

return
birthday;

}

/**

* @param birthday the birthday to set

*/

public
void setBirthday(Date birthday) {

this.birthday
= birthday;

}

}


CommController的代码如下:


package com.rl.controller;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import org.springframework.validation.BindException;

import org.springframework.web.servlet.ModelAndView;

import org.springframework.web.servlet.mvc.AbstractCommandController;

import com.rl.model.Person;

/**

* @brief CommController.java

* @attention

* @author toto

* @date 2014-12-28

* @note begin modify by
涂作权

*/

@SuppressWarnings("deprecation")

public class CommController extends AbstractCommandController {

/**

* Object的参数用来接受实体参数,Person中的属性的接收传

* 递参数的名字一定要和Person中的set方法后名的字符串匹配,

* 大小写不区分

*/

@Override

protected ModelAndView handle(HttpServletRequest arg0,

HttpServletResponse arg1, Object obj, BindException arg3)

throws Exception {

Person p = (Person) obj;

System.out.println("id:" + p.getId() + " name:" + p.getName());

return new ModelAndView("index");

}

}

浏览器中的地址:http://localhost:8080/springmvc/comm.do?id=2&name=toto结果如下:

控制台中的内容如下:


FormController的代码如下:


package com.rl.controller;

import java.sql.Date;

import java.text.SimpleDateFormat;

import javax.servlet.http.HttpServletRequest;

import org.springframework.beans.propertyeditors.CustomDateEditor;

import org.springframework.web.bind.ServletRequestDataBinder;

import org.springframework.web.servlet.mvc.SimpleFormController;

@SuppressWarnings("deprecation")

public class FormController extends SimpleFormController {

@Override

protected void doSubmitAction(Object command) throws Exception {

System.out.println(command);

}

/**

* 注册时间类型的属性转换器

*/

@Override

protected void initBinder(HttpServletRequest request,

ServletRequestDataBinder binder) throws Exception {

binder.registerCustomEditor(Date.class,

new CustomDateEditor(new SimpleDateFormat("yyyy-MM-dd"), true));

}

}

浏览器中的地址:http://localhost:8080/springmvc/form.do结果如下:

时间: 2024-08-02 06:48:47

01基于配置文件方式的SpringMVC,三种HandlerMapping,三种控制器的相关文章

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

 1. Spring-mvc介绍 1.1市面上流行的框架 Struts2(比较多) Springmvc(比较多而且属于上升的趋势) Struts1(即将被淘汰) 其他 1.2  spring-mvc结构 DispatcherServlet:中央控制器,把请求给转发到具体的控制类 Controller:具体处理请求的控制器(配置文件方式需要配置,注解方式不用配置) handlerMapping:映射处理器,负责映射中央处理器转发给controller时的映射策略 ModelAndView:服务

SpringMVC详解(三)------基于注解的入门实例

前两篇博客我们讲解了基于XML 的入门实例,以及SpringMVC运行的详细流程.但是我们发现基于 XML 的配置还是比较麻烦的,而且,每个 Handler 类只能有一个方法,在实际开发中肯定是不可能这样来进行开发的.那么这篇博客我们就讲解实际开发中用的最多的基于注解配置的SpringMVC配置. 本篇博客源码下载 项目结构为: 1.在 web.xml 文件中配置前端处理器 <?xml version="1.0" encoding="UTF-8"?> &

apache两种方案三种方式实现反向代理tomcat

目录 1.概述 2.方案一:以proxy_module方式反向代理 3.方案二:以mod_jk方式反向代理 4.总结 1.概述 在前一博客(http://zhaochj.blog.51cto.com/368705/1639740)中实现了tomcat的在standalone模式下的部署,这样tomcat就身兼职两职,一方向要对http的请求作出响应,又要处理JSP程序,而处理http请求不是tomcat的强项,所以这样的请求就交给httpd.nginx这样的的专业处理http请求的套件来处理,而

Win10 IoT C#开发 2 - 创建基于XAML的UI程序 及 应用的三种部署方法

原文:Win10 IoT C#开发 2 - 创建基于XAML的UI程序 及 应用的三种部署方法 Windows 10 IoT Core 是微软针对物联网市场的一个重要产品,与以往的Windows版本不同,是为物联网设备专门设计的,硬件也不仅仅限于x86架构,同时可以在ARM架构上运行. 上一章我们讲了Raspberry安装Win10 IoT系统及搭建Visual Studio 2015开发环境的方法(http://www.cnblogs.com/cloudtech/p/5562120.html)

Spring框架笔记(二十三)——基于配置文件的方式来配置 AOP

配置实现IOC功能时,我们采用了配置文件xml和注解两类方式实现.实现AOP功能时我们也可以使用两种方式.前面我们介绍了AOP基于注解的实现方式,本文我将采用基于配置文件的方式完成从原始对象bean.切面bean.切点及通知配置的方法. 用基于 XML 的配置声明切面 除了使用 AspectJ 注解声明切面, Spring 也支持在 Bean 配置文件中声明切面. 这种声明是通过 aop schema 中的 XML 元素完成的. 正常情况下, 基于注解的声明要优先于基于 XML 的声明. 通过

springMVC系列之(三) spring+springMVC集成(annotation方式)

个人认为使用框架并不是很难,关键要理解其思想,这对于我们提高编程水平很有帮助.不过,如果用都不会,谈思想就变成纸上谈兵了!!!先技术,再思想.实践出真知. 1.基本概念 1.1.Spring Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One J2EE Development and Design中阐述的部分理念和原型衍生而来.它是为了解决企业应用开发的复杂性而创建的.Spring使用

oracle数据的导入导出(两种方法三种方式)

大概了解数据库中数据的导入导出.在oracle中,导入导出数据的方法有两种,一种是使用cmd命令行的形式导入导出数据,另一种是使用PL/SQL工具导入导出数据. 1,使用cmd命令行导入导出数据 1.1整库导出 整库导出:exp 管理员账号/密码 full=y;//参数full表示整库导出.导出后会在当前目录下生成一个EXPDAT.DMP的文件,此文件为备份文件.如果想导出数据到指定位置,并且取个名字,需要添加file参数.例如:exp system/123456 file= C:\person

SpringJUnit4加载类目录下(src)和WEF-INF目录下的配置文件二--获取注入的bean的二种方式

前言: spring容器以xml的形式注入bean,然后可以在类中获取,获取的形式主要有二种:第一种最简单--采用@Resource 或@Autowired关键字在加载spring文件时将bean注入到相应的类中:第二种方式是先用FileSystemXmlApplicationContext.ClassPathXmlApplicationContext 实例化ApplicationContext(Spring容器),然后调用其getBean方法获取. 下面直接代码说明: 注意:是在springJ

SpringMVC深度探险(三) —— DispatcherServlet与初始化主线

本文是专栏文章(SpringMVC深度探险)系列的文章之一,博客地址为:http://downpour.iteye.com/blog/1341459. 在上一篇文章中,我们给出了构成SpringMVC应用程序的三要素以及三要素的设计过程.让我们来归纳一下整个设计过程中的一些要点: SpringMVC将Http处理流程抽象为一个又一个处理单元 SpringMVC定义了一系列组件(接口)与所有的处理单元对应起来 SpringMVC由DispatcherServlet贯穿始终,并将所有的组件串联起来