1,配置文件java
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation="http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/aop https://www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/tx https://www.springframework.org/schema/tx/spring-tx.xsd"> <!-- <mvc:annotation-driven/> --> <!-- 掃描器存在就不須要使用註解驅動 @Controller @Service 在業務邏輯層 @repository 在Dao層 @Component(實際項目中用於無發分層的類,可是也想使用spring來管理) 以上做用於類上 @Autowired 類與類之間之間的關係 @Resources 對於controller層,須要對其加@controller註解 --> <context:component-scan base-package="com.sxx.controller"></context:component-scan> <!-- 視圖解析器的配置 前綴是全部jsp的公共路徑 後綴是全部視圖的後綴名 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/jsp/"></property> <property name="suffix" value=".jsp"></property> </bean> </beans>
2.controller類web
package com.sxx.controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; @Controller @RequestMapping("/test") public class TestController { /** * * @return String 類型表明modelandview中的viewname,就是視圖解析器前綴和後綴中間的路徑。 * @RequestMapping指定方法和類的映射,便是能夠放在方法上也能夠放在類上。下面指定的是方法。 */ @RequestMapping("/hello.do") public String hello(){ return "index"; } }
3.訪問路徑:若是在controller類上加有@RequestMapping(「/test」)(括號內的是路徑)spring
localhost:8080/工程名/test/hello.do數組
若是不加類上的@RequestMappingsession
訪問路徑是:localhost:8080/工程名/hello.domvc
4.參數的接收app
package com.sxx.controller; import java.text.SimpleDateFormat; import java.util.Date; import javax.servlet.Servlet; import javax.servlet.http.HttpServletRequest; import org.springframework.beans.propertyeditors.CustomDateEditor; import org.springframework.stereotype.Controller; import org.springframework.web.bind.ServletRequestDataBinder; import org.springframework.web.bind.annotation.InitBinder; import org.springframework.web.bind.annotation.RequestMapping; @Controller @RequestMapping("/test")//能夠加在類上用於區分方法名相同可是類不一樣的方法。 public class TestController { public TestController(){ System.out.println("controller 被建立"); } /** * * @return String 類型表明modelandview中的viewname,就是視圖解析器前綴和後綴中間的路徑。 * @RequestMapping指定方法和類的映射,便是能夠放在方法上也能夠放在類上。下面指定的是方法。 */ @RequestMapping("/hello.do") public String hello(){ return "index"; } /** * @param req在參數列表中直接定義可使用,response,session相同 * @return */ @RequestMapping("/revParam.do") public String revParam(HttpServletRequest req){ String name = req.getParameter("name"); System.out.println(name); return "index"; } /** * 走的仍是HttpServletRequest, * 能夠直接在參數列表中定義要接受的參數,可是參數的變量名必定要和請求中的實參的參數名一致。 * 參數的數據類型必須能轉換 * @param name * @return */ @RequestMapping("/revParam1.do") public String revParam1(String name,Integer id,Date birthday){ System.out.println(name); System.out.println(id); System.out.println(birthday); return "index"; } /** * 數組方式的接收多選的參數列表,要求數組變量名和請求的參數的名一致 * @param fav * @return */ @RequestMapping("/revParam2.do") public String revParam2(String[] fav){ for(String fa :fav){ System.out.println(fa); } return "index"; } /** * 接收自定義實體對象 * 直接在參數列表中定義要接受的對象便可,不須要關心對象的變量名, * 可是必需要把實體類對象的屬性和參數的名字對應上才能接收到值 * 單例的,由於每一個線程都會建立一個新的對象。struts是多例的。 * @param * @return */ /*@RequestMapping("/revParam3.do") public String revParam3(Person p){ System.out.println(p); return "index"; }*/ /** * 直接轉發到form.jsp的頁面 * @return */ @RequestMapping("/toForm.do") public String toForm(){ return "form"; } /** * 綁定時間類型的屬性編輯器 * @param binder */ @InitBinder public void initBinder(ServletRequestDataBinder binder){ binder.registerCustomEditor(Date.class, new CustomDateEditor(new SimpleDateFormat("yyyy-MM-dd"), true)); } }
5.springmvc中結果返回給視圖的示例jsp
/**controller類中 * 麻煩,不建議使用 * @return */ @RequestMapping("/returnResult.do") public ModelAndView returnResult(){ Person p = new Person(); p.setId(1); p.setName("shandaxin"); p.setBirthday(new Date()); Map<String, Person> map = new HashMap<String, Person>(); //request.setAttribute("p",p); map.put("p", p); return new ModelAndView("return",map); }
/**
*return.jsp頁面中
*/
<body>
<h1>${p.id }</h1> <br>
<h1>${p.name }</h1> <br>
<h1><fmt:formatDate value="${p.birthday }" pattern="yyyy-MM-dd HH:mm:ss"/> </h1> <br>
</body>編輯器
方法2:spa
/** * * @param map方法中的map不是爲了接收參數的,是爲了網頁面上傳數據的集合。 * 後臺走的依舊是modelandview,不建議使用 * @return */ @RequestMapping("/returnResult1.do") public String returnResult1(Map<String, Object> map){ Person p = new Person(); p.setId(1); p.setName("shandaxin"); p.setBirthday(new Date()); map.put("p", p); return "return"; }
方法3:
/** * * @param 在參數列表中使用model,model.addAttribute("p", p);最爲經常使用。 * @return */ @RequestMapping("/returnResult2.do") public String returnResult2(Model model){ Person p = new Person(); p.setId(1); p.setName("shandaxin"); p.setBirthday(new Date()); model.addAttribute("p", p); return "return"; }