创建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;
    }
}

 

 
posted on 2020-10-02 15:56  JustCrazy  阅读(394)  评论(0编辑  收藏  举报