zoukankan      html  css  js  c++  java
  • 1.SpringMVC入门

    创建一个web工程

    导入jar

     

    配置web.xml

    在web.xml配置前端控制器:DispatcherServlet

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
             version="4.0">
        <servlet>
            <servlet-name>springmvc</servlet-name>
            <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
            <!-- 默认加载方式
                   默认加载必须规范:
                   * 文件命名:servlet-name-servlet.xml====springmvc-servlet.xml
                   * 路径规范:必须在WEB-INF目录下面
             -->
            <init-param>
                <param-name>contextConfigLocation</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.html</welcome-file>
            <welcome-file>index.htm</welcome-file>
            <welcome-file>index.jsp</welcome-file>
            <welcome-file>default.html</welcome-file>
            <welcome-file>default.htm</welcome-file>
            <welcome-file>default.jsp</welcome-file>
        </welcome-file-list>
    </web-app>

    配置springmvc.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"
           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.2.xsd
            http://www.springframework.org/schema/mvc
            http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd
            http://www.springframework.org/schema/context
            http://www.springframework.org/schema/context/spring-context-3.2.xsd
            http://www.springframework.org/schema/aop
            http://www.springframework.org/schema/aop/spring-aop-3.2.xsd
            http://www.springframework.org/schema/tx
            http://www.springframework.org/schema/tx/spring-tx-3.2.xsd">
    
        <!-- 配置处理器映射器,springmvc默认的处理器映射器
            BeanNameUrlHandlerMapping:根据bean(自定义Controler)的name属性的url去寻找hanler(Action:Controller)
             -->
        <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"></bean>
    
        <!-- 配置处理器适配器执行Controlelr ,springmvc默认的
             SimpleControllerHandlerAdapter:执行Controller
             -->
        <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"></bean>
    
    
        <!--配置自定义Controller
        访问url:http://localhost:8080/hello.do
        -->
        <bean name="/hello.do" class="cn.itcast.controller.MyController"></bean>
    
        <!-- 配置sprigmvc视图解析器:解析逻辑试图
                  后台返回逻辑试图:index
                 视图解析器解析出真正物理视图:前缀+逻辑试图+后缀====/WEB-INF/jsps/index.jsp
             -->
        <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
            <property name="prefix" value="/WEB-INF/jsps/"></property>
            <property name="suffix" value=".jsp"></property>
        </bean>
    
    
    </beans>

    自定义Controller

    package cn.itcast.controller;
    
    
    import org.springframework.web.servlet.ModelAndView;
    import org.springframework.web.servlet.mvc.Controller;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    /**
     * Created by weihu1 on 2018/8/21 10:39
     */
    public class MyController implements Controller {
        @Override
        public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
            // 接受请求,接受参数,验证参数
            //封装参数,调用业务方法
            //返回视图
            ModelAndView mv = new ModelAndView();
            //设置页面回显数据
            mv.addObject("hello", "欢迎学习springmvc!");
    
            //指定跳转的视图
            //返回物理视图
            //mv.setViewName("/WEB-INF/jsps/index.jsp");
            //返回逻辑视图
            mv.setViewName("index");
    
            return mv;
        }
    }

    定义视图页面

    根据视图解析路径:WEB-INF/jsps/index.jsp

    <%--
      Created by IntelliJ IDEA.
      User: weihu1
      Date: 2018/8/21
      Time: 10:33
      To change this template use File | Settings | File Templates.
    --%>
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
      <head>
        <title>$Title$</title>
      </head>
      <body>
      <h1>${hello}</h1>
      </body>
    </html>

     

     

    处理器适配器

    SimpleControllerHandlerAdapter

    功能:执行controller

               调用controller里面方法,返回modelAndView。

    <!-- 配置处理器映射器,springmvc默认的处理器映射器
            BeanNameUrlHandlerMapping:根据bean(自定义Controler)的name属性的url去寻找hanler(Action:Controller)
             -->
        <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"></bean>

    HttpRequestHandlerAdapter

    功能:执行controller

        <!--HttpRequestHandlerAdapter负责实现接口HttpRequestHandler的后端
        控制器
        -->
        <bean class="org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter"></bean>

    2个处理器适配器能共存?

    可以共存

    命令控制器

    Springmvc通过命令设计模式接受页面参数。

    自定义命令控制器

    package cn.itcast.controller;
    
    import cn.itcast.domain.User;
    import org.springframework.beans.propertyeditors.CustomDateEditor;
    import org.springframework.validation.BindException;
    import org.springframework.web.bind.ServletRequestDataBinder;
    import org.springframework.web.servlet.ModelAndView;
    import org.springframework.web.servlet.mvc.AbstractCommandController;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    
    /**
     * Created by weihu1 on 2018/8/21 16:09
     */
    public class CommandController extends AbstractCommandController {
    
        //指定参数绑定到那个javaBean
        public CommandController(){
            this.setCommandClass(User.class);
        }
        @Override
        protected ModelAndView handle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, BindException e) throws Exception {
            //把命令对象强转成User对象
            User user=(User)o;
            ModelAndView mv=new ModelAndView();
            mv.addObject("user",user);
            mv.setViewName("index");
            return mv;
        }
    
        /**
         * Create by hu.wei on 2018/8/21 17:01
         * @Description: 这个方法会先自动执行
         */
        @Override
        protected void initBinder(HttpServletRequest request, ServletRequestDataBinder binder) throws Exception {
            super.initBinder(request, binder);
    
            String str=request.getParameter("birthday");
            if(str.contains("/")){
                binder.registerCustomEditor(Date.class,
                        new CustomDateEditor(new SimpleDateFormat("yyyy/MM/dd"),true));
            }else {
                binder.registerCustomEditor(Date.class,
                        new CustomDateEditor(new SimpleDateFormat("yyyy-MM-dd"),true));
            }
        }
    }

     

    定义javaBean

    package cn.itcast.domain;
    
    import java.util.Date;
    
    /**
     * Created by weihu1 on 2018/8/21 16:10
     */
    public class User {
    
        private Integer id;
        private String username;
        private Date birthday;
        private String sex;
        private String address;
    
        public Integer getId() {
            return id;
        }
    
        public void setId(Integer id) {
            this.id = id;
        }
    
        public String getUsername() {
            return username;
        }
    
        public void setUsername(String username) {
            this.username = username;
        }
    
        public Date getBirthday() {
            return birthday;
        }
    
        public void setBirthday(Date birthday) {
            this.birthday = birthday;
        }
    
        public String getSex() {
            return sex;
        }
    
        public void setSex(String sex) {
            this.sex = sex;
        }
    
        public String getAddress() {
            return address;
        }
    
        public void setAddress(String address) {
            this.address = address;
        }
    }

     

     

    封装参数页面

    add.jsp

    <%--
      Created by IntelliJ IDEA.
      User: weihu1
      Date: 2018/8/21
      Time: 10:33
      To change this template use File | Settings | File Templates.
    --%>
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
      <head>
        <title>$Title$</title>
      </head>
      <body>
    
      <form action="/command.do" method="post">
        姓名:<input type="text" name="username" id="username">
        生日:<input type="text" name="birthday" id="birthday">
        姓别:<input type="text" name="sex" id="sex">
        地址:<input type="text" name="address" id="address">
        <input type="submit" value="提交">
    
      </form>
      </body>
    </html>

    跳转到add页面

    由于add页面在WEB-INF下面不能直接访问,需要通过Controller来访问。

    package cn.itcast.controller;
    
    import org.springframework.web.servlet.ModelAndView;
    import org.springframework.web.servlet.mvc.Controller;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    /**
     * Created by weihu1 on 2018/8/21 16:20
     */
    public class ToAddController implements Controller {
        @Override
        public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
            //跳转到add添加页面视图
            ModelAndView mv=new ModelAndView();
            mv.setViewName("add");
            return mv;
        }
    }

    在springmvc配置bean

     <bean name="/command.do" class="cn.itcast.controller.CommandController"></bean>
        <bean name="/toAdd.do" class="cn.itcast.controller.ToAddController"></bean>

    中文乱码解决

    get请求

     

    Post乱码

    Spring编码过滤器:在web.xml配置

    <!--解决post请求乱码问题-->
        <filter>
            <filter-name>characterEncoding</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>characterEncoding</filter-name>
            <url-pattern>/*</url-pattern>
        </filter-mapping>

    时间类型转换

    package cn.itcast.controller;
    
    import cn.itcast.domain.User;
    import org.springframework.beans.propertyeditors.CustomDateEditor;
    import org.springframework.validation.BindException;
    import org.springframework.web.bind.ServletRequestDataBinder;
    import org.springframework.web.servlet.ModelAndView;
    import org.springframework.web.servlet.mvc.AbstractCommandController;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    
    /**
     * Created by weihu1 on 2018/8/21 16:09
     */
    public class CommandController extends AbstractCommandController {
    
        //指定参数绑定到那个javaBean
        public CommandController(){
            this.setCommandClass(User.class);
        }
        @Override
        protected ModelAndView handle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, BindException e) throws Exception {
            //把命令对象强转成User对象
            User user=(User)o;
            ModelAndView mv=new ModelAndView();
            mv.addObject("user",user);
            mv.setViewName("index");
            return mv;
        }
    
        /**
         * Create by hu.wei on 2018/8/21 17:01
         * @Description: 这个方法会先自动执行
         */
        @Override
        protected void initBinder(HttpServletRequest request, ServletRequestDataBinder binder) throws Exception {
            super.initBinder(request, binder);
    
            String str=request.getParameter("birthday");
            if(str.contains("/")){
                binder.registerCustomEditor(Date.class,
                        new CustomDateEditor(new SimpleDateFormat("yyyy/MM/dd"),true));
            }else {
                binder.registerCustomEditor(Date.class,
                        new CustomDateEditor(new SimpleDateFormat("yyyy-MM-dd"),true));
            }
        }
    }
  • 相关阅读:
    Linux下的 .o、.a、.so文件
    第三章、主机规划与磁盘分区
    debian linux中文桌面系统安装
    C++开源库,欢迎补充。
    C#获取电脑硬件信息(CPU ID、主板ID、硬盘ID、BIOS编号)
    C# CPU,硬盘,mac地址灯本地信息查询
    打造属于自己的支持版本迭代的Asp.Net Web Api Route
    PreApplicationStartMethodAttribute的使用
    Web Api in Orchard
    Dependency Injection in ASP.NET Web API 2 Using Unity
  • 原文地址:https://www.cnblogs.com/weihu/p/9512746.html
Copyright © 2011-2022 走看看