接收请求参数及数据回显

一、处理提交数据

沿用上一篇博客项目!

1.1、提交的域名称和处理方法的参数名一致

提交数据:http://localhost:8080/hello?name=Massimo
处理方法:

 @RequestMapping("hello")
    public String hello(String name){
        System.out.println(name);
        return "hello";
    }

后台输出:Massimo

1.2、提交的域名称和处理方法的参数名不一致

提交数据:http://localhost:8080/hello?username=Massimo
处理方法:

//@RequestParam("username")  username提交的域的名称
    @RequestMapping("hello")
    public String hello(@RequestParam("username") String name){
        System.out.println(name);
        return "hello";
    }

后台输出:Massimo

1.3、提交的是一个对象

实体类:

package com.massimo.pojo;

public class User {
    private int id;
    private String name;
    private int age;

    public User() {
    }

    public User(int id, String name, int age) {
        this.id = id;
        this.name = name;
        this.age = age;
    }

    public int getId() {
        return id;
    }

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

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

提交的数据:
http://localhost:8080/mvc04/user?name=Massimo&id=1&age=20

处理方法:

@RequestMapping("/user")
    public String user(User user){
        System.out.println(user);
        return "hello";
    }

后台输出:
User{id=1,name=“Massimo”,age=20}

说明:如果使用对象的话,前端传递的参数名和对象名必须一致,否则就是null。

二、数据显示到前端

2.1、第一种:通过ModelAndView

此处省略

2.2、第二种:通过Model

此处省略

2.3、第三种:通过ModelMap

@GetMapping("/hello")
    public String hello(@RequestParam("username") String name , ModelMap model){
        //封装要显示到视图中的数据
       //相当于request.setAttribute("name",name);
       model.addAttribute("msg",name);
       System.out.println(name);
       return "hello";
   }

效果:
在这里插入图片描述

三、对比

对于新手而言简单来说使用区别就是:

  • Model只有寥寥几个方法只适合用于储存数据,简化了新手对于Model对象的操作和理解;
  • ModelMap继承了LinkedMap ,除了实现了自身的一些方法,同样的继承LinkedMap 的方法和特性;
  • ModelAndView可以在储存数据的同时,可以进行设置返回的逻辑视图,进行控制展示层的跳转。

更多的以后开发考虑的更多的是性能和优化,就不能单单仅限于此的了解。

### ### 数据回显Java 三层架构中的控制层实现 在 Java Web 应用中,三层架构(表现层、业务逻辑层、数据访问层)是常见的分层设计模式。控制层(即表现层)负责接收客户端请求、调用业务逻辑层处理数据、并将结果返回给前端。对于数据回显功能,控制层需要完成请求参数解析、调用服务层获取数据、设置响应数据并转发请求到视图页面等操作。 在实现过程中,控制层通常使用 Servlet 或 Spring MVC 的 Controller 来接收请求。以下是一个基于 Servlet 的数据回显控制层实现示例: ```java import javax.servlet.*; import javax.servlet.http.*; import java.io.IOException; public class DataEchoServlet extends HttpServlet { private BrandService brandService; @Override public void init() throws ServletException { // 初始化业务层服务,通常通过 Spring 注入 brandService = new BrandService(); // 简化示例 } @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { request.setCharacterEncoding("UTF-8"); response.setContentType("text/html;charset=UTF-8"); String idParam = request.getParameter("id"); if (idParam == null || !idParam.matches("\\d+")) { request.setAttribute("error", "无效的ID参数"); request.getRequestDispatcher("/error.jsp").forward(request, response); return; } int id = Integer.parseInt(idParam); Brand brand = brandService.getBrandById(id); if (brand == null) { request.setAttribute("error", "未找到对应品牌"); request.getRequestDispatcher("/error.jsp").forward(request, response); return; } request.setAttribute("brand", brand); request.getRequestDispatcher("/editBrand.jsp").forward(request, response); } } ``` 上述代码中,控制层通过 `request.getParameter("id")` 获取请求参数,调用 `BrandService` 查询数据,并将结果存储在 `request` 中,最后通过 `RequestDispatcher` 转发请求到 JSP 页面进行展示。这种方式确保了请求与响应的分离,同时也实现了数据回显功能[^1]。 在实际项目中,控制层通常与 Spring MVC 集成,使用注解方式简化开发。例如: ```java import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestParam; @Controller public class BrandController { @Autowired private BrandService brandService; @GetMapping("/brand/edit") public String editBrand(@RequestParam("id") int id, Model model) { Brand brand = brandService.getBrandById(id); if (brand == null) { return "error"; } model.addAttribute("brand", brand); return "editBrand"; } } ``` 该方式通过 `@RequestParam` 注解获取请求参数,并通过 `Model` 对象将数据传递到视图层,进一步提升了代码的可维护性和可测试性[^1]。 在数据回显的控制层实现中,还需注意以下几点: - 请求参数的合法性校验:确保传入的参数格式正确,避免空指针或类型转换异常。 - 异常处理机制:使用 `try-catch` 块捕获异常,并将错误信息返回给用户。 - 数据绑定与视图渲染:将查询结果绑定到视图模型中,确保前端页面可以正确回显数据。 通过上述方式,控制层能够高效地完成数据回显任务,同时保持与业务逻辑层和数据访问层的解耦,提升系统的可扩展性和可维护性。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值