springMVC项目学习01

springMVC项目配置


提示:以下是本篇文章正文内容,下面案例可供参考

1 springMVC学习

1.1 springMVC传参

1.1.1 请求路径传参

 //请求路径传参数
    @RequestMapping("/t1")
    public  void test1(String name,Integer age){
    
    
        //servlet中需要频繁的强制转换,springMVC框架可以自动转换
        System.out.println("name:"+name);
        System.out.println("age:"+age);

    }

1.1.2 通过HttpServletRequest对象获取参数

导入servlet-api依赖

<!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.1.0</version>
    <scope>provided</scope>
</dependency>

IDEA中输出语句System.out.println();的快捷键:sout

//通过HttpServletRequest对象获取参数
    @RequestMapping("/t2")
    public  void test2(HttpServletRequest request){
    
    
        String name = request.getParameter("name");
        String age = request.getParameter("age");
        System.out.println("name:"+name);
        System.out.println("age:"+age);

    }

1.1.3 通过表单的name属性值作为参数传到后台

1.1.3.1 get请求

1.1.3.1.1 get请求实现

先新建一个表单jsp页面(用get请求,默认get),表单标签里加 action="/t3" method=“get”( t3 是后台 @RequestMapping("/t3") )

<%--
  Created by IntelliJ IDEA.
  User: 16338
  Date: 2021/2/23
  Time: 13:57
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<form action="/t3" method="get">
    <p>
        用户名:<input type="text" name="username" placeholder="请输用户名">
    </p>
    <p>
        密码:<input type="password" name="pwd" placeholder="请输密码">
    </p>
    <p>
        邮箱:<input type="text" name="email" placeholder="请输邮箱">
    </p>
    <p>
        <input type="submit" value="注册">
    </p>

</form>
</body>
</html>

后台:

//通过表单的name属性值作为参数传到后台
    @RequestMapping("/t3")
    public  void test3(String username,String pwd,String email){
    
    
        System.out.println("username:"+username);
        System.out.println("pwd:"+pwd);
        System.out.println("email:"+email);

    }
    
1.1.3.1.2 处理get请求乱码问题

处理get请求乱码问题:tomcat依赖里添加 uriEncoding 标签使用utf-8

<!-- 导入tomcat插件-->
        <plugin>
          <groupId>org.apache.tomcat.maven</groupId>
          <artifactId>tomcat7-maven-plugin</artifactId>
          <version>2.2</version>
          <configuration>
            <port>8066</port>
            <path>/</path>
            <uriEncoding>utf-8</uriEncoding>
          </configuration>
        </plugin>

1.1.3.2 post请求

1.1.3.2.1 post请求实现

若表单内改为post请求
后台 @RequestMapping改为:

 @RequestMapping(value = "/t3",method = RequestMethod.POST)
1.1.3.2.2 处理post请求乱码问题

处理post请求乱码问题:
在web.xml文件 web-app 标签里添加过滤器

<!-- 乱码处理filter过滤器 -->
  <filter>
    <filter-name>encodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>

    <!-- 指定编码集 -->
    <init-param>
      <param-name>encoding</param-name>
      <param-value>utf8</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>encodingFilter</filter-name>

    <!-- 指定拦截方式 -->
    <url-pattern>/*</url-pattern>
  </filter-mapping>

1.1.3.3 get和post请求

若表单内get和post请求都可以
后台 @RequestMapping改为:

 @RequestMapping(value = "/t3",method = {
    
    RequestMethod.POST,RequestMethod.GET})

1.1.4 封装实体类传参

假如表单中提交的参数很多用test3这种传参方式就不太合适
所以针对提交参数多的表单,可以使用表单的name属性值封装对象,传对象到服务端即可
保证封装对象的属性和表单的name属性值一致, SpringMVC 就会完成自动封装

如将表单中的name属性封装到 User 类
在pojo包中新建User类,将属性生成 get set toString 方法

package com.qst.pojo;

public class User {
    
    
    //这个类属性表单name属性一致
    private Integer id;
    private String username;
    private String pwd;
    private String email;

    //生成 get set toString 方法

    public Integer getId() {
    
    
        return id;
    }

    public void setId(Integer id) {
    
    
        this.id = id;
    }

    public String getUsername() {
    
    
        return username;
    }

    public void setUsername(String username) {
    
    
        this.username = username;
    }

    public String getPwd() {
    
    
        return pwd;
    }

    public void setPwd(String pwd) {
    
    
        this.pwd = pwd;
    }

    public String getEmail() {
    
    
        return email;
    }

    public void setEmail(String email) {
    
    
        this.email = email;
    }

    @Override
    public String toString() {
    
    
        return "User{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", pwd='" + pwd + '\'' +
                ", email='" + email + '\'' +
                '}';
    }
}

在后台中直接用封装的User类

@RequestMapping(value = "/t5",method = RequestMethod.POST)
    public void tset5(User user){
    
    
        System.out.println(user);
    }

1.1.4 使用ajax传参

1.2 服务端如何响应数据给客户端

1.2.1 使用ModelAndView 封装视图和模型

新建test.jsp

<%--
  Created by IntelliJ IDEA.
  User: 16338
  Date: 2021/2/24
  Time: 10:16
  To change this template use File | Settings | File Templates.
--%>
<%@page isELIgnored="false" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<%--EL表达式--%>
<h2>欢迎 ${username} 登录系统</h2>
</body>
</html>

后台新建Test1Controller类:

/*服务端如何响应数据给客户端*/
@Controller
@RequestMapping("/admin")//访问:localhost:8066/admin/t1
public class Test1Controller {
    
    
    //使用ModelAndView 封装视图和模型
    @RequestMapping("/t1")
    public ModelAndView test1(ModelAndView modelAndView){
    
    
        //使用ModelAndView封装数据
        modelAndView.addObject("username","张三");
        //使用ModelAndView封装视图
        modelAndView.setViewName("test");//视图名称
        return modelAndView;
    }
}

1.2.2 使用Model对象封装数据返回

test.jsp页面将 EL表达式改了即可
后台:

//使用Model对象封装数据返回
    @RequestMapping("/t2")
    public String test2(Model model){
    
    
        model.addAttribute("address","江苏如皋");
        model.addAttribute("price","888");
        return "test";
    }

1.2.3 使用HttpServletRequest绑定数据

test.jsp页面将 EL表达式改了即可
后台:

//使用HttpServletRequest绑定数据
    @RequestMapping("/t3")
    public String test3(HttpServletRequest request){
    
    
        request.setAttribute("address","江苏如皋");
        request.setAttribute("price","888");
        return "test";//视图名 默认是转发
    }

1.2.4 使用HttpSession绑定数据

test.jsp页面将 EL表达式改了即可
后台:

//使用HttpSession绑定数据
    @RequestMapping("/t4")//HttpServletRequest request或传HttpSession,HttpServletRequest里包含HttpSession
    public String test4(HttpServletRequest request){
    
    
        HttpSession session = request.getSession();
        //使用session绑定数据
        session.setAttribute("name","张三");
        session.setAttribute("code","7799");
        return "test";//视图名 默认是转发
    }

1.2.5 使用ServletContext绑定数据

test.jsp页面将 EL表达式改了即可
后台:

//使用ServletContext绑定数据
    @RequestMapping("/t5")
    public String test5(HttpServletRequest request){
    
    
        ServletContext context = request.getServletContext();
        //使用context绑定数据
        context.setAttribute("email","[email protected]");
        context.setAttribute("code","7788");
        return "test";//视图名 默认是转发
    }

1.2.6 使用HttpServletResponse响应对象

test.jsp页面将 EL表达式改了即可
后台:

//使用HttpServletResponse响应对象
    @RequestMapping("/t6")
    public void test6(HttpServletResponse response)throws IOException {
    
    
        response.setContentType("text/html;charset=utf-8");
        PrintWriter writer = response.getWriter();
        writer.write("code:7788");
    }

1.3 json

现在公司页面视图常常选用html,因为快,效率高。
html往往发送ajax请求,服务端返回的数据类型叫json,jsp也可以发送ajax请求。
优点:轻量级,结构清晰,解析速度快
JSON格式 如:
“{“name”:“zhangsan”,“age”:10}”
即"{key:value,key:value,key:value…}"
导入插件

<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.9.8</version>
</dependency>

后台:

//将一个对象转成json字符串输出
    //在Springmvc中提供了一个注解@ResponseBody, 能够将字符串、对象、集合转成JSON字符串
    @RequestMapping("/t7")
    @ResponseBody
    public User toJson1(){
    
    
        //首先给User封装数据
        User user = new User();
        user.setId(1);
        user.setUsername("张三");
        user.setPwd("123456");
        user.setEmail("[email protected]");
        //会以JSON格式输出{"id":1,"username":"张三","pwd":"123456","email":"[email protected]"}
        return user;
    }

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_43881663/article/details/113992974