首先看看非注解的項(xiàng)目結(jié)構(gòu)
在web.xml文件 配置springmvc 轉(zhuǎn)發(fā)調(diào)度servlet 和 Date 類(lèi)型參數(shù)的自動(dòng)轉(zhuǎn)型
編寫(xiě) spring 配置文件 配置 映射處理器 和 控制器 或者 攔截器
然后編寫(xiě) springmvc的控制器
http://localhost:8080/springmvc-1/hello.do 就可以訪問(wèn)了
采用注解類(lèi)配置springmvc
在web.xml中配置spring的中央控制器
同時(shí)也可以指定初始化參數(shù)? 設(shè)定 spring配置文件的路徑
編寫(xiě) springmvc-servlet.xml文件
編寫(xiě)控制器(類(lèi)似struts里面的action)
下面有
傳統(tǒng)的請(qǐng)求
有異步請(qǐng)求
文件上傳 (注意添加jar和配置 文件上傳 解析器)
重定向請(qǐng)求
多個(gè)控制器的相互引用
自定義攔截器
兩個(gè)參數(shù)實(shí)體類(lèi)
幾個(gè)jsp
form.jsp

在web.xml文件 配置springmvc 轉(zhuǎn)發(fā)調(diào)度servlet 和 Date 類(lèi)型參數(shù)的自動(dòng)轉(zhuǎn)型
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" 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_2_5.xsd"> <display-name></display-name> <!-- 中央控制器 --> <servlet> <servlet-name>springmvc</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>springmvc</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> </web-app>
編寫(xiě) spring 配置文件 配置 映射處理器 和 控制器 或者 攔截器
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans" 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.1.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.1.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.1.xsd"> <!-- 映射處理器之間是獨(dú)立的,相互不影響 --> <!-- 默認(rèn)的映射處理器 --> <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/> <!-- 簡(jiǎn)單URL的映射處理器 --> <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> <property name="mappings"> <props> <prop key="/hello2.do">testController</prop> </props> </property> </bean> <!-- 控制器類(lèi)名映射處理器 (注意:類(lèi)名首字母消息.例如:http://192.168.0.88/springmvc-1/testController.do) --> <bean class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping"/> <!--配置controller,handlerMapping,ViewResolver,interceptor --> <!--使用默認(rèn)的映射處理器來(lái)映射 controller --> <bean id="testController" class="cn.sh.springmvc.TestController" name="/hello.do"/> <!--視圖解析器--> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <!-- webroot到一指定文件夾文件路徑 --> <property name="prefix" value="/WEB-INF/jsp/"/> <!-- 視圖名稱(chēng)后綴 --> <property name="suffix" value=".jsp"/> </bean> </beans>
然后編寫(xiě) springmvc的控制器
package cn.sh.springmvc; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.mvc.AbstractController; public class TestController extends AbstractController { @Override protected ModelAndView handleRequestInternal(HttpServletRequest arg0, HttpServletResponse arg1) throws Exception { System.out.println("hello springmvc"); return new ModelAndView("homepage/index"); } }
http://localhost:8080/springmvc-1/hello.do 就可以訪問(wèn)了
采用注解類(lèi)配置springmvc

在web.xml中配置spring的中央控制器
同時(shí)也可以指定初始化參數(shù)? 設(shè)定 spring配置文件的路徑
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" 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_2_5.xsd"> <display-name></display-name> <!-- 中央控制器 --> <servlet> <servlet-name>springmvc</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <!-- 如果不把springmvc-serlvet.xml放在 web-inf 放在 src/config/下面的話(huà)就需要在這里指定配置文件的路徑--> <init-param> <param-name>contextConfigLoaction</param-name> <param-value>classpath:springmvc.xml</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>springmvc</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> </web-app>
編寫(xiě) springmvc-servlet.xml文件
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans" 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.1.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.1.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.1.xsd"> <!-- mvc的注解驅(qū)動(dòng) --> <mvc:annotation-driven/> <!-- 一旦有掃描器的定義mvc:annotation-driven可以不需要,掃描器已經(jīng)有了注解驅(qū)動(dòng)的功能 --> <context:component-scan base-package="cn.sh.springmvc"/> <!-- 視圖解析器 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <!-- webroot到一指定文件夾文件路徑 --> <property name="prefix" value="/WEB-INF/jsp/"/> <!-- 視圖名稱(chēng)后綴 --> <property name="suffix" value=".jsp"/> </bean> <!-- 文件上傳 解析器 id:必須是這個(gè)--> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <!-- 文件上傳 最大值,以 bit為單位 --> <property name="maxUploadSize" value="1024000"></property> </bean> <!-- 指定一個(gè)攔截器 對(duì)用戶(hù)的請(qǐng)求 異常 或者視圖進(jìn)行 一些處理--> <mvc:interceptors> <mvc:interceptor> <!--某一模塊攔截: /myPath/** ,攔截所有的請(qǐng)求: /** --> <mvc:mapping path="/**"/> <bean class="cn.sh.springmvc.interceptor.MyInterceptor"> </bean> </mvc:interceptor> </mvc:interceptors> </beans>
編寫(xiě)控制器(類(lèi)似struts里面的action)
下面有
傳統(tǒng)的請(qǐng)求
有異步請(qǐng)求
文件上傳 (注意添加jar和配置 文件上傳 解析器)
重定向請(qǐng)求
package cn.sh.springmvc; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import java.io.PrintWriter; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Arrays; import java.util.Date; import java.util.HashMap; import java.util.Map; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.beans.propertyeditors.CustomDateEditor; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.ServletRequestDataBinder; import org.springframework.web.bind.annotation.InitBinder; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.multipart.MultipartHttpServletRequest; import org.springframework.web.multipart.commons.CommonsMultipartFile; import org.springframework.web.servlet.ModelAndView; import cn.sh.springmvc.model.Person; import cn.sh.springmvc.model.User; @Controller //用來(lái)標(biāo)注但欠累是springmvc的控制層類(lèi) @RequestMapping("/homepage") //類(lèi)是 struts2中的namespace public class TestController{ @RequestMapping("/hello.do") //用來(lái)訪問(wèn)控制方法的注解 public String hello(){ System.out.println("注解成功"); return "homepage/index"; } //參數(shù)的傳遞 /** * 方式一:HttpServletRequest * @param request * @return */ @RequestMapping("/toPesron.do") public String toPerson(HttpServletRequest request){ String result=request.getParameter("name"); System.out.println(result); return "homepage/index"; } /** * 方式二:將要傳遞的參數(shù)定義在方法中 而且 會(huì)自動(dòng)轉(zhuǎn)類(lèi)型 * @param name * @param age * @return */ @RequestMapping("/toPesron1.do") public String toPerson1(String name,Integer age,Date birthday){ //定義 參數(shù)名也可以了 System.out.println(name); System.out.println(age); System.out.println(birthday); return "homepage/index"; } /** * 傳遞參數(shù)的 名字必須要與實(shí)體類(lèi)的屬性set方法后面的字符串匹配才能接受參數(shù),首字母大小寫(xiě)不區(qū)分 * 請(qǐng)求中傳遞的參數(shù)只要是能和參數(shù)列表里面的變量名或者實(shí)體里面的set后面字符串匹配的上就能接受到 * @param person * @return */ @RequestMapping("/toPesron2.do") public String toPerson2(Person person,User user){ //定義 參數(shù)名也可以了 System.out.println(person); System.out.println(user); return "homepage/index"; } /** * 數(shù)組結(jié)構(gòu) * @param name * @return */ @RequestMapping("/toPerson3.do") public String upload(String[] name){ //定義 參數(shù)名也可以了 System.out.println(Arrays.toString(name)); return "homepage/index"; } /** * 將數(shù)據(jù)傳遞到 jsp頁(yè)面去 * 不建議使用 * @throws ParseException */ @RequestMapping("/toPerson4.do") public ModelAndView toPerson4() throws ParseException{ Person person=new Person(); person.setName("james"); person.setAge(28); person.setAddress("maiami"); SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd"); Date birthday=sdf.parse("1985-01-22"); person.setBirthday(birthday); Map<String, Object> map=new HashMap<String, Object>(); map.put("p",person); return new ModelAndView("index",map); } /** * 不建議使用 * @param map * @return * @throws ParseException */ @RequestMapping("/toPerson5.do") public String toPerson5(Map<String, Object> map) throws ParseException{ Person person=new Person(); person.setName("james"); person.setAge(28); person.setAddress("maiami"); SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd"); Date birthday=sdf.parse("1985-01-22"); person.setBirthday(birthday); map.put("p",person); return "index"; } /** * 建議使用 * @param model * @return * @throws ParseException */ @RequestMapping("/toPerson6.do") public String toPerson6(Model model) throws ParseException{ Person person=new Person(); person.setName("james"); person.setAge(28); person.setAddress("maiami"); SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd"); Date birthday=sdf.parse("1985-01-22"); person.setBirthday(birthday); model.addAttribute("p", person); return "index"; } /** * 不建議使用 * @param name * @param response * @throws ParseException */ @RequestMapping("/ajax.do") public void ajax(String name,HttpServletResponse response) throws ParseException{ String result="hello"+name; try { response.getWriter().write(result); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } /** * 建議使用 * @param name * @param out * @throws ParseException */ @RequestMapping("/ajax1.do") public void ajax1(String name,PrintWriter out) throws ParseException{ String result="hello"+name; try { out.print(result); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } @RequestMapping("/toajax.do") public String toajax() throws ParseException{ return "ajax"; } @RequestMapping("/toFrom.do") public String toFrom() throws ParseException{ return "form"; } @RequestMapping(value="/toPerson7.do",method=RequestMethod.POST) public String toPerson7(Person person){ //定義 參數(shù)名也可以了 System.out.println(person); return "homepage/index"; } @RequestMapping(value="/toPerson8.do",method=RequestMethod.POST) public String toPerson8(Person person,HttpServletRequest request) throws FileNotFoundException{ //定義 參數(shù)名也可以了 System.out.println(person); MultipartHttpServletRequest rm=(MultipartHttpServletRequest)request; CommonsMultipartFile cfile=(CommonsMultipartFile)rm.getFile("image");// input的名稱(chēng) byte[] bfile=cfile.getBytes(); String fileName=""; SimpleDateFormat format=new SimpleDateFormat("yyyyMMddHHmmssSSS"); fileName=format.format(new Date()); fileName+=(int)(Math.random()*1000); //3位隨機(jī)數(shù) //文件全名稱(chēng) String origFileName=cfile.getOriginalFilename(); //文件后綴 String suffix=origFileName.substring(origFileName.lastIndexOf(".")); //項(xiàng)目的部署路徑 String path=request.getSession().getServletContext().getRealPath("/"); System.out.println(path); System.out.println(request.getServletPath()); OutputStream out=new FileOutputStream(new File(path+"/upload/"+fileName+suffix)); try { out.write(bfile); out.flush(); out.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return "homepage/index"; } @RequestMapping("/redtoFrom.do") public String redirectToFrom() throws ParseException{ return "redirect:toFrom.do"; //可以在前面加上 namespace; } @RequestMapping("/redtoFrom1.do") public String redirectToFrom1() throws ParseException{ // "/"表示從根目錄開(kāi)始找 return "redirect:/test/toFrom.do"; //可以在前面加上 namespace; } /** * 注冊(cè)時(shí)間類(lèi)型的屬性編輯器 * @param binder */ @InitBinder public void initBinder(ServletRequestDataBinder binder){ //注意 2012-12-02 和 2012-22-12(將變成 2013-10-12 做進(jìn)制轉(zhuǎn)換) binder.registerCustomEditor(Date.class, new CustomDateEditor(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"), true)); } }
多個(gè)控制器的相互引用
package cn.sh.springmvc; import java.text.ParseException; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; @Controller //用來(lái)標(biāo)注但欠累是springmvc的控制層類(lèi) @RequestMapping("/test") //類(lèi)是 struts2中的namespace public class TestController1{ @RequestMapping("/toFrom.do") public String toFrom() throws ParseException{ return "form"; } }
自定義攔截器
package cn.sh.springmvc.interceptor; import java.util.Map; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; public class MyInterceptor implements HandlerInterceptor { /** * 執(zhí)行時(shí)間:視圖解析完畢 * 主要做一些監(jiān)控的處理 比如 :異常 類(lèi)是 try catch 后面的 finally */ public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception ex) throws Exception { System.out.println("afterCompletion"); ex.printStackTrace(); } /** * 執(zhí)行時(shí)機(jī):control 執(zhí)行完, 視圖解析沒(méi)有把頁(yè)面解析成頁(yè)面 * 可以對(duì)視圖做統(tǒng)一修改 主要提現(xiàn)在model上面(可以統(tǒng)一為 某個(gè)視圖 添加頭和尾 ) */ public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView mv) throws Exception { System.out.println("postHandle...."); Map<String,Object> map=mv.getModel(); map.put("test", "append something"); } /**前置攔截 * 執(zhí)行時(shí)機(jī):在control之前執(zhí)行 * true:攔截通過(guò) 表示可以訪問(wèn)control * false:不可以訪問(wèn)control * Object: 訪問(wèn)的control 的類(lèi)的對(duì)象 * 可以做權(quán)限 校驗(yàn)和控制 */ public boolean preHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2) throws Exception { System.out.println("preHandle...."); return true; } }
兩個(gè)參數(shù)實(shí)體類(lèi)
package cn.sh.springmvc.model; import java.util.Date; public class User { private String name; private Integer age; private String address; private Date birthday; //get set .. @Override public String toString() { return this.name+"/"+this.age+"/"+this.address+"/"+this.birthday; } } package cn.sh.springmvc.model; import java.util.Date; public class Person { private String name; private Integer age; private String address; private Date birthday; //get set... @Override public String toString() { return this.name+"/"+this.age+"/"+this.address+"/"+this.birthday; } }
幾個(gè)jsp
form.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <script type="text/javascript" src="js/jquery.js"></script> <script type="text/javascript"> $(function(){ $("#mybutton").click( function(){ $.ajax({ url:"homepage/ajax1.do", type:"POST", dataType:"text", data:{ name:"zhangh" }, success:function(responseText){ alert(responseText); }, error:function(){ alert("system error"); } }); } ); }); </script> </head> <body> <form action="homepage/toPerson8.do" method="post" enctype="multipart/form-data"> name:<input name="name"><br/> age:<input name="age"><br/> address:<input name="address"><br/> birthday:<input name="birthday"><br/> file:<input type="file" name="image"><br/> <input type="submit" value="submit"> </form> <input type="button" id="mybutton" value="click"> </body> </html>
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
