javascript
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結果如下:
與50位技術專家面對面20年技術見證,附贈技術全景圖
總結
以上是生活随笔為你收集整理的01基于配置文件方式的SpringMVC,三种HandlerMapping,三种控制器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 1000吨砂船油耗多少一公里?
- 下一篇: a起亚接通电源没点火,发动机故障灯会一直