Controller简介
Controller控制器,是MVC中的部分C,为什么是部分呢?因为此处的控制器主要负责功能处理部分:
1、收集、验证请求参数并绑定到命令对象;
2、将命令对象交给业务对象,由业务对象处理并返回模型数据;
3、返回ModelAndView(Model部分是业务对象返回的模型数据,视图部分为逻辑视图名)。
DispatcherServlet,主要负责整体的控制流程的调度部分:
1、负责将请求委托给控制器进行处理;
2、根据控制器返回的逻辑视图名选择具体的视图进行渲染(并把模型数据传入)。
因此MVC中完整的C(包含控制逻辑+功能处理)由(DispatcherServlet+Controller)组成。
因此此处的控制器是WebMVC中部分,也可以称为页面控制器、动作、处理器。
之前用注解的方式实现了控制器,现在换了一种,通过实现了Controller接口的Controller类来实现处理请求的作用。
主要包括:XML配置文件,Java普通类,Javaform类,Controller类,和JSP界面
1.首先是XML配置文件,包括了web.xml和springmvc-servlet.xml。代码如下:
1)web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> <servlet> <servlet-name>springmvc</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>springmvc</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> </web-app>
2)springmvc-servlet,默认方式的DispatcherServlet配置。
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="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"> <bean name="/product_input.action" class="controller.InputProductController" /> <bean name="/product_save.action" class="controller.SaveProductController" /> <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/jsp/" /> <property name="suffix" value=".jsp" /> </bean> </beans>
2.Controller类,包括两个,一个用于打开首页,一个用于处理用户输入并返回
1)InputProductController.java
package controller; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.mvc.Controller; public class InputProductController implements Controller{ private static final Log logger = LogFactory.getLog(InputProductController.class); @Override public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception { logger.info("InputProductController called"); return new ModelAndView("ProductForm"); } }
2)SaveProductController.java,保存用户输入的Product信息并返回
package controller; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.mvc.Controller; import domain.Product; import form.ProductForm; public class SaveProductController implements Controller{ private static final Log logger = LogFactory.getLog(SaveProductController.class); @Override public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception { logger.info("SaveProductController called"); ProductForm productForm = new ProductForm(); //product action properties productForm.setName(request.getParameter("name")); productForm.setDescription(request.getParameter("description")); productForm.setPrice(request.getParameter("price")); //create model Product product = new Product(); product.setName(productForm.getName()); product.setDescription(productForm.getDescription()); try { product.setPrice( float.parsefloat(productForm.getPrice())); } catch(NumberFormatException e) { } //insert code to save Product System.out.println("返回视图"); return new ModelAndView("ProductDetails","product",product); } }
3.JSP界面,包括两个,ProductForm和ProductDetails
1)ProductForm.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <div id="global"> <form action="product_save.action" method="post"> <fieldset> <legend>Add a product</legend> <label for="name">Product Name: </label> <input type="text" id="name" name="name" value="" tabindex="1"> <label for="description">Description: </label> <input type="text" id="description" name="description" tabindex="2"> <label for="price">Price: </label> <input type="text" id="price" name="price" tabindex="3"> <div id="buttons"> <label for="dummy"></label> <input id="reset" type="reset" tabindex="4"> <input id="submit" type="submit" tabindex="5" value="Add Product"> </div> </fieldset> </form> </div> </body> </html>
2)ProductDetails.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <div id="global"> <h4>The product has been saved.</h4> <p> <h5>Details:</h5> Product Name: ${product.name} <br /> Description: ${product.description}<br /> Price: $${product.price} </p> </div> </body> </html>
好了,代码部分已经齐全了,启动server之后,输入URL:http://localhost:8080/SpringSimple/product_input.action;就可以看到首页了。
注:配置文件和Controller类返回的视图中文件的位置必须要小心。。
总结
以上就是本文关于SpringMVC编程使用Controller接口实现控制器的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站:
Springmvc Controller接口代码示例
Spring SpringMVC在启动完成后执行方法源码解析
SpringMVC使用MultipartFile 实现异步上传方法介绍
如有不足之处,欢迎留言指出。
本文向大家介绍Springmvc Controller接口代码示例,包括了Springmvc Controller接口代码示例的使用技巧和注意事项,需要的朋友参考一下 Spring MVC Controller控制器,是MVC中的部分C,为什么是部分呢?因为此处的控制器主要负责功能处理部分: 收集、验证请求参数并绑定到命令对象; 将命令对象交给业务对象,由业务对象处理并返回模型数据; 返回Mode
本文向大家介绍Java编程实现springMVC简单登录实例,包括了Java编程实现springMVC简单登录实例的使用技巧和注意事项,需要的朋友参考一下 Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。使用 Spring 可插入的 MVC 架构,从而在使用Spri
本文向大家介绍SpringMVC与Mybatis集合实现调用存储过程、事务控制实例,包括了SpringMVC与Mybatis集合实现调用存储过程、事务控制实例的使用技巧和注意事项,需要的朋友参考一下 在SSM框架中经常会用到调用数据库中的存储过程、以及事务控制,下面以保存某单据为例,介绍一下: 1、Oracle中存储过程代码如下(主要逻辑将单据编码自动加1,并将该单据编码返回): 2、Mybati
我有一个下面的RestController,我试图验证search()方法输入参数映射是否为空。然而,在单元测试期间,当RestController实现ServiceIF接口时,它不会被实例化。若我评论实现接口,那个么控制器被实例化,验证工作正常。我不明白为什么为实现某个接口的类注释@Validated不起作用。 我正在写一个下面的单元测试来验证空地图:
本文向大家介绍python实现控制COM口的示例,包括了python实现控制COM口的示例的使用技巧和注意事项,需要的朋友参考一下 使用RS232串口线或者是RS232转USB的这一类的接口,会需要com口作为接口来进行输入输出调式, 写了个脚本来控制COM口,用到了Python内建的serial库 代码如下: 以上这篇python实现控制COM口的示例就是小编分享给大家的全部内容了,希望能给大家
源代码请到附件中下载。 其他下载: 跟着开涛学SpringMVC 第一章源代码下载 第二章 Spring MVC入门 源代码下载 Controller接口控制器详解 源代码下载 源码下载——第四章 Controller接口控制器详解 源代码下载 第五章 处理器拦截器详解 目录:[ 第一章 Web MVC简介 —— 跟开涛学SpringMVC](/blog/1593441 "第一章 Web MVC简