springmvc注解开发示例

1,配置文件

<?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类

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”)(括号内的是路径)

localhost:8080/工程名/test/hello.do

如果不加类上的@RequestMapping

访问路径是:localhost:8080/工程名/hello.do

 

4.参数的接收

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中结果返回给视图的示例

/**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:

/**
     * 
     * @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";
    }

 

posted @ 2019-07-12 10:39  永远没对象  阅读(332)  评论(0编辑  收藏  举报