springMVC_day01

springmvc

pom文件
 <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
    <spring.version>5.0.2.RELEASE</spring.version>
  </properties>

  <dependencies>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>${spring.version}</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</ groupId>
      <artifactId>spring-web</ artifactId>
      <version>${spring.version}</version>
    </dependency>

    <dependency>
      <groupId> org.springframework </groupId>
      <artifactId> spring-webmvc </artifactId>
      <version>${spring.version}</version>
    </dependency>

    <dependency>
      <groupId> javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>2.5.0</version>
      <scope>provided</scope>
    </dependency>

    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
web.xml配置
<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>
          <!-- 配置servlet启动时加载对象 -->
          <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>dispatcherServlet</servlet-name>
    <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>
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">

    <!-- 配置spring创建容器时要扫描的包 -->
    <context:component-scan base-package="com.xymh" />

    <!-- 配置视图解析器 -->
    <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/pages/"></property>
        <property name="suffix" value=".jsp"></property>
    </bean>

    <!-- 配置Spring开启注解mvc的支持 -->
    <mvc:annotation-driven/>

</beans>

请求参数绑定

  1. RequestMapping:用于路径绑定
@RequestMapping("/hello")
    public String sayhello(){
        System.out.println("Say Hello!");
        return "success";
    }
  1. @RequestParam
    1.做用:把请求中的指定名称的参数传递给控制器中的形参赋值
    2.属性:
    value:请求参数中的名称
    required:请求参数中是否必须提供此参数,默认是true,必须提供
 @RequestMapping("/hello2")
    public String sayhello2(@RequestParam(value = "username",required = true)String name){
        System.out.println("Say Hello!");
        System.out.println(name);
        return "success";
    }

3 @RequestBody
1.作用:用于获取请求体的内容(get方法不可以用)
2.属性
1. required:是否必须有请求体,默认是true

 @RequestMapping("/hello3")
    public String sayhello3(@RequestBody String name){
        System.out.println("Say Hello!");
        System.out.println(name);
        return "success";
    }

4.@PathVariable: 接收请求
1.作用:拥有绑定url中的占位符。例如:url中有hello4/{id},id就是占位符
2.属性:
value:指定url中的占位符名称
3.Restful风格的URL
1.请求路径一样,可以根据不同的请求方式去执行后台的不同方法
2.restful风格的URL优点
1.结构清晰
2.符合标准
3.易于理解
4.扩展方便

 @RequestMapping("/hello4/{id}")
    public String sayhello4(@PathVariable(value = "id") String id){
        System.out.println("Say Hello!");
        System.out.println(id);
        return "success";
    }

5.@RequestHeader
作用:获取指定请求头的值
属性:
value:请求头的名称

 @RequestMapping("/hello5")
    public String sayhello5(@RequestHeader(value = "Accept") String header){
        System.out.println("Say Hello!");
        System.out.println(header);
        return "success";
    }
  1. @CookieValue
    作用:用于获取指定cookie的名称的值
    属性:
    value:cookie的名称
 @RequestMapping("/hello6")
    public String sayhello6(@CookieValue(value = "JSESSIONID") String cookieValue){
        System.out.println("Say Hello!");
        System.out.println(cookieValue);
        return "success";
    }
  1. @ModelAttribute
    作用:
    1.出现在方法上:表示当前方法会在控制器方法执行前先执行
    2.出现在参数上:获取指定的数据给参数赋值
    应用场景:
    当提交表单数据不是完整的实体数据时,保证没有提交的字段使用数据库原来的数据
  //作用在方法上
 @ModelAttribute
    public User showUser(String name){
        System.out.println("showUser执行了");
        //模拟从数据库中查询对象
        User user = new User();
        user.setName("小王");
        user.setPasswprd("123");
        user.setMoney(100d);
        return user;
    }
    @RequestMapping("/updateUser")
    public String updateUser(User user){
        System.out.println("Say Hello!");
        System.out.println(user);
        return "success";
    }
 //作用在方法上的先执行,获取user对象,存入到map集合中
    @ModelAttribute
    public void showUser(String name, Map<String,User> map){
        System.out.println("showUser执行了");
        //模拟从数据库中查询对象
        User user = new User();
        user.setName("小王");
        user.setPasswprd("123");
        user.setMoney(200d);
        map.put("abc",user);
    }

    @RequestMapping("/updateUser2")
    public String updateUser2(@ModelAttribute(value = "abc") User user){
        System.out.println("Say Hello!");
        System.out.println(user);
        return "success";
    }

8.@SessionAttributes: 往session域里面存储值

@Controller
@RequestMapping("/user")
@SessionAttributes(value = {"username","password","age"}
        ,types = {String.class,Integer.class}) //将数据存入session域对象中
public class TestController03 {

    /**
     *      向session域中存入值
     * @param model
     * @return
     */
    @RequestMapping("save")
    public String save(Model model){
        System.out.println("向session域中保存数据");
        model.addAttribute("username","root");
        model.addAttribute("password","root");
        model.addAttribute("age",16);
        return "success";
    }

    /**
     *      在session域中查询值
     * @param modelMap
     * @return
     */
    @RequestMapping("find")
    public String find(ModelMap modelMap){
        String username = (String) modelMap.get("username");
        String password = (String) modelMap.get("password");
        Integer age = (Integer) modelMap.get("age");
        System.out.println(username+":"+password+":"+age);
        return "success";
    }

    /**
     *      清空session域
     * @param status
     * @return
     */
    @RequestMapping("delete")
    public String delete(SessionStatus status){
        System.out.println("清除session域中数据");
        status.setComplete();
        return "success";
    }
}
SpringMVC 中,我们可以通过 ResponseBody 注解返回音频流,具体步骤如下: 1. 在 Controller 中定义一个返回类型为 ResponseEntity<byte[]> 的方法,该方法需要使用 @ResponseBody 注解标注。 2. 在方法中获取音频文件的字节数组,并将其放入 ResponseEntity 对象中返回。 3. 在 ResponseEntity 对象中设置 Content-Type、Content-Disposition 等响应头,以便浏览器正确解析音频流并进行播放。 示例代码如下: ```java @RequestMapping("/audio") @ResponseBody public ResponseEntity<byte[]> getAudio() throws IOException { // 读取音频文件字节数组 InputStream in = getClass().getResourceAsStream("/static/audio/sample.mp3"); byte[] audioBytes = IOUtils.toByteArray(in); // 设置响应头 HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.parseMediaType("audio/mpeg")); headers.setContentDispositionFormData("attachment", "sample.mp3"); // 返回音频流 return new ResponseEntity<>(audioBytes, headers, HttpStatus.OK); } ``` 上述代码中,我们将音频文件 sample.mp3 放在了项目的 /static/audio 目录下。在方法中,我们使用 IOUtils.toByteArray() 方法将音频文件转换为字节数组,并将其放入 ResponseEntity 对象中返回。在设置响应头时,我们使用 MediaType.parseMediaType() 方法设置 Content-Type,使用 setContentDispositionFormData() 方法设置 Content-Disposition。最后,我们通过 new ResponseEntity<>(audioBytes, headers, HttpStatus.OK) 创建 ResponseEntity 对象并返回。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值