SpringMVC編程使用Controller接口實(shí)現(xiàn)控制器實(shí)例代碼
Controller簡(jiǎn)介
Controller控制器,是MVC中的部分C,為什么是部分呢?因?yàn)榇颂幍目刂破髦饕?fù)責(zé)功能處理部分:
1、收集、驗(yàn)證請(qǐng)求參數(shù)并綁定到命令對(duì)象;
2、將命令對(duì)象交給業(yè)務(wù)對(duì)象,由業(yè)務(wù)對(duì)象處理并返回模型數(shù)據(jù);
3、返回ModelAndView(Model部分是業(yè)務(wù)對(duì)象返回的模型數(shù)據(jù),視圖部分為邏輯視圖名)。
DispatcherServlet,主要負(fù)責(zé)整體的控制流程的調(diào)度部分:
1、負(fù)責(zé)將請(qǐng)求委托給控制器進(jìn)行處理;
2、根據(jù)控制器返回的邏輯視圖名選擇具體的視圖進(jìn)行渲染(并把模型數(shù)據(jù)傳入)。
因此MVC中完整的C(包含控制邏輯+功能處理)由(DispatcherServlet+Controller)組成。
因此此處的控制器是WebMVC中部分,也可以稱為頁(yè)面控制器、動(dòng)作、處理器。
之前用注解的方式實(shí)現(xiàn)了控制器,現(xiàn)在換了一種,通過(guò)實(shí)現(xiàn)了Controller接口的Controller類來(lái)實(shí)現(xiàn)處理請(qǐng)求的作用。
主要包括: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,默認(rèn)方式的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類,包括兩個(gè),一個(gè)用于打開(kāi)首頁(yè),一個(gè)用于處理用戶輸入并返回
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界面,包括兩個(gè),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>
好了,代碼部分已經(jīng)齊全了,啟動(dòng)server之后,輸入U(xiǎn)RL:http://localhost:8080/SpringSimple/product_input.action;就可以看到首頁(yè)了。
注:配置文件和Controller類返回的視圖中文件的位置必須要小心。。
總結(jié)
以上就是本文關(guān)于SpringMVC編程使用Controller接口實(shí)現(xiàn)控制器的全部?jī)?nèi)容,希望對(duì)大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站:
Spring SpringMVC在啟動(dòng)完成后執(zhí)行方法源碼解析
SpringMVC使用MultipartFile 實(shí)現(xiàn)異步上傳方法介紹
如有不足之處,歡迎留言指出。
相關(guān)文章
java數(shù)據(jù)庫(kù)開(kāi)發(fā)之JDBC基礎(chǔ)使用方法及實(shí)例詳解
這篇文章主要介紹了java數(shù)據(jù)庫(kù)開(kāi)發(fā)之JDBC基礎(chǔ)知識(shí)詳解,需要的朋友可以參考下2020-02-02
Java多線程之scheduledThreadPool的方法解析
這篇文章主要介紹了Java多線程之scheduledThreadPool的方法解析,queue是DelayedWorkQueue,但通過(guò)后面的分析可以知道,最大線程數(shù)是不起作用的,最多會(huì)起核心線程數(shù)的數(shù)量,需要的朋友可以參考下2023-12-12
java 遞歸查詢所有子節(jié)點(diǎn)id的方法實(shí)現(xiàn)
在多層次的數(shù)據(jù)結(jié)構(gòu)中,經(jīng)常需要查詢一個(gè)節(jié)點(diǎn)下的所有子節(jié)點(diǎn),本文主要介紹了java 遞歸查詢所有子節(jié)點(diǎn)id的方法實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下2024-03-03
springmvc九大組件之HandlerAdapter詳解
這篇文章主要介紹了springmvc九大組件之HandlerAdapter詳解,RequestMappingHandlerAdapter支持的handler的類型是HandlerMethod,而HandlerMethod是通過(guò)解析@RequestMapping注解獲得的,需要的朋友可以參考下2023-11-11
Java Socket實(shí)現(xiàn)單線程通信的方法示例
這篇文章主要介紹了Java Socket實(shí)現(xiàn)單線程通信的方法,結(jié)合具體實(shí)例形式分析了java socket單線程通信的原理與客戶端、服務(wù)器端相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2017-06-06
使用XSD校驗(yàn)Mybatis的SqlMapper配置文件的方法(1)
這篇文章以前面對(duì)SqlSessionFactoryBean的重構(gòu)為基礎(chǔ),簡(jiǎn)單的介紹了相關(guān)操作知識(shí),然后在給大家分享使用XSD校驗(yàn)Mybatis的SqlMapper配置文件的方法,感興趣的朋友參考下吧2016-11-11

