SpringMVC环境搭建和详解

 

 

1、Spring容器和SpringMVC容器是父子容器

  1.1 SpringMVC容器可以调用Spring容器中的所有内容

  1.2 图示

2、SpringMVC环境搭建

   1、导入jar包

  2、在web.xml中配置前端控制器

    2.1 <init-param> 如果不配置会自动去 / WEB-INF/<servlet-name>-servlet.xml 中寻找

<?xml version="1.0" encoding="utf-8"?>
<web-app 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_3_0.xsd"
  version="3.0">
    <servlet>
        <servlet-name>spring</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
      自定义更改配置文件位置 <param-name>contextConfigLocation</param-name> <param-value>classpath:springmvc.xml</param-value> </init-param> <!-- tomcat启动时加载此类 --> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>spring</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> </web-app>

  3、在scr下新建 springmvc.xml

    3.1 引入 xmlns:mvc 命名空间

<?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">
        
        <!-- 扫描包 -->
        <context:component-scan base-package="com.bjsxt.controller"></context:component-scan>
        <!-- 注解驱动 -->
          <!-- org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping-->  
          <!-- org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter -->
        <mvc:annotation-driven></mvc:annotation-driven>                          配置这个标签,也就会默认配置上面两个类
        <!-- 静态资源 -->      由于控制器  / 可以拦截所有的(除.jsp)的请求,所以对静态资源放行(不要把对静态资源的请求当做是 其他请求)
        <mvc:resources location="/js/" mapping="/js/**"></mvc:resources>    
        <mvc:resources location="/css/" mapping="/css/**"></mvc:resources>
              这是在项目中的位置    这是在请求地址栏的资源 <mvc:resources location="/images/" mapping="/images/**"></mvc:resources> </beans>

  4、编写控制器类

@Controller
public class DemoController {
        @RequestMapping("demo")
        public String demo(){
            System.out.println("执行demo");
            return "/main.jsp";
        }
}

   5、字符编码过滤器

    1.1 在web.xml中配置

    <filter>
        <filter-name>charsetEncoding</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>charsetEncoding</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

  6、传参

    6.1 把内容写到方法(HandlerMethod)参数中,SpringMVC只要有这个内容,就自动注入内容

    6.2 基本数据类型参数

      6.2.1 默认保证参数名称和请求中传递的参数名相同就Ok

@Controller
public class DemoController {
        @RequestMapping("demo")
        public String demo(String name,int age){
            System.out.println("执行demo"+name+age);
            return "/main.jsp";
        }
}

            6.2.2 如果请求参数名和方法参数名不相同可以使用 @RequestParam()

        @RequestMapping("demo")      
        public String demo(@RequestParam(value="name1")String name,@RequestParam(value="age1")int age){
            System.out.println("执行demo"+name+age);
            return "/main.jsp";
        }

      6.2.3 如果方法参数是基本数据类型(不是封装类)可以通过@RequestParam设置默认值

        6.2.3.1 防止没参数时 500

        @RequestMapping("pageinfo")
        public String page(@RequestParam(defaultValue="2")int pageSize,@RequestParam(defaultValue="1")int pageNumber){
            System.out.println("执行pageinfo"+pageSize+pageNumber);
            return "main.jsp";
        }

       6.2.4 如果强制要求必须有某个参数

        @RequestMapping("hand")
        public String hand(@RequestParam(required=true)String name){
            System.out.println("name是SQL查询条件,必须要传递name参数"+name);
            return "main.jsp";
        }

      6.2.5 HandlerMethod中参数是对象类型

        6.2.5.1 请求参数名和对象中属性名对应(get/set方法)

        @RequestMapping("demo3")
        public String hand(People people){
      System.out.println(people);
            return "main.jsp";
        }

       6.2.6 请求参数中包含多个同名参数的获取方式

          如复选框(传递的就是多个同名参数)

        @RequestMapping("demo5")
        public String demo5(String name,int age,@RequestParam("hover")List<String> list){
            System.out.println(name+"   "+age+"  "+list);
            return "/main.jsp";
        }
  
  <body>
        <form action="demo5" method="post">
            <input type="text" name="name"/>
            <input type="text" name="age"/>
            <input type="checkbox" name="hover" value="学习"/>
            <input type="checkbox" name="hover" value="敲代码"/>
            <input type="checkbox" name="hover" value="健身"/>
            <input type="checkbox" name="hover" value="睡觉"/>
            <input type="submit" value="提交"/>
        </form>
  </body>

      6.2.7请求参数中 对象.属性格式

        6.2.7.1 jsp页面

  <body>
        <form action="demo5" method="post">
            <input type="text" name="peo.name"/>
            <input type="text" name="peo.age"/>
            <input type="submit" value="提交"/>
        </form>
  </body>

        6.2.7.2 新建一个类

            对象名称要与 参数中 . 前面的名称相对应

public class Demo {
    private People peo;

    public People getPeo() {
        return peo;
    }
    public void setPeo(People peo) {
        this.peo = peo;
    }
    @Override
    public String toString() {
        return "Demo [peo=" + peo + "]";
    }
}

        6.2.7.3 控制器

        @RequestMapping("demo6")
        public String demo6(Demo peo){
            System.out.println(peo);
            return "main.jsp";
        }

    6.2.8 请求参数中传递集合对象类型参数

      6.2.8.1 jsp页面

  <body>
        <form action="demo6" method="post">
            <input type="text" name="peo[0].name"/>
            <input type="text" name="peo[0].age"/>
            <input type="text" name="peo[1].name"/>
            <input type="text" name="peo[1].age"/>
            <input type="submit" value="提交"/>
        </form>
  </body>

      6.2.8.2 新建一个类

public class Demo {
    private List<People> peo;

    public List<People> getPeo() {
        return peo;
    }
    public void setPeo(List<People> peo) {
        this.peo = peo;
    }
    @Override
    public String toString() {
        return "Demo [peo=" + peo + "]";
    }
}  

      6.2.8.3 控制器中

        @RequestMapping("demo6")
        public String demo6(Demo peo){
            System.out.println(peo);
            return "main.jsp";
        }

    6.2.9 restful 传值方式

      6.2.9.1 简化jsp中参数编写格式

      6.2.9.2 在jsp中设定特定的格式

        <a href="demo7/阿旭/45">跳转</a>

      6.2.9.3 在控制器中

        6.2.9.3.1 在@RequestMapping中一定要和请求格式对应

        6.2.9.3.2 {名称} 中名称自定义名称

        6.2.9.3.3 @PathVariable 获取@RequestMapping中内容。默认按照方法参数名称去寻找

        @RequestMapping("demo7/{name1}/{age}")
        public String demo7(@PathVariable("name1")String name,@PathVariable int age){
            System.out.println(name+age);
            return "/main.jsp";
        }

  7、跳转方式

    7.1 默认跳转方式请求转发

    7.2 设置返回值字符串的内容:

      7.2.1 添加redirect  资源路径:重定向

      7.2.2 添加forward  资源路径或 省略  默认方式   转发

        @RequestMapping("demo8")
        public String demo8(){
            System.out.println("重定向");
            return "redirect:main.jsp";
        }

   8、视图解析器

    8.1  SpringMVC 会提供默认视图视图解析器

    8.2 程序员定义的视图解析器

        <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
            <property name="prefix" value="/"></property>
            <property name="suffix" value=".jsp"></property>
        </bean>
        

      8.3 如果希望不执行自定义视图解析器,在方法返回值前面加上 forward:或 redirect 

        @RequestMapping("demo8")
        public String demo8(){
            System.out.println("重定向");
            return "redirect:main.jsp";
        }
        @RequestMapping("demo9")
        public String demo9(){
            System.out.println("自定义视图解析器");
            return "main";
        }

   9、@ResponseBody

    1  在方法上只有@RequesetMapping时,无论返回值是什么都认为是跳转页面

    2 在方法上添加@ResponseBody(恒不跳转)

     2.1 如果返回值满足key-value形式(对象或map) 

       2.1.1 把响应头设置为application/json;charset=utf-8

       2.1.2 把转换后的内容输出流的形式响应给客户端

       2.2 如果返回值不满足key-value,例如 返回值为string

      2.2.1 把响应头设置为text/html

      2.2.2 把方法返回值以流的形式直接输出

      2.2.3 如果返回值包含中文,出现中文乱码

          produces表示响应头中Content-Type取值

                       需要加上 produces的属性,防止出现中文乱码     
@RequestMapping(value="demo11",produces="text/html;charset=utf-8") @ResponseBody public String demo11(){ People peo=new People(); peo.setName("阿旭旭"); peo.setAge(45); return "中文"; }

 

转载于:https://www.cnblogs.com/axu521/p/10161387.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值