• springmvc入门&参数&注解


    创建servlet

    web.xml配置文件

    <?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_3_1.xsd"
             version="3.1">
    
        <!--核心控制器DispatcherServlet,核心控制器是一个servlet配置-->
        <servlet>
            <servlet-name>dispatcherServlet</servlet-name>
            <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
            <!-- 配置Servlet的初始化参数,读取springmvc的配置文件,创建spring容器 -->
            <init-param>
                <param-name>contextConfigLocation</param-name>
                <param-value>classpath:springmvc.xml</param-value>
            </init-param>
            <!--配置启用时加载对象,Tomcat启动时创建dispatcherservlet类对象-->
            <load-on-startup>1</load-on-startup>
        </servlet>
    
        <servlet-mapping>
            <servlet-name>dispatcherServlet</servlet-name>
            <!--servlet / 固定, /* 是过滤器的-->
            <url-pattern>/</url-pattern>
        </servlet-mapping>
    
        <!--字符编码过滤器-->
        <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>
    </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:context="http://www.springframework.org/schema/context"
           xmlns:mvc="http://www.springframework.org/schema/mvc"
           xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd">
    
        <!--主要有3点配置-->
        <!--包扫描-->
        <context:component-scan base-package="com.zl"></context:component-scan>
    
        <!--springmvc:注解驱动-->
        <mvc:annotation-driven></mvc:annotation-driven>
    
        <!--使用注解驱动的转换服务-->
        <!--<mvc:annotation-driven conversion-service="conversionService"></mvc:annotation-driven>-->
    
        <!--内部资源视图解析,对象-->
        <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
            <property name="prefix" value="/WEB-INF/pages/"></property>
            <property name="suffix" value=".jsp"></property>
        </bean>
    
        <!--转换服务交给一个对象来做ConversionServiceFactoryBean-->
        <!--<bean class="org.springframework.context.support.ConversionServiceFactoryBean" id="conversionService">
            <property name="converters">
                <bean class="com.zl.utils.MyConverter"></bean>
            </property>
        </bean>-->
    </beans>

    控制器
    package com.zl.controller;
    
    import com.zl.bean.User;
    import org.springframework.stereotype.Controller;
    import org.springframework.ui.Model;
    import org.springframework.ui.ModelMap;
    import org.springframework.web.bind.annotation.*;
    import org.springframework.web.bind.support.SessionStatus;
    
    import java.util.List;
    import java.util.Map;
    
    @Controller
    @SessionAttributes(value = "msg",types = String.class) //将数据存到session域里
    //@RequestMapping("/hello")
    public class HelloController {
        /**
         *  @RequestMapping() 主要作用标识请求路径与方法的映射关系
         * 该注解可以作用在方法和类上。
         * 作用在类上:第一级的访问目录
         * 作用在方法上:第二级的访问目录
         *
         * 如果只有一个控制器且一个处理器那么路径不写的话,相当于/* ,
         *     或者说只有一个处理器没写路径,那么该处理器就可接受其他所有的路径
         * 接收请求
         * @return
         */
        //@RequestMapping("/hello")   //标识请求路径与方法的映射关系
        //@RequestMapping(value = "/hello",method = RequestMethod.GET)  //method不写是各种方法都行
        //@GetMapping("/hello")  //GetMapping相当于RequestMapping+get。post等其他方法也一样。但是他们就不能够作用于类上了
        //@RequestMapping("/say")   //在类上加上@RequestMapping("/hello"),此时方法的访问路径就是 http://localhost:8080/hello/say
        //@RequestMapping(value = "/hello",params = {"name=zs","age","address!=jp"})  //参数限制
        //@RequestMapping(value = "/hello",headers = {"Accept","!Date","Accept-Encoding!=zh-CN","Host=localhost:18081"})//对请求头限制,挂了
    
        /**请求参数的绑定
         * 绑定机制
         *     表单提交的数据都是k=v格式的    username=haha&password=123,所有要一一对应区分大小写
         *     SpringMVC的参数绑定过程是把表单提交的请求参数,作为控制器中方法的参数进行绑定的
         *     要求:提交表单的name和参数的名称是相同的
         */
        /*@RequestMapping("/hello")
        public String sayHello(String name,int age) {  //获取参数,不用全部获取,只获取参数名一样的,不考虑顺序,自动寻找同名的参数
            System.out.println("Hello SpringMVC!!");
            System.out.println(name);
            System.out.println(age);
            return "success";
        }*/
        /*@RequestMapping("/hello")
        public String sayHello(User user) {  //获取参数直接封装到一个对象中,获取属性名与携带参数名一样的
            System.out.println("Hello SpringMVC!!");
            System.out.println(user);
            return "success";
        }*/
        /*@RequestMapping("/hello")
        public String sayHello(@RequestParam Map<String,Object> map) {  //要封装到map,list当中要加注解说明请求参数
            System.out.println("Hello SpringMVC!!");
            System.out.println(map);
            return "success";
        }*/
        /*@RequestMapping("/hello")
        public String sayHello(@RequestParam List<Integer> id) {  //要封装到map,list当中要加注解说明请求参数
            System.out.println("Hello SpringMVC!!");
            System.out.println(id);
            return "success";
        }*/
    
        /**
         * 实体引用类型,user里封装了course,点出来Course.curname。name=zs&age=19&Course.curname=java&Course.score=99
         * user里封装了List<Course>,点出来Courses[0].score=99
         */
        /*@RequestMapping("/hello")
        public String sayHello (User user) {
            System.out.println(user);
            return "success";
        }*/
    
        //post请求中文乱码,需在配置文件中创建一个字符编码过滤器
        /*@RequestMapping("/hello")
        public String sayHello(String name,int age) {
            System.out.println("Hello SpringMVC!!");
            System.out.println(name);
            System.out.println(age);
            return "success";
        }*/
    
        /**
         *日期格式处理
         * 1 使用注解驱动的转换服务
         * 2 推荐用spring的日期时间注解,@DateTimeFormat
         *
         */
        /*@RequestMapping("/hello")
        public String sayHello (User user) {
            System.out.println(user);
            return "success";
        }*/
    
        //常用注解
        /*@RequestMapping("/hello")
        public String sayHello (@RequestParam(value = "name2",required = false) String name) { //如果写了注解@RequestParam,required不写默认true
            System.out.println(name);
            return "success";
        }*/
        /*@RequestMapping("/hello")
        public String sayHello (@RequestBody(required = false) String body) { //@RequestBody接受参数为整个请求体,注意get请求没有请求体
            System.out.println(body);
            return "success";
        }*/
        /*@RequestMapping("/hello")
        public String sayHello (@RequestHeader("Accept") String head) { //@RequestHeader请求头,accept不区分大小写
            System.out.println(head);
            return "success";
        }*/
        /*@RequestMapping("/hello")
        public String sayHello (@CookieValue("JSESSIONID") String cookie) {
            System.out.println(cookie);
            return "success";
        }*/
    
        /**
         * 作用:拥有绑定url中的占位符的。例如:url中有/delete/{id},{id}就是占位符
         * 属性
         * value:指定url中的占位符名称
         * 作用:通过占位符来获取路径结果
         */
        /*@RequestMapping("/hello/{id}/{id2}") //{}占位符
        public String sayHello (@PathVariable String id,@PathVariable String id2) {  //作用:通过占位符来获取路径结果
            System.out.println(id);
            System.out.println(id2);
            return "success";
        }*/
        /*@ModelAttribute //相当于初始化
        public User parameterUser(){ //有返回值
            User user = new User();
            user.setAge(18);
            return user;
        }
        @ModelAttribute
        public void parameterUser(Map<String,User> userMap){ //无返回值,他会把有返回值的覆盖
            User user = new User();
            user.setAge(23);
            userMap.put("user",user);
        }
        @RequestMapping("/hello")
        public String sayHello (User user) {
            System.out.println(user);
            return "success";
        }*/
        /*@RequestMapping("/hello")
        public String sayHello(Model model) {
            //模型数据默认存到request域对象里,转发到jsp,通过el表达式来取,${}。要存到其他域要加注解,如@SessionAttributes,不能用在方法上,用类上
            model.addAttribute("msg", "你好帅");
            return "success";
        }*/
        @RequestMapping("/add")
        public String add(Model model) {
    
            model.addAttribute("msg", "你好帅");
            return "success";
        }
        @RequestMapping("/get")
        public String get(ModelMap modelMap) { //存到map容器里,所以用map来取
    
            System.out.println(modelMap.get("msg"));
            return "success";
        }
        @RequestMapping("/delete")
        public String delete(SessionStatus sessionStatus) {
            //设置状态完成,然后会删除域中数据
            sessionStatus.setComplete();
            return "success";
        }
    
    }

    小发现:如果只有一个控制器且一个处理器那么路径不写的话,相当于/* ,

    或者说只有一个处理器没写路径,那么该处理器就可接受其他所有的路径

    bean类
    package com.zl.bean;
    
    import org.springframework.format.annotation.DateTimeFormat;
    
    import java.io.Serializable;
    import java.util.Date;
    import java.util.List;
    
    public class User implements Serializable {
        private String name;
        private int age;
        //日期格式处理。推荐使用spring注解
        //@DateTimeFormat(pattern = "yyyy-MM-dd")
        @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) //使用枚举
        private Date birthday;
    //set,get,tostring方法
    }
    public class Course implements Serializable {
        private String curname;
        private int score;
    
        //set,get,tostring方法
       
    }
    package com.zl.utils;
    
    import org.springframework.core.convert.converter.Converter;
    
    import java.text.ParseException;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    //拓展功能实现转换接口
    public class MyConverter implements Converter<String,Date> {
        @Override
        public Date convert(String source) {
            try {
                return new SimpleDateFormat("yyyy-MM-dd").parse(source);
            } catch (ParseException e) {
                e.printStackTrace();
            }
            return null;
        }
    }
     
  • 相关阅读:
    [转]读取并修改App.config文件
    [转]线程和进程的概念
    实习日志(3)
    实习日志2
    实习小感,回学校啦~~~~
    请教LUA高手一段代码,希望帮忙谢谢!
    实习的日子
    vs显示 error LNK2019: 无法解析的外部符号 _main解决办法
    创建一个新窗口进程并返回进程ID号和进程的主线程ID号
    显示基本图形界面第一天
  • 原文地址:https://www.cnblogs.com/21556guo/p/13761814.html
Copyright © 2020-2023  润新知