springmvc註解開發示例

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";
    }
相關文章
相關標籤/搜索