02.SpringMVC的请求转发和重定向和ajax的学习(jQuery中的)

1.结构图

2.实体类User:

package cn.itcast.domain;

public class User {
    private String username;
    private String password;
    private Integer age;

    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 Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }
    @Override
    public String toString() {
        return "User{" +
                "username='" + username + '\'' +
                ", password='" + password + '\'' +
                ", age=" + age +
                '}';
    }
}

3.UserController控制类(表现层)

package cn.itcast.controller;

import cn.itcast.domain.User;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/*
@Controller用于标记在一个类上,使用它标记的类就是一个SpringMvc Controller对象,分发处理器会扫描使用该注解的类的方法,并检测该方法是否使用了@RequestMapping注解。
@RequestMapping一级目录
方法中的@RequestMapping二级目录
*/

@Controller
@RequestMapping("/user")
public class UserController {
//先测试能不能使用SpringMVC
    /*@RequestMapping("/testString")
    public String testString(){
        System.out.println("方法执行了.....");
        return "success";
    }*/

    /*返回值是String*/
    /*模拟:从数据库中查询一个*/
    @RequestMapping("/testString")
    public String testString(Model model){
        System.out.println("testString方法执行了.....");
        /*新建一个对象user*/
        User user = new User();
        user.setUsername("美美");
        user.setPassword("123456");
        user.setAge(23);
        model.addAttribute("user",user);
        return "success";
    }

    /*注意:返回值是void
    * 当返回值是void的时候,并不能跳转到success的页面,而是需要去找testString.jsp这样一个界面,
    * 如果自己需要跳转到success.jsp所以得自己写跳转页面(这里针对于void的就可以得出使用:请求转发和重定向)
    * 请求转发是一次不用写项目名称
    */
    @RequestMapping("/testVoid")
    public void testVoid(HttpServletRequest request, HttpServletResponse response) throws Exception {
        System.out.println("testVoid方法执行了.....");
        //编写请求转发的程序:没有通过视图解析器
        //request.getRequestDispatcher("/WEB-INF/pages/success.jsp").forward(request,response);

        //编写重定向的程序:重新发了一次请求
        //response.sendRedirect(request.getContextPath()+"/index.jsp");

        //直接进行响应:使用输出流
        //解决中文乱码
        response.setCharacterEncoding("UTF-8");
        response.setContentType("html/css;charset=utf-8");
        response.getWriter().print("你好");
        return;
    }

    /*通过ModelAndView进行把值存入域中,也可以跳转页面(经过视图解析器)*/
    @RequestMapping("/testModelAndView")
    public ModelAndView testModelAndView(){
        System.out.println("testModelAndView方法执行了.....");
        ModelAndView mv = new ModelAndView();
        //模拟从数据中查询出User对象
        User user = new User();
        user.setUsername("小风");
        user.setPassword("456");
        user.setAge(30);
        //把user对象存储到mv对象中,也会user对象存入到request对象
        mv.addObject("user",user);
        //跳转哪个页面,这个通过视图解析器
        mv.setViewName("success");
        return mv;
    }
    /*通过关键字进行页面的跳转*/
    @RequestMapping("/testForwardOrRedirect")
    public String testForwardOrRedirect(){
        System.out.println("testForwardOrRedirect方法执行了.....");
        //请求转发
        //return "forward:/WEB-INF/pages/success.jsp";
        //重定向
        return "redirect:/index.jsp";
    }
//-----------------------------------------------

    /*通过ajax的请求:模拟异步和响应*/
    /*通过请求体拿到json格式传过来的一些数据*/
   /* @RequestMapping("/testAjax")
    public void testAjax(@RequestBody String body){
        System.out.println("testForwardOrRedirect方法执行了.....");
        System.out.println("获取请求数据="+body);
    }*/

   /*将前端传过来的json数据进行封装到javaBean的对象当中去。
   然后进行格式转换做响应发给前端,前端进行使用*/
    @RequestMapping("/testAjax")
    public @ResponseBody User testAjax(@RequestBody User user){
        System.out.println("testForwardOrRedirect方法执行了.....");
        //客户端发送ajax的请求,传的是json字符串,后端把json字符串封装到user对象中
        System.out.println("获取请求数据="+user);
        //做响应,模拟修改数据库数据,将前端传过来的数据进行改变,然后再发送到前端
        user.setUsername("hahahha");
        user.setAge(40);
        //做响应:响应后端
        return user;
        /*此时因为前端传过来的是一个json格式的数据,
          所以后端得加一个注解@ResponseBody,内部将json转换为对象数据格式,
          这样才能被后端使用
          前提:导入将对象转为json的依赖
         */
        //最后会返回一个user的数据到前端,然后前端进行使用
    }
}

4.springmvc.xml

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd">
    <!--开启注解扫描-->
    <context:component-scan base-package="cn.itcast"></context:component-scan>
    <!--配置视图解析器来找到success.jsp并且解析该视图-->
    <!--属性:id:解析器名 class:InternalResourceViewResolver解析器-->
    <bean id="internalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <!--文件目录下:前缀:prefix-->
        <property name="prefix" value="/WEB-INF/pages/"></property>
        <!--前缀:prefix:后缀为jsp的所有-->
        <property name="suffix" value=".jsp"></property>
    </bean>

    <!--因为在web.xml中的配置拦截器,一些资源会被拦截到,所以得取消对一些资源得拦截-->
    <!--取消前端控制器中对某些资源的一些不可拦截-->
    <!--属性:
        location:指location指定的目录不要拦截,直接请求,这里指在根目录下的resources文件下的所有文件
        mapping:值在resources文件下的所有文件(**代表所有文件)
    -->
    <!--这样的格式才对-->
    <mvc:resources mapping="/images/**"  location="/WEB-INF/images/"/>
    <mvc:resources mapping="/css/**"  location="/WEB-INF/css/" />
    <mvc:resources mapping="/js/**"  location="/WEB-INF/js/" />
    <!--开启springMVC框架注解的支持:默认对处理映射器和处理器适配器进行关联__________如果没有默认的适配器,那就再注解支持中加入-->
    <mvc:annotation-driven/>
</beans>

5.web.xml(各种模块的配置)

<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
  <display-name>Archetype Created Web Application</display-name>
  <!--01.前端控制器servlet-->
  <servlet>
    <servlet-name>dispatcherServlet</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>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <!--02.映射:/表示在什么路径下都可以-->
  <!--可以被请求到-->
  <servlet-mapping>
    <!--05.映射到这里来使用-->
    <servlet-name>dispatcherServlet</servlet-name>
    <!--03.你拦截的路径,发任何请求都会经过这个拦截到-->
    <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>

6.success.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<html>
<head>
    <title>成功页面</title>
</head>
<body>
    <h3>跳转成功</h3>
    ${user.username}
    ${user.password}
    ${user.age}
</body>
</html>

7.index.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>02day的学习</title>
</head>
<body>
    <h3>重定向过来的</h3>
</body>
</html>

8.response.jsp(ajax前端发请求)

<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<html>
<head>
    <title>Title</title>
    <%--此时前端控制器已经拦截/以下的所有路径,所有得去springmvc.xml中去配置一些资源的不可拦截:js、images、css、icon等--%>
    <%--路径很重要--%>
    <%--加了一个type="text/javascript"都报错--%>
    <script type="text/javascript" src="js/jquery.min.js"></script>
<%--页面加载,绑定单击事件--%>
    <script>
        // 页面加载,绑定单击事件
        $(function(){
            $("#btn").click(function(){
                alert("hello btn");
                /*发送ajax请求*/
                $.ajax({
                    /*请求地址*/
                    url:"user/testAjax",
                    /*数据类型:json,防止中文乱码*/
                    contentType:"application/json;charset=UTF-8",
                    /*数据,可以嵌套*/
                    data:'{"username":"张三","password":"123456","age":30}',
                    /*数据格式:json*/
                    dataType:"json",
                    /*请求类型post*/
                    type:"post",
                    /*请求成功之后的回调函数*/
                    success:function (data) {
                        //data服务器端响应的json的数据,进行解析
                        console.log("用户名:"+data.username);
                        console.log("密码:"+data.password);
                        console.log("年龄:"+data.age);
                    }
                })
            });
        });
    </script>
</head>
 <%--重定向--%>
<body>
    <%--返回值是一个字符串--%>
    <a href="user/testString">testString点击跳转</a><br>
    <%--返回值是空--%>
    <a href="user/testVoid">testVoid点击跳转</a><br>
    <%--通过模型Model和视图View--%>
    <a href="user/testModelAndView">testModelAndView点击跳转</a><br>
    <%--通过关键字进行跳转和重定向--%>
    <a href="user/testForwardOrRedirect">testForwardOrRedirect点击跳转</a><br>
    <%--模拟ajax请求--%>
    <button id="btn">点击发送ajax请求</button>
</body>
</html>

9.pom.xml

<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>servlet-api</artifactId>
    <version>2.5</version>
    <scope>provided</scope>
  </dependency>

  <dependency>
    <groupId>javax.servlet.jsp</groupId>
    <artifactId>jsp-api</artifactId>
    <version>2.0</version>
    <scope>provided</scope>
  </dependency>
  <!--解决maven工程创建过慢的问题:create之后加入-->

  <!--将json数据封装成对象使用javaBean的来操作-->
  <!--一般在异步ajax请求中操作-->
  <dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.9.0</version>
  </dependency>
  <dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-core</artifactId>
    <version>2.9.0</version>
  </dependency>
  <dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-annotations</artifactId>
    <version>2.9.0</version>
  </dependency>


</dependencies>

总结:有一个好的电脑是成为一个好的程序员的一半。

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值