01基于配置文件方式的SpringMVC,三种HandlerMapping,三种控制器
1 添加Spring MVC所需的jar包.
2 创建一个以下项目结构的springmvc项目
3 web.xml的配置如下:
<?xmlversion="1.0"encoding="UTF-8"?> <web-appversion="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> |
4 springmvc-servlet.xml的配置,这里的springmvc-servlet.xml名字默认是web.xml文件中的“映射名称”+“-”+“servlet”+”.xml”文件。
<?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-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来访问 --> <beanid="testController"name="/hello.do"class="com.rl.controller.TestController"/> <!--定义视图解析器 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <propertyname="prefix"value="/WEB-INF/jsp/"></property> <propertyname="suffix"value=".jsp"></property> </bean> <beanclass="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> <propertyname="mappings"> <props> <!--通过:http://localhost:8080/springmvc/hello1.do可以访问 --> <propkey="/hello1.do">testController</prop> <!--通过:http://localhost:8080/springmvc/toIndexBean.do可以访问 --> <propkey="/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> <beanid="toIndexBean"name="/toIndex.do" class="org.springframework.web.servlet.mvc.ParameterizableViewController"> <!--也需要使用视图解析器来解析 --> <propertyname="viewName"value="jsp1/index"></property> </bean> <!--通过:http://localhost:8080/springmvc/toIndex1.do访问 --> <beanname="/toIndex1.do" class="org.springframework.web.servlet.mvc.ParameterizableViewController"> <!-- 也需要使用视图解析器来解析,下面的实际访问的是地址是: 上面的prefix +下面的value +上面的suffix --> <propertyname="viewName"value="jsp1/index"></property> </bean> <!-- 访问方式是:http://localhost:8080/springmvc/comm.do?id=2&name=toto&XXXXX=方式 在控制台可以看到输出结果 --> <beanname="/comm.do"class="com.rl.controller.CommController"> <!--指定Controller中的object类型的参数上的数据类型 --> <propertyname="commandClass"value="com.rl.model.Person"></property> </bean> <!-- 这种可以做简单的类型转换,如果数据类型不一致,它会返回到页面中 访问路径是:http://localhost:8080/springmvc/form.do--> <beanname="/form.do"class="com.rl.controller.FormController"> <!--指定Controller中Object类型的参数上的数据类型 --> <propertyname="commandClass"value="com.rl.model.Person"></property> <propertyname="formView"value="form"></property> <propertyname="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结果如下:
6 Person的javaBean代码如下:
package com.rl.model; import java.sql.Date; /** *@brief Person.java person对应的JavaBean *@attention *@authortoto-pc *@date 2014-12-28 *@note begin modify by涂作权 */ publicclass Person { Integer id; String name; Integer age; String address; /** * 修改所有同名的变量Shift +Alt + R */ Date birthday; /** * @return the id */ public Integer getId() { returnid; } /** * @param id the id to set */ publicvoid setId(Integer id) { this.id = id; } /** * @return the name */ public String getName() { returnname; } /** * @param name the name to set */ publicvoid setName(String name) { this.name = name; } /** * @return the age */ public Integer getAge() { returnage; } /** * @param age the age to set */ publicvoid setAge(Integer age) { this.age = age; } /** * @return the address */ public String getAddress() { returnaddress; } /** * @param address the address to set */ publicvoid setAddress(String address) { this.address = address; } /** * @return the birthday */ public Date getBirthday() { returnbirthday; } /** * @param birthday the birthday to set */ publicvoid setBirthday(Date birthday) { this.birthday = birthday; } } |
7 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结果如下:
控制台中的内容如下:
8 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结果如下:
01基于配置文件方式的SpringMVC,三种HandlerMapping,三种控制器相关推荐
- 瀑布流第二种方式————基于ajax方式
第二种瀑布流是基于ajax方式工作的.与之前一种形式相比,这种方式可以向后台发送数据, 同时,ajax可以根据数据,每次只取一部分的数据,等滚轮划到底部时,再出发ajax,然后又去一次 models文 ...
- 04springMVC结构,mvc模式,spring-mvc流程,spring-mvc的第一个例子,三种handlerMapping,几种控制器,springmvc基于注解的开发,文件上传,拦截器,s
1. Spring-mvc介绍 1.1市面上流行的框架 Struts2(比较多) Springmvc(比较多而且属于上升的趋势) Struts1(即将被淘汰) 其他 1.2 spring-mv ...
- 基于Netty手工实现springMVC框架-----两种方式加载控制器
1.手写springMVC框架 本篇我们通过两种方式来加载控制器,一种是配置文件的方式:另外一种是通过注解的形式. 1.配置文件方式 1.自定义Controller配置文件XML 我定义的格式如下: ...
- 基于unet神经网络上采样中的的三种方式的理解
关于前言 随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容中的一个知识点-上采样. 一.基于unet神经网络上采样中的的三种方式的理解 ...
- Vue学习笔记(三)Vue2三种slot插槽的概念与运用 | ES6 对象的解构赋值 | 基于Vue2使用axios发送请求实现GitHub案例 | 浏览器跨域问题与解决
文章目录 一.参考资料 二.运行环境 三.Vue2插槽 3.1 默认插槽 3.2 具名插槽 3.3 作用域插槽 ES6解构赋值概念 & 作用域插槽的解构赋值 3.4 动态插槽名 四.GitHu ...
- SpringMVC 返回json的两种方式
前后台数据交互使用json是一种很重要的方式.本文主要探讨SpringMVC框架使用json传输的技术. 请注意,本文所提到的项目使用Spring 版本是4.1.7,其他版本在具体使用上可能有不一样的 ...
- 【SAP-PS笔记】结果分析方法01 基于收入的结果分析方式(Result Analysis Method)
前言 PS中工程项目等客户型项目一般都会采用结果分析的方式结算项目的收入成本,事实上SAP提供了多达17种的结果分析方法,对应不同的业务场景与业务需求,并且绝大部分的能够被PS所使用.本文主要介绍选择 ...
- SpringMVC获取参数的几种方式
SpringMVC获取参数的几种方式 前言: 年末了,忙了一年了却发现系统的整理的东西很少,一些基础的东西都未做整理,这里就将它随便整理一下,增加一些印象,当然在网上看到一些好的资料也会整理下来以备后 ...
- 【Spring】SpringMVC 作用域传值的 4 种方式
一.四大作用域复习 2.1 page 2.1.1 在当前页面不会重新实例化. 2.2 request 2.2.1 在一次请求中同一个对象,下次请求重新实例化一个request 对象. 2.3 sess ...
最新文章
- makefile:2: *** missing separator. Stop. make 之后出现的错误,解决方法
- WORD2007中无法插入CMG文件
- 企业网站如何具备亲和力?
- 【greenplum】 gp的安装
- 1061: [Noi2008]志愿者招募 - BZOJ
- mysql root命令_设置更改root密码、连接mysql、mysql常用命令
- 阿里预面:谈谈你对双亲委派机制的理解?这个名字有啥问题?如何打破?为啥双亲委派?...
- 《Photoshop混合模式深度剖析》目录—导读
- 使用HttpClient MultipartEntityBuilder 上传文件,并解决中文文件名乱码问题
- OD使用教程7(上)- 调试篇07|解密系列
- redis安装及使用
- Mac安装JDK1.8及环境变量配置
- java开根号函数_如何在Java中计算平方根和平方根?
- 遥感影像几何校正方法
- Python数据分析-房价的影响因素图解
- python 按比例缩小图片
- CentOS搭建tg的MTProxy代理
- 美团点评亮相台北国际创意节,诠释Food+全景生活营销新体验
- ipqc异常处理流程图_品质异常该怎么处理?照这个流程走!
- Day1-介绍、基本语法、流程控制
热门文章
- Python中使用代码将后缀名doc文件改为docx
- Python可视化中的Matplotlib(6.散点图以及详细参数、为图形添加文字、注释、箭头以及它们的参数)
- VTK:外部轮廓用法实战
- VTK:创建颜色系列用法实战
- JavaScript实现binarySearch二分查找算法(附完整源码)
- boost::mpl模块实现replace_if相关的测试程序
- boost::mp11::mp_reverse_fold_q相关用法的测试程序
- boost::kruskal_minimum_spanning_tree用法的测试程序
- Boost:矩阵转置的测试程序
- 基于Boost::beast模块的异步WebSocket客户端