• SpringMVC知识点


    一、SpringMVC
    1.HelloWorld案例
    ①步骤:
    加jar包
    在web.xml文件中配置DispatcherServlet
    加入SpringMVC的配置文件
    编写处理请求的处理器,并标识为处理器
    编写视图

    ②配置web.xml文件
    DispatcherServlet
    ③创建控制器类,并标识出来
    @Controller
    handler
    ④在springmvc.xml文件中配置

    配置视图解析器:<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"></bean>
    

    ⑤访问页面
    index.jsp

    1.概述
    ①Spring为表现层提供了基于MVC设计理念的优秀的Web框架,是目前主流的MVC框架之一。
    ②Spring3.0之后全面超越Struts2,成为最优秀的MVC框架。
    ③SpringMVC通过一套MVC注解,让POJO成为处理请求的的控制器,而无需实现任何接口。
    ④支持REST风格的URL请求。
    ⑥采用了松散耦合可插拔组件结构,比其他MVC框架更具有扩展性和灵活性

    2.映射请求的注解
    ①@RequestMapping来映射一个请求的URL,SpringMVC使用@ReuqestMapping注解控制器指定可以处理
    那些URL请求,在处理器的类定义及方法定义处都可标注。
    标注在方法上,方法返回值会通过视图解析器解析为实际的物理视图,对于InternalResourceViewResolver解析器,
    会有如下解析:通过 prefix + returnVal + suffix,得到实际的物理视图,然后做转发操作。
    如:WEB-INF/views/success.jsp
    ②@RequestMapping标注位置:
    类定义:提供初步的请求映射信息,相对于web应用的根目录
    方法定义处:提供进一步的请求映射信息,相对于类定义处的URL,若类定义处标注@RequestMapping,则方法处标注相对于web应用的根目录
    ③除了可以映射URL之外,还可以映射请求参数,请求方法或请求头,@RequestMapping的value、method、params、heads
    分别表示请求URL、请求方法、请求参数、请求头,他们之间是“与”的关系,联合使用多个条件可以让请求映射更加精确化
    ④@ReuqestMapping还支持Ant的风格的URL,Ant风格资源地址支持3种匹配符
    ⑤@PathVariable映射URL绑定的占位符,带占位符的URL是Spring3.0之后新增的功能,该功能在SpringMVC向着REST目标
    挺近发展过程中具有里程碑的意义。通过@PathVariable可以将URL中占位符绑定到控制器处理方法的入参中:URL中的{xxx}
    占位符可以通过@PathVariable{“xxx”}绑定到操作方法的入参中
    ⑥@RequestPrarm映射请求参数,其中:
    value值即为请求参数的参数名
    required该参数是否必须,默认为true
    defaultValue请求参数的默认值
    ⑦@RequestHeader绑定请求报头的属性值,请求头包含若干个属性,服务器可据此获知客户端的信息,通过@RequestHeader
    即可将请求头中的属性值绑定到处理方法的入参中。
    ⑧@CookieValue绑定请求中的Cookie值
    ⑨使用POJO对象绑定请求参数值,SpringMVC会按请求参数名和POJO属性名进行自动匹配,自动为该对象填充属性值,支持级联属性

    3.REST:(资源)表现层状态转化,是目前最流行的一种互联网架构,它结构清晰、符合标准、易于理解、方便扩展,所以得到越来越多的网站的应用
    资源:网络上的一个实体,或者说网络上的一个具体信息,每种资源对应一个特定的URI。
    表现层:把资源具体呈现出来的形式
    状态转化:没发出一个请求,就代表了客户端和服务器的一次交互过程,HTTP协议是一个无状态的协议,即所有的状态都保存咋服务端,因此,客户端想要操作服务器
    必须通过某种手段,让服务器发生某种“状态转化”,而这种转化是建立在表现层之上的,所以叫做表现层状态转化。
    具体说,就是在HTTP协议里面,四种表示操作方式的动词:GET、POST、PUT、DELETE,它们分别对应四种基本操作
    GET用来获取资源,POST用来新建资源,PUT用来更新资源、DELETE用来删除资源
    示例:
    /order/1 HTTP GET:得到ID为1的order
    /order/1 HTTP DELETE:删除ID为1的order
    /order/1 HTTP PUT:更新ID为1的order
    /order HTTP POST:新增order
    HiddenHttpMethodFilter:由于浏览器form表单只支持GET和POST请求,而DELETE和PUT等method并不支持,Spring3.0添加了一个过滤器,
    可以将这些请求转化为标准的HTTP,使得支持GET、POST、PUT、DELETE请求。
    如何使用:
    ①配置org.springframework.web.filter.HiddenHttpMethodFilter过滤器:把POST请求转化为DELETE或PUT请求
    ②需要发送POST请求
    ③需要在发送POST请求时,携带一个name为”_method”的隐藏域,值为DELETE或PUT
    ④在SpringMVC的目标方法中如何得到id值呢? 使用@PathVariable注解

    4.处理模型数据ModelAndView
    SpringMVC提供了几种途径输出模型数据:
    ①ModelAndView:处理方法返回值类型为ModelAndView时,方法体即可通过该对象添加模型数据
    ②Map及Model:入参为org.springframework.ui.Model、org.springframework.ui.ModelMap或java.uti.Map、java.uti.Map
    处理方法返回时,Map中的数据会自动添加到模型中
    ③@SessionAttribute:将模型中的某个属性暂存到HttpSession中,一便多个请求之间可以共享这个属性
    ④@ModelAttribute:方法入参标注该注解之后,入参的对象就会放到数据模型中

    二、代码
    1.页面
    inde.jsp

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
    
        <!-- 1.@RequestMapping标注在方法上:映射URL请求 -->
        <a href="helloworld">Hello World!</a>
        <br><br>
    
        <!-- 2.@RequestMapping标注在类上:提供初步的请求映射信息,相对于web应用的根目录 -->    
        <a href="springmvc/testRequestMapping">testRequestMapping</a>
        <br><br>
    
        <!-- 3.@RequestMapping的method属性,因为Method属性指定为POST请求,但超链接是GET请求,所以使用from表单,更改请求方式 -->    
        <form action="springmvc/testMethod" method="post">
            <input type="submit" value="Submit"/>
        </form>
        <a href="springmvc/testMethod">testMethod</a>
        <br><br>
    
        <!-- 4.@RequestMapping映射请求参数和请求头,参数值age为10则,无法访问到资源,不是10则可以访问到 -->  
        <a href="springmvc/testParamsAndHeads?username=test&age=10">testParamsAndHeads age参数值不能为10</a>
        <br><br>
    
        <!-- 5.@RequestMapping支持Ant风格的URL -->   
        <a href="springmvc/testAntPath/123123/abc">testAntPath </a>
        <br><br>
    
        <!-- 6.@PathVariable注解 映射URL中的占位符到目标方法的参数-->    
        <a href="springmvc/testPathVariable/12">testPathVariable</a>
        <br><br>
    
        <!-- 7.REST风格的请求 -->
        <p>查找</p>
        <a href="springmvc/testRest/1">Test Rest GET</a>
        <br><br>
    
        <p>添加</p>
        <form action="springmvc/testRest" method="post">
            <input type="submit" value="Test Rest POST">
        </form>
    
    
        <p>删除</p>
        <form action="springmvc/testRest/1" method="post">
            <input type="hidden" name="_method" value="DELETE">
            <input type="submit" value="Test Rest DELETE">
        </form>
    
        <p>更新</p>
        <form action="springmvc/testRest/1" method="post">
            <input type="hidden" name="_method" value="PUT">
            <input type="submit" value="Test Rest PUT">
        </form>
    
        <!-- 8.RequestParam -->
        <a href="springmvc/testRequestParam?username=test&age=22">Test RquestParam</a>
        <br><br>
    
        <!-- 9.@RequestHeader -->
        <a href="springmvc/testRequestHeader">Test RequestHeader</a>
        <br><br>
    
        <!-- 10.@CookieValue绑定请求中的Cookie值 -->
        <a href="springmvc/testCookieValue">Test CookieValue</a>
        <br><br>
    
        <!-- 11.使用POJO对象绑定请求参数值 -->
        <form action="springmvc/testPojo" method="post">
            username:<input type="text" name="username">
            <br>
            password:<input type="password" name="password">
            <br>
            Email:<input type="text" name="email">
            <br>
            age:<input type="text" name="age">
            <br>
            city:<input type="text" name="address.city">
            <br>
            province:<input type="text" name="address.province">
            <br>
            <input type="submit" value="Submit">
        </form>
        <br><br>
    
        <!-- 12.使用Servlet原生的API -->
        <a href="springmvc/testServletAPI">Test testServletAPI</a>
        <br><br>
    
        <!-- 13.处理模型数据ModelAndView -->
        <a href="springmvc/testModelAndView">Test ModelAndView</a>
        <br><br>
    
        <!-- 14.处理模型数据Map -->
        <a href="springmvc/testMap">Test Map</a>
        <br><br>
    
        <!-- 15.处理模型数据SessionAttribute -->
    
        <!-- 
            16.处理模型数据ModelAttribute
            模拟修改操作
            1.原始数据为1,Tom,1231,test@.com,21
            2.要求:密码不能被修改
            3.表单回显,模拟操作直接在表单填写对象的属性值
         -->
        <form action="springmvc/testModelAttribute" method="post">
            <input type="hidden" name="id" value="1"/>
            userName:<input type="text" name="username" value="Tom">
            <br><br>
            Email:<input type="text" name="email" value="test@.com">
            <br><br>
            age:<input type="text" name="age" value="21">
            <br><br>
            <input type="submit" name="Submit">             
        </form>
        <br><br>
        <!-- 17.视图解析流程 -->  
        <a href="springmvc/testViewAndViewResolver">Test ViewAndViewResolver</a>
        <br><br>
    
        <!-- 18.自定义视图 -->
        <a href="springmvc/testView">Test View</a>
        <br><br>
    
        <!-- 19.重定向 -->
        <a href="springmvc/testRedirect">Test Redirect</a>
        <br><br>
    
    
    </body>
    </html>

    success.jsp

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!-- 导入国际化标签 -->
    <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
    
        <h3>Success Page</h3>
        <br><br>
    
        <!-- 处理模型数据ModelAndView -->
        time:${requestScope.time}
        <br><br>
    
        <!-- 处理模型数据Map -->
        Names:${requestScope.names }   
        <br><br>
    
        <!-- 处理模型数据SessionAttribute -->
        request User:${requestScope.user } 
        <br><br>
        <!-- 处理模型数据SessionAttribute -->
        Session User:${sessionScope.user } 
        <br><br>
        <!-- 国际化 -->
        <fmt:message key="i18n.username"></fmt:message>
        <br><br>
        <fmt:message key="i18n.password"></fmt:message>
        <br><br>
    </body>
    </html>

    2.实体类
    User.java

    package com.test.springmvc.entities;
    
    public class User {
    
        private String id;
        private String username;
        private String password;
        private String email;
        private String age;
        private Address address;
    
        public String getId() {
            return id;
        }
        public void setId(String id) {
            this.id = id;
        }
        public String getUsername() {
            return username;
        }
        public void setUsername(String username) {
            this.username = username;
        }
        public String getPassword() {
            return password;
        }
        public void setPassword(String password) {
            this.password = password;
        }
        public String getEmail() {
            return email;
        }
        public void setEmail(String email) {
            this.email = email;
        }
        public String getAge() {
            return age;
        }
        public void setAge(String age) {
            this.age = age;
        }
        public Address getAddress() {
            return address;
        }
        public void setAddress(Address address) {
            this.address = address;
        }
    
        public User(String username, String password, String email, String age) {
            super();
            this.username = username;
            this.password = password;
            this.email = email;
            this.age = age;
        }
    
        public User(String id, String username, String password, String email,
                String age) {
            super();
            this.id = id;
            this.username = username;
            this.password = password;
            this.email = email;
            this.age = age;
        }
        public User() {
            super();
        }
        /*@Override
        public String toString() {
            return "User [username=" + username + ", password=" + password
                    + ", email=" + email + ", age=" + age + ", address=" + address
                    + "]";
        }*/
        @Override
        public String toString() {
            return "User [id=" + id + ", username=" + username + ", password="
                    + password + ", email=" + email + ", age=" + age + "]";
        }
    
    
    }
    

    Address.java

    package com.test.springmvc.entities;
    
    public class Address {
    
        private String province;
        private String city;
        public String getProvince() {
            return province;
        }
        public void setProvince(String province) {
            this.province = province;
        }
        public String getCity() {
            return city;
        }
        public void setCity(String city) {
            this.city = city;
        }
        @Override
        public String toString() {
            return "Address [province=" + province + ", city=" + city + "]";
        }
    
    }
    

    3.Handle
    HelloWorld.java

    package com.test.springmvc.handlers;
    
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    
    
    @Controller
    public class HelloWorld {
    
    
        /**
         * 1.应答一个请求,使用@RequestMapping来映射一个请求的URL
         * 2.返回值会通过视图解析器解析为实际的物理视图,对于InternalResourceViewResolver解析器,会有如下解析:
         *通过 prefix + returnVal + suffix,得到实际的物理视图,然后做转发操作
         *如:WEB-INF/views/success.jsp
         */
        @RequestMapping("/helloworld")
        public String hello(){
            System.out.println("你好!");
            return "success";
        }
    
    }
    

    SpringmvcTest.java

    package com.test.springmvc.handlers;
    
    import java.util.Arrays;
    import java.util.Date;
    import java.util.Map;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.CookieValue;
    import org.springframework.web.bind.annotation.ModelAttribute;
    import org.springframework.web.bind.annotation.PathVariable;
    import org.springframework.web.bind.annotation.RequestHeader;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    import org.springframework.web.bind.annotation.RequestParam;
    import org.springframework.web.bind.annotation.SessionAttributes;
    import org.springframework.web.servlet.ModelAndView;
    
    import com.test.springmvc.entities.User;
    
    //@SessionAttributes({"user"})
    @Controller
    @RequestMapping("/springmvc")
    public class SpringmvcTest {
    
        private static String SUCCESS = "success";
    
        /**
         * 1.测试@RequestMapping标注在类定义处
         * @return
         */
        @RequestMapping("/testRequestMapping")
        public String testRequestMapping(){
            System.out.println("testRequestMapping");
            return SUCCESS;
        }
    
        /**
         * 2.常用:使用Method属性指定请求属性
         * @return
         */
        @RequestMapping(value="/testMethod", method=RequestMethod.POST)
        public String testMethod(){
            System.out.println("testMehtod");
            return SUCCESS;
        }
    
        /**
         * 3.了解:映射请求参数和请求头
         * @return
         */
        @RequestMapping(value="/testParamsAndHeads",
                    params={"username", "age!=10"}, headers={})
        public String testParamsAndHeads(){
            System.out.println("testParamsAndHeads");
            return SUCCESS;
        }
    
        /***
         * 4.Ant的风格的URL,Ant风格资源地址支持3种匹配符
         * @return
         */
        @RequestMapping("testAntPath/*/abc")
        public String testAntPath(){
            System.out.println("testAntPath");
            return SUCCESS;
        }
    
        /**
         * 4.@PathVariable注解映射URL中的占位符到目标方法的参数
         * @param id
         * @return
         */
        @RequestMapping("/testPathVariable/{id}")
        public String testPathVariable(@PathVariable("id") Integer id){
            System.out.println("testPathVariable" + id);
            return SUCCESS;
        }
    
        //5.REST风格
        /**
         * GET(查找)请求
         * @param id
         * @return
         */
        @RequestMapping(value="/testRest/{id}", method=RequestMethod.GET)
        public String testRESTGET(@PathVariable Integer id){
            System.out.println("test Rest GET:" + id);
            return SUCCESS;
        }
    
        /**
         * POST(添加)请求
         * @return
         */
        @RequestMapping(value="/testRest", method=RequestMethod.POST)
        public String testRESTPOST(){
            System.out.println("test Rest POST");
            return SUCCESS;
        }
    
        /**
         * DELETE(删除)请求
         * @param id
         * @return
         */
        @RequestMapping(value="/testRest/{id}", method=RequestMethod.DELETE)
        public String testRESTDELETE(@PathVariable Integer id){
            System.out.println("test Rest DELETE:" + id);
            return SUCCESS;
        }
    
        /**
         * PUT(更新)请求
         * @param id
         * @return
         */
        @RequestMapping(value="/testRest/{id}", method=RequestMethod.PUT)
        public String testRESTPUT(@PathVariable Integer id){
            System.out.println("test Rest PUT:" + id);
            return SUCCESS;
        }
    
    
        /**
         * 6.使用@RequestPrarm映射请求参数,其中:
         *  value值即为请求参数的参数名
         *  required该参数是否必须,默认为true
         *  defaultValue请求参数的默认值
         * @return
         */
        @RequestMapping(value="/testRequestParam")
        public String testRequestParam(@RequestParam(value="username") String un, 
                @RequestParam(value="age", required=false, defaultValue="0") int age){
            System.out.println("testRequestParam:" + un + ":" + age);
            return SUCCESS;
        }
    
        /**
         * 7.@RequestHeader绑定请求报头的属性值
         * @param al
         * @return
         */
        @RequestMapping("/testRequestHeader")
        public String testRequestHeader(@RequestHeader(value="Accept-Language") String al){
            System.out.println("testRequestHeader:Accept-Language:" + al);
            return SUCCESS;
        }
    
        /**
         * 8.@CookieValue绑定请求中的Cookie值
         * @return
         */
        @RequestMapping("/testCookieValue")
        public String testCookieValue(@CookieValue(value="JSESSIONID") String sessionId){
            System.out.println("testCookieValue:sessionID:" + sessionId);
            return SUCCESS;
        }
    
        /**
         * 9.使用POJO对象绑定请求参数值
         * @return
         */
        @RequestMapping("/testPojo")
        public String testPojo(User user){
            System.out.println("testPojo:" + user);
            return SUCCESS;
        }
    
        /**
         * 10.使用Servlet原生的API
         */
        @RequestMapping("/testServletAPI")
        public String testServletAPI(HttpServletRequest request, 
                HttpServletResponse response){
            System.out.println("testServletAPI:" + request + ":" + response);
            return SUCCESS;
        }
    
        /**
         * 11.处理模型数据1,目标方法的返回值可以是ModelAndView类型,其中可以包含视图和模型信息
         * SpringMVC会把ModelAndView的model中的数据放入到request域对象中。
         */
        @RequestMapping("/testModelAndView")
        public ModelAndView testModelAndView(){
            String viewName = SUCCESS;
            ModelAndView modelAndView = new ModelAndView(viewName);
            //添加模型数据到ModelAndView中
            modelAndView.addObject("time", new Date());
    
            return modelAndView;
        }
    
        /**
         * 12.处理模型数据2,目标方法可以添加Map类型的参数
         * @return
         */
        @RequestMapping("/testMap")
        public String testMap(Map<String, Object> map){
            map.put("names", Arrays.asList("Lili", "Tom", "Jerry"));
    
            return SUCCESS;
        }
    
        /**
         * 13.@SessionAttribute,在控制器上标注@SessionAttributes({"user"}),该注解只能放到类的上面
         * @return
         */
        @RequestMapping("/testSessionAttribute")
        public String testSessionAttribute(Map<String, Object> map){
            User user = new User("Tom", "1231", "test@qq.com", "21");
            map.put("user", user);
            return SUCCESS;
        }
    
        /**
         * 14.ModelAttribute
         * @param user:该参数的部分属性是从数据库中获取的,另一部分属性是form表单映射的数据
         * @return
         */
        @RequestMapping("/testModelAttribute")
        public String testModelAttribute(User user){
            System.out.println("修改:" + user);
            return SUCCESS;
        }
    
        /**
         * 1.有@ModelAttribute标记的方法,会在目标方法(14.testModelAttribute())执行之前被SpringMVC调用
         * 2.从数据库中取出对象
         * 3.把对象放入到Map中
         * 4.传入目标方法的参数(user),该对象的部分参数是从数据库中获取的,另一部分的属性是表单映射过来的 
         * 5.SpringMVC从Map中取出User对象,并把表单映射的参数赋值给该User对象对应的属性
         * 6.SpringMVC把上述对象传入到目标方法的参数
         *注意:在@modelAttribute修饰的方法中,放入到Map时的键需要和目标方法入参类型的第一个字母小写的字符串一致
         * @param id
         */
        @ModelAttribute
        public void getUser(@RequestParam(value="id", required=false) Integer id, Map<String, Object> map){
            System.out.println("ModelAttribute");
            if(id != null){
                //模拟从数据库库中获取对象
                User user  = new User("1", "Tom", "1231", "test@.com", "21");
                System.out.println("从数据库中获取对象");
                map.put("user", user);
            }
        }
    
        /**
         * 15.视图解析流程
         * 视图和视图解析器:
         *  对于返回类型为String、ModelAndView、View的处理方法,SpringMVC也会在内部将他们装配成一个ModelAndView对象
         *它包含了逻辑名和模型对象的视图,SpringMVC借助视图解析器得到最终的视图对象
         *ModelAndView——>ViewResolver——>视图对象(JSP/JSTL/PDF)
         *
         *  以国际化为例,演示视图解析
         */
        @RequestMapping("/testViewAndViewResolver")
        public String testViewAndViewResolver(){
            System.out.println("testViewAndViewResolver");
            return SUCCESS;
        }
    
        /**
         * 16.自定义视图
         */
        @RequestMapping("/testView")
        public String testView(){
            System.out.println("testView");
            return "helloView";
        }
    
        /**
         * 17.重定向,一般情况下,控制器方法返回字符串类型的值会被当成逻辑视图名处理,如果返回的字符串中带有forword:或
         * redirect:前缀时,SpringMVC会对他们进行特殊处理,将forword:和redirect当成指示符,其后的字符串作为URL
         * 来处理。
         */
        @RequestMapping("/testRedirect")
        public String testRedirect(){
            System.out.println("testRedirect");
            return "redirect:/index.jsp";
        }
    
    }

    4.视图类
    HelloView.java

    package com.test.springmvc.view;
    
    import java.util.Date;
    import java.util.Map;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import org.springframework.stereotype.Component;
    import org.springframework.web.servlet.View;
    
    
    /**
     * 自定义视图,注意注解@Component不能忘了
     *
     */
    @Component
    public class HelloView implements View{
    
        @Override
        public String getContentType() {
            return "text/html";
        }
    
        @Override
        public void render(Map<String, ?> arg0, HttpServletRequest arg1,
                HttpServletResponse arg2) throws Exception {
            arg2.getWriter().print("Hello View Time:" + new Date());
        }
    
    }
    

    5.配置文件
    国际化
    i18n_en_US.properties

    i18n.username=Username
    i18n.password=Password

    i18n_zh_CN.properties

    i18n.username=u7528u6237u540D
    i18n.password=u5BC6u7801

    i18n.properties

    i18n.username=Username
    i18n.password=Password

    web.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
      <display-name>Demo18_Spring_MVC</display-name>
      <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>
    
    <!-- 配置org.springframework.web.filter.HiddenHttpMethodFilter:可以把POST请求转化为DELETE或PUT请求 -->
        <filter>
            <filter-name>hiddenHttpMethodFilter</filter-name>
            <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
        </filter>
        <filter-mapping>
            <filter-name>hiddenHttpMethodFilter</filter-name>
            <url-pattern>/*</url-pattern>       
        </filter-mapping> 
    
    <!-- 配置DispatcherServlet -->
        <servlet>
            <servlet-name>dispatcherServlet</servlet-name>
            <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
            <!--    
                配置DispatcherServlet的初始化参数:配置SpringMVC配置文件的名称和位置,
            实际上也可以不通过contextConfigLocation配置SpringMVC的配置文件,而使用默认的
            默认的配置文件为:/WEB-INF/<servlet-name>-servlet.xml
            -->
            <!-- <init-param>
                <param-name>contextConfigLocation</param-name>
                <param-value>classpath:springmvc.xml</param-value>
            </init-param> -->
            <!-- 当前web应用被加载时创建 -->
            <load-on-startup>1</load-on-startup>
        </servlet>
        <servlet-mapping>
            <servlet-name>dispatcherServlet</servlet-name>
            <!-- 应答所有请求 -->
            <url-pattern>/</url-pattern>
        </servlet-mapping>
    
    
    
    </web-app>

    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: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-4.0.xsd
            http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd">
    
    <!-- 配置自动扫描的包 -->
        <context:component-scan base-package="com.test.springmvc"></context:component-scan>
    
    <!-- 配置视图解析器,如何把handler的方法返回的值解析为实际的物理视图 -->
        <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
            <!-- 配置前缀,配置前缀时,一定要注意,不能少了第一个斜杠,它代表根目录,少了的话,会因为@RequestMapping注解到类上而出现路径问题-->
            <property name="prefix" value="/WEB-INF/views/"></property>
            <!-- 配置后缀 -->
            <property name="suffix" value=".jsp"></property>
        </bean>
    
    <!-- 自定义视图,配置视图解析器:BeanNameViewResolver,使用视图的名字来解析视图,若希望下载的是一个Excel文档,
        则可以设置响应头Content-Disposition的值为attachment;filename=xxx.xls
        该配置文件中,配置了两个视图解析器,那么使用哪个呢?
        通过配置order属性,来定义视图的优先级,order的值越小,优先级越高
    --> 
        <bean class="org.springframework.web.servlet.view.BeanNameViewResolver">
            <property name="order" value="1"></property>
        </bean>
    
    <!-- 配置国际化资源文件 -->
        <bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
            <property name="basename" value="i18n"></property>
        </bean>
    
    <!-- 配置直接转发的页面,可以直接向相应的页面转发,而无需再经过Handler的方法。但是这种方法会导致@RequestMapping注解失效。 -->
        <mvc:view-controller path="/success" view-name="success"/>
    <!-- 解决办法:在实际开发中通常会配置mvc:annotation-driven  标签 -->
        <mvc:annotation-driven></mvc:annotation-driven>
    
    </beans>
    

    6.用到的jar包

    commons-logging-1.1.1.jar
    jstl.jar
    spring-aop-4.0.0.RELEASE.jar
    spring-beans-4.0.0.RELEASE.jar
    spring-context-4.0.0.RELEASE.jar
    spring-core-4.0.0.RELEASE.jar
    spring-expression-4.0.0.RELEASE.jar
    spring-web-4.0.0.RELEASE.jar
    spring-webmvc-4.0.0.RELEASE.jar
    standard.jar
  • 相关阅读:
    取消select默认样式
    浏览器私有前缀
    兼容ie的background-size: cover;
    关于字体
    lorem 快速生成x个单词
    bash常见命令
    rgba透明的兼容处理
    JDK源码分析(10) CopyOnWriteArrayList
    JDK源码分析(9) LinkedHashMap
    JDK源码分析(8) StringBuffer & StringBuilder
  • 原文地址:https://www.cnblogs.com/tengpengfei/p/10453968.html
Copyright © 2020-2023  润新知