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 "中文";
}

SpringMVC环境搭建和详解的更多相关文章

  1. Mybatis简介、环境搭建和详解

    简介: 1.Mybatis  开源免费框架,原名叫iBatis,2010在google code,2013年迁移到github 2.作用: 数据访问层框架 2.1  底层是对JDBC的封装 3.myb ...

  2. 大数据学习系列之四 ----- Hadoop+Hive环境搭建图文详解(单机)

    引言 在大数据学习系列之一 ----- Hadoop环境搭建(单机) 成功的搭建了Hadoop的环境,在大数据学习系列之二 ----- HBase环境搭建(单机)成功搭建了HBase的环境以及相关使用 ...

  3. visual studio 2015下使用gcc调试linux c++开发环境搭建完整详解

    一直以来,相信绝大部分的开发都是windows/mac下做开发,尤其是非嵌入式和qt系的,而开源服务器程序绝大部分都是跑在Linux下,几乎就没有跑在windows下的.一直以来开发人员都是在wind ...

  4. Jmeter(一) - 从入门到精通 - 环境搭建(详解教程)

    1.JMeter 介绍 Apache JMeter是100%纯JAVA桌面应用程序,被设计为用于测试客户端/服务端结构的软件(例如web应用程序).它可以用来测试静态和动态资源的性能,例如:静态文件, ...

  5. windows环境搭建jira 详解

    一.事前准备 1:JDK下载并安装:http://www.oracle.com/technetwork/java/javase/downloads/index.html2:MySQL JDBC连接驱动 ...

  6. 大数据学习系列之七 ----- Hadoop+Spark+Zookeeper+HBase+Hive集群搭建 图文详解

    引言 在之前的大数据学习系列中,搭建了Hadoop+Spark+HBase+Hive 环境以及一些测试.其实要说的话,我开始学习大数据的时候,搭建的就是集群,并不是单机模式和伪分布式.至于为什么先写单 ...

  7. idea spring+springmvc+mybatis环境配置整合详解

    idea spring+springmvc+mybatis环境配置整合详解 1.配置整合前所需准备的环境: 1.1:jdk1.8 1.2:idea2017.1.5 1.3:Maven 3.5.2 2. ...

  8. Scala IDEA for Eclipse里用maven来创建scala和java项目代码环境(图文详解)

    这篇博客 是在Scala IDEA for Eclipse里手动创建scala代码编写环境. Scala IDE for Eclipse的下载.安装和WordCount的初步使用(本地模式和集群模式) ...

  9. 用maven来创建scala和java项目代码环境(图文详解)(Intellij IDEA(Ultimate版本)、Intellij IDEA(Community版本)和Scala IDEA for Eclipse皆适用)(博主推荐)

    不多说,直接上干货! 为什么要写这篇博客? 首先,对于spark项目,强烈建议搭建,用Intellij IDEA(Ultimate版本),如果你还有另所爱好尝试Scala IDEA for Eclip ...

随机推荐

  1. jdbc java远程连接mysql数据库服务器

    首先,需要注意以下几点: 1.手机需要获得可以访问网络的权限: 2.导入的jdbc驱动的版本需要与mysql服务器的版本相近: 3.mysql默认的访客是只允许本机(localhost),不允许其他主 ...

  2. fragment 与activity通信 Bundle 序列化数据 Serializable

    1.fragment简单套用(静态调用): 新建一个fragment,其xml文件如下: <LinearLayout xmlns:android="http://schemas.and ...

  3. 【资料整理】ADO.NET

    ADO.NET: 1.SYSTEM.DATA 命名空间下类的集合的统称,用于操作 连接数据库的 它提供了统一的编程接口,可以操作不同的数据库 数据库实例:默认实例(MSSQLSEVER)和命名实例(M ...

  4. 三个<li>元素放一行

    <ul><li style="float:left;display:inline;">0</li><li style="floa ...

  5. springMVC项目部署 服务器启动spring容器报错bean未从类加载器中找到

    bean未从类加载器中找到 警告: Exception encountered during context initialization - cancelling refresh attempt: ...

  6. Python开发【第四篇】:模块

    双层装饰器示例 __author__ = 'Golden' #!/usr/bin/env python # -*- coding:utf-8 -*-     USER_INFO = {}     de ...

  7. Java_10.1继承应用

    /*   *  描述学生和工人两个类   name  age进行抽取 ,父类 Person 提供set   get   *  同时创建学生和工人对象  必须明确年龄和姓名  并且控制台输出 * */ ...

  8. Java 获取CPU、内存、外网IP等硬件信息

    import java.io.BufferedReader; import java.io.File; import java.io.IOException; import java.io.Input ...

  9. 利用jenkins+saltstack+sh部署项目到多台服务器

    jenkins的配置(这里作用只是当做界面使用,利用它来管理执行salt命令,这里以 shop.51ekt.com 这个项目目录为例) 1.利用参数化构建项目,来实现是发布还是回滚操作: 2.构建操作 ...

  10. msysgit解决中文乱码问题

    项目中在用git,安装msysgit客户端后处理中文是有问题的: ls中文目录/文件名乱码:提交中文的log,push到服务器上会乱码:git log查看服务器pull过来的log乱码. 1.ls命令 ...