SpringMVC

一.springMVC通過xml設置

1.在web.xml中配置springmvc控制器

<!-- 配置springMvc核心控制器 -->
    <servlet>
        <servlet-name>DispatcherServlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>DispatcherServlet</servlet-name>
        <url-pattern>*.do</url-pattern>
    </servlet-mapping>

    <!-- 默認會去WEB-INF下找DispatcherServlet-servlet.xml文件 -->

2.在WEB-INF下配置DispatcherServlet-servlet.xml

<?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:mvc="http://www.springframework.org/schema/mvc"
      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"> 
      <bean name="/hello.do" class="com.itheima.springmvc.HelloAction" ></bean>

    <!-- 映射器 
    將beanname屬性當做url請求
    -->
     <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
    <!-- 適配器 
    用於尋找實現了Controller接口的實現類
    -->
    <bean  class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>

    <!-- 視圖解析器 
    通過ModelAndView對象封裝的視圖名找到真正的頁面
    -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"/>

</beans>

3.自定義HelloAction.java

public class HelloAction implements Controller{
    @Override
    public ModelAndView handleRequest(HttpServletRequest request,HttpServletResponse response) throws Exception {
        // TODO Auto-generated method stub
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.addObject("message", "hello world!!");
        modelAndView.setViewName("/jsp/success.jsp");
        return modelAndView;
    }
}

4.自定義/jsp/success.jsp文件

<body>
<h1>${message}</h1>
</body>

5.加載指定的springmvc.xml文件

在web.xml中配置
<!-- 配置springMvc核心控制器 -->
    <servlet>
        <servlet-name>DispatcherServlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <!-- 通知DispatcherServlet去指定路徑下加載springmvc.xml -->
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:springmvc.xml</param-value>
        </init-param>
    </servlet>

6.配置邏輯視圖

在springmvc01.xml中配置
<!-- 視圖解析器 
    通過ModelAndView對象封裝的視圖名找到真正的頁面
    -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" >
        <property name="prefix" value="/jsp/"></property>
        <property name="suffix" value=".jsp"></property>
    </bean>

7.將springmvc01.xml加入總springmvc.xml文件

<import resource="com/itheima/springmvc/spring01.xml"/>

8.映射器配置

在springapp01.xml配置

 <!-- 映射器
         適合將多個請求路徑映射到一個action中
       -->
      <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
        <property name="mappings">
            <props>
                <prop key="/update.do">userAction</prop>
                <prop key="/delete.do">userAction</prop>
                <prop key="/query.do">userAction</prop>
            </props>
        </property>
      </bean>

9.jsp到jsp/html之間的轉發控制器

  <!-- jsp到jsp之間的轉發控制器 -->
     <bean name="/home.do" class="org.springframework.web.servlet.mvc.ParameterizableViewController">
        <property name="viewName" value="/jsp/success.jsp"></property>
     </bean>

10.封裝參數的控制器

public class UserAction extends AbstractCommandController{

    public UserAction(){
        this.setCommandClass(User.class);
    }

    @Override
    protected ModelAndView handle(
            HttpServletRequest request,
            HttpServletResponse response, 
            Object obj, 
            BindException error)
            throws Exception {
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.addObject("message", "增加用戶成功");
        modelAndView.setViewName("/jsp/success.jsp");
        User user = (User)obj;
        System.out.println(user.getUserName()+"..."+user.getAge());
        return modelAndView;
    }   
}

11.解決springmvc的post請求亂碼問題

在web.xml中配置

<filter>
    <filter-name>CharacterEncodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
            <param-name>encoding</param-name>
            <param-value>utf-8</param-value>
        </init-param>
</filter>
<filter-mapping>
    <filter-name>CharacterEncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

12.自定義日期轉換器

在UserAction.java中重寫initBinder方法

@Override
    protected void initBinder(HttpServletRequest request,
            ServletRequestDataBinder binder) throws Exception {
        binder.registerCustomEditor(Date.class,
                new CustomDateEditor(
                        new SimpleDateFormat("yyyy-mm-dd"),true));
    }

二.springmvc的註解方式

1.在web.xml中配置核心控制器

<?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">
    <servlet>
        <servlet-name>DispatcherServlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:spring.xml</param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>DispatcherServlet</servlet-name>
        <url-pattern>*.do</url-pattern>
    </servlet-mapping>
</web-app>

2.配置spring.xml


    <import resource="com/daming/springmvc/app01/spring_app01.xml"/>

3.配置spring_app01.xml

<!-- 讓springioc容器自動掃描帶註解的文件類 -->
    <context:component-scan base-package="com.daming.springmvc.app01"></context:component-scan>

4.帶註解的action類

@Controller
public class UserAction {
    @RequestMapping(value="/hello.do",method=RequestMethod.POST)
    //接收普通的參數
    public String hello(Model model,String userName,int age){
        model.addAttribute("message", "hello");
        System.out.println(userName+":"+age);
        return "/jsp/success.jsp";
    }

    @RequestMapping(value="/register.do")
    //接收封裝參數的對象
    public String register(Model model,User user){
        model.addAttribute("message", "register");
        System.out.println(user.getUserName() +":"+user.getAge()+":"+user.getHeridate());
        return "/jsp/success.jsp";
    }
    //接收數組
    @RequestMapping("/bye.do")
    public String bye(Model model){
        model.addAttribute("message", "bye");
        return "/jsp/success.jsp";
    }
    @RequestMapping("/deleteAll.do")
    public String deleteAll(Model model,int[] ids){
        model.addAttribute("message", "deleteAll");
        return "/jsp/success.jsp";
    }
    //接收list封裝的參數
    @RequestMapping("/addAll.do")
    public String addAll(Model model,Bean bean){

        for (int i = 0; i < bean.getEmpList().size(); i++) {
            System.out.println(
                    bean.getEmpList().get(i).getUserName()+":"
                    +bean.getEmpList().get(i).getAge());
        }
        model.addAttribute("message", "addAll");
        return "/jsp/success.jsp";
    }   
}

5.結果的轉發和重定向

@Controller
@RequestMapping("/emp")
public class EmpAction {

    @RequestMapping("/findById.do")
    public String findById(String id){

        System.out.println("findByid  id = "+id);
        //return "forward:/emp/updateById.do";
        return "redirect:/emp/updateById.do";
    }   
    @RequestMapping("/updateById.do")    
    public String updateById(String id,Model model){

        System.out.println("updateById  id = "+id);
        model.addAttribute("message",id);
        return "/jsp/success.jsp";
    }   
}

6.以Json形式作爲請求參數和返回值類型

@Controller
@RequestMapping("/json")
public class EmpAction {

    @RequestMapping("/bean2json.do")
    public @ResponseBody Emp bean2json(){
        System.out.println("bean2json");
        Emp emp = new Emp();
        emp.setUserName("大明");
        emp.setAge("20");
        return emp;

    }   

    @RequestMapping("/map2json.do")
    public @ResponseBody Map map2json(){
        Map map = new HashMap<String, Object>();

        List<Emp> list = new ArrayList<Emp>();
        System.out.println("map2json");
        Emp emp = new Emp();
        emp.setUserName("大明");
        emp.setAge("20");
        list.add(emp);
        list.add(emp);
        map.put("empList",list);
        map.put("rows",list.size());

        return map;

    }   

    @RequestMapping("/list2json.do")
    public @ResponseBody List<Emp> list2json(){
        System.out.println("list2json");
        List<Emp> list = new ArrayList<Emp>();
        Emp emp = new Emp();
        emp.setUserName("大明");
        emp.setAge("20");
        list.add(emp);
        list.add(emp);
        return list;
    }   
    @RequestMapping("/requestjson.do")
    public @ResponseBody String requestjson(@RequestBody Emp emp){
        System.out.println(emp.getUserName()+":"+emp.getAge());
        return "haha";
    }   
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章