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
1
2
3
4
5
6
7
8
9
10
11
12
|
<? 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配置。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
<? 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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
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信息并返回
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
<%@ 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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
<%@ 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接口實現控制器的全部內容,希望對大家有所幫助。如有不足之處,歡迎留言指出。
原文鏈接:http://blog.csdn.net/qq_28379809/article/details/76177343