SpringMVC的学习____4.前端,控制器参数名不一致以及对象传递的解决方法

代码如下:

1.SpringMVC的web.xml文件:(DispatcherServlet配置)

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xmlns="http://java.sun.com/xml/ns/javaee"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
         http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
         id="WebApp_ID" version="3.0">

  <servlet>
    <servlet-name>springmvc</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:springmvc-servlet.xml</param-value>
    </init-param>

    <load-on-startup>1</load-on-startup>
  </servlet>

  <servlet-mapping>
    <servlet-name>springmvc</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>

</web-app>

2.SpringMVC的配置文件 (springmvc-servlet.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">

    <!--包的自动扫描-->
    <context:component-scan base-package="com.xbf.controller"/>

    <!--静态资源过滤  SpringMVC不处理静态资源-->
    <mvc:default-servlet-handler/>

    <!--注解驱动-->
    <mvc:annotation-driven/>

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

</beans>

3.Controller层的编写:

package com.xbf.controller;

import com.xbf.pojo.User;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

@Controller
public class UserController {

    @RequestMapping("/t1/{name}")
    //restful风格
    //前端请求参数名和处理的参数名一致时
    //可以直接拿过来用
    //String name就是前端请求的参数名
    public String test1(@PathVariable String name, Model model){
        model.addAttribute("aaa",name);
        return "user";
    }

    @RequestMapping("/t2")
    //前端传递过来的参数名和控制器进行处理的参数名不一致时
    //使用 @RequestPara 注解进行解释说明
    // username:前端传递过来的参数名
    // name:控制器进行处理的参数名
    public String test2(@RequestParam(value = "username") String name,Model model){
        model.addAttribute("aaa",name);
        return "user";
    }

    @RequestMapping("/t3")
    //研究对象的传递
    //使用set方法给属性设置值,若没有传值就为默认值,设值前判断属性名是否一致呢???
    //会将前端传递过来的对象属性属性值对自动封装成对象 (user)
    public String test3(User user,Model model){
        System.out.println(user);
        model.addAttribute("user",user);
        return "user";
    }

    @RequestMapping("/t333/{id}/{name}/{age}")
    //restful风格
    public String test33(User user,Model model){
        System.out.println(user);
        model.addAttribute("user",user);
        return "user";
    }

    @RequestMapping("/t33/{id}/{name}/{age}")
    //restful风格
    public String test33(@PathVariable int id,@PathVariable String name,@PathVariable int age,Model model){
        User user = new User();
        user.setName(name);
        user.setId(id);
        user.setAge(age);
        System.out.println(user);
        model.addAttribute("user",user);
        return "user";
    }

}

4.前端页面 (user.jsp)

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>

${aaa}

<hr>

<p>
    姓名:${user.getName()}
    ID:${user.getId()}
    年龄:${user.getAge()}
</p>

</body>
</html>

pojo实体类:

package com.xbf.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 +
                ‘}‘;
    }
}

总结:  DispatcherServlet将拦截的前端请求分发给某个具体的控制器,由控制器进行模型数据处理并返回。

原文地址:https://www.cnblogs.com/xbfchder/p/11324520.html

时间: 2024-11-01 09:24:29

SpringMVC的学习____4.前端,控制器参数名不一致以及对象传递的解决方法的相关文章

[JavaEE]Get请求URI中带的中文参数在服务端乱码问题的解决方法

在Get请求中,如果请求参数中带有中文,如 http://localhost:8080/DinnerParty/shop/search?query=多伦多, 在服务端拿到的是乱码. 这是因为客户端提交过去的是UTF-8编码的数据,而服务端解析URi时可能使用的是 iso8859-1编码. 修改tomcat配置文件server.xml <Connector port="8080" protocol="HTTP/1.1"               connect

You can&#39;t specify target table &#39;表名&#39; for update in FROM clause”解决方法

You can't specify target table '表名' for update in FROM clause 翻译为:不能先select出同一表中的某些值,再update这个表. 错误语句: update w_workitems ww set ww.endTime = ww.createTime where ww.gid in(select * from a_travel a ,w_workitems b where a.instance_id = b.instanceId and

前端webview开发中遇到的一些问题及其解决方法

最近做了一个webview中的兑换页面,本来以为很简单,想不到遇到了远远超出预期数量的BUG,记下来,以备后患. 1 inline-block元素折行 BUG描述:现在我有三个DIV,要在一列等宽排列,设定宽度为33.33333%,想象中应该是正好充满一列. 然而事实是,div折行了=.=,div之间还出现了一个缝隙. 这个问题很常见,出现的原因是浏览器在解析html时认为两个div之间有空格,而一个空格的占位是1/4em. 一般解决的办法是设置父元素font-size=0,然后再给子元素设置字

Python学习中,当使用writerow时输出多余的空行解决方法

今天在学习用Python进行CSV文件存储 当我以csv格式写入文件的时候,文件读取的时候出现了多余的空行,代码: 1 import csv 2 3 with open('data.csv', 'w') as csvfile: 4 writer = csv.writer(csvfile) 5 writer.writerow(['id', 'name', 'age']) 6 writer.writerow(['10001', 'Mike', '20']) 7 writer.writerow(['1

SpringMVC源代码学习外传(二)如何在重定向时传递参数&amp;FlashMap

以下内容基于书:<看透SpringMVC-源代码分析与实践> 基本照搬...用于自己查阅备忘. 加上外传关键字的是讨论一些SpringMVC的特定类的使用方法, 非外传的是对启动流程/请求处理流程,我们可以看作主线剧情. 什么是FlashMap? flashmap的作用是在redirect中传递参数.大家都知道转发 request是不变的,重定向会生成新的request,那传递参数就不能直接用request进行传递. spring提供了相应的方法解决这个问题,两种方法: //1.得到一个Fla

SpringMVC + Spring + MyBatis 学习笔记:提交数据遭遇日期格式报400错误解决方法

系统:WIN8.1 数据库:Oracle 11GR2 开发工具:MyEclipse 8.6 框架:Spring3.2.9.SpringMVC3.2.9.MyBatis3.2.8 使用SpringMVC开发的时候,页面如果有日期格式的数据,后台接受也是java.util.Date,则报告400错误 .下面是解决方案的演示示例: 这个是实体类,里面createDate就是java.util.Date类型 1 import java.util.Date; 2 3 public class User {

微信开发学习 问题1: 网页授权问题 “该连接无法访问” 解决方法

“该连接无法访问” 并不是因为参数的问题 而是因为域名 path问题造成的 使用工具 ngrok 域名地址:jrxwx.ngrok.cc 微信测试帐号 用户授权url是粘贴的 但是还是无法访问: 问题解决步骤:1 微信公众平台-->网页服务 -- > 网页帐号 --  >网页授权获取用户基本信息 修改:内容为域名地址 例如:jrxwx.ngrok.cc 只能是域名地址  2 开发程序: WeixinFinalValue.AUTH_URL 值为https://open.weixin.qq.

Oracle在更改机器名后服务无法启动的解决方法

Oracle改变机器名后会导致服务无法正常启动,可以通过下列操作解决: 1.oracle\product\10.2.0\db_3\network\ADMIN目录下,listener.ora文件中的LISTENER 改为你的新机器名,如果有域名的话加上域名: tnsnames.ora中ORCL改为你的新机器名,如果有域名的话加上域名: 2.oracle\product\10.2.0\db_3\下有个以你"旧机器名_orcl"为文件名的文件夹,把旧机器名改为新的名字 3.oracle\pr

spring中使用@RequestBody,对应的bean中属性名大写注入为空的解决方法

最近做项目用到了spring的新特性@RequestBody,非常好用,客户端发送的json串直接给转换并且注入给bean,以前自己用都是按照SUN的java命名规范进行的项目开发,没发觉有什么异常. 给客户做项目,得按照客户的需求来,客户的需求是不受什么规范约束的,恰好客户给的需求是json串里面的变量名首字母全是大写,囧,如果按照常规java命名规则的话这是给class命名的方法. 等到做出几个接口之后,自己测试时,发现用@RequestBody死活将客户端传过来的变量赋不到相应的bean中