springmvc-210803-02---处理器方法的参数&Post请求中文乱码

本文详细介绍SpringMVC中处理器方法的四类参数及其使用方法,包括HttpServletRequest、HttpServletResponse、HttpSession及请求中携带的参数。并通过实例演示如何处理逐个接收参数、对象接收参数等问题,并解决POST请求中文乱码问题。

springmvc-210803-02—处理器方法的参数&Post请求中文乱码


处理器方法的四类参数

处理器方法可以包含以下四类参数,这些参数会在系统调用时由系统自动赋值,即程序员可在方法内直接使用。
    ➢ HttpServletRequest
    ➢ HttpServletResponse
    ➢ HttpSession
    ➢ 请求中所携带的请求参数
    	1) 逐个接收
    	2) 对象接收

下面演示—请求中所携带的请求参数

在提交请求参数时,
get请求方式没有中文乱码,
post提交请求,会出现中文乱码,需要使用过滤器处理乱码问题。

过滤器可以自定义,也可以使用框架提供的过滤器CharacterEncodingFilter。

index.jsp(主页面)

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>springmvc</title>
</head>
<body>
    <form action="test/some.do" method="post">
        <span>测试逐个接收参数</span>
        <br/>
        <span>name:</span><input type="text" name="name"/>
        <br/>
        <span>age:</span><input type="text" name="age"/>
        <br/>
        <button type="submit">提交</button>
    </form>

    <hr/>
    <hr/>
    <hr/>

    <form action="test/testRequestParam.do" method="post">
        <span>测试注解@RequestParam</span>
        <br/>
        <span>name:</span><input type="text" name="u_name"/>
        <br/>
        <span>age:</span><input type="text" name="u_age"/>
        <br/>
        <button type="submit">提交</button>
    </form>

    <hr/>
    <hr/>
    <hr/>

    <form action="test/testReceiveObjectParam.do" method="post">
        <span>测试接收对象参数</span>
        <br/>
        <span>name:</span><input type="text" name="u_name"/>
        <br/>
        <span>age:</span><input type="text" name="u_age"/>
        <br/>
        <button type="submit">提交</button>
    </form>
</body>
</html>

MyController.java(处理器—处理请求参数)

package com.bgy.controller;

import com.bgy.vo.Student;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;

@Controller
@RequestMapping("/test")
public class MyController {

    /**
     *  测试逐个接收请求参数:
     *         要求:处理器方法的形参名和请求中的形参名必须一致,
     *              同名的请求参数赋值给同名的形参。
     *
     *         框架接收请求参数:
     *             1. 使用request对象接收请求参数  doSome(HttpServletRequest request){}
     *                String u_name = request.getParameter("name");
     *                String u_age = request.getParameter("age");
     *
     *             2. springmvc框架通过DispatcherServlet,调用MyController的doSome(),
     *                按名称对应,把接收的参数赋值给形参,
     *                框架会提供类型转换功能,能把String转换为int,long,float,double等。
     */
    /*
        这个方法doSome(String name , Integer age)的参数要和jsp页面的形参一样

        Integer age 如果不用包装类定义,,而是这样定义 int age,
        当参数为空的时候,会报错,
        浏览器页面报错:HTTP Status 400
        控制台报错:Failed to convert value of type 'java.lang.String' to required type 'int';
            也就是说无法把空值转换为数字
     */
    @RequestMapping(value = "/some.do")
    public ModelAndView doSome(String name , Integer age){
        ModelAndView mv= new ModelAndView();
        mv.addObject("u_name",name);
        mv.addObject("u_age",age);
        mv.addObject("message","这是测试逐个接收请求");

        System.out.println(name+" : "+age);
        mv.setViewName("show");

        // 返回mv
        return mv;
    }

    /**
     *  测试注解@RequestParam
     *
     *  注解@RequestParam用来解决请求中参数名和处理器方法中参数名不一致,
     *  用在逐个接收对象中。
     *      属性value:请求中的参数名称
     *      位置:在处理器方法形参定义前面----> @RequestParam(value = "u_name") String name
     */
    @RequestMapping(value = "/testRequestParam.do")
    public ModelAndView testRequestParam(@RequestParam(value = "u_name") String name , @RequestParam(value = "u_age")Integer age){
        ModelAndView mv= new ModelAndView();
        mv.addObject("u_name",name);
        mv.addObject("u_age",age);
        mv.addObject("message","这是测试注解@RequestParam");

        System.out.println(name+" : "+age);
        mv.setViewName("show");

        // 返回mv
        return mv;
    }

    /**
     *  测试接收对象参数
     *
     *  处理器方法的形参是java对象,这个对象中的属性要和请求中的参数名一致。
     *  框架爱会自动创建java对象,给属性赋值
     */
    @RequestMapping(value = "/testReceiveObjectParam.do")
    public ModelAndView testReceiveObjectParam(Student student){

        System.out.println(student);
        ModelAndView mv= new ModelAndView();

        mv.addObject("u_name",student.getU_name());
        mv.addObject("u_age",student.getU_age());
        mv.addObject("message","这是测试接收对象参数");

        mv.setViewName("show");

        // 返回mv
        return mv;
    }
}

web.xml(配置过滤器解决post中文乱码)

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
                      http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0"
         metadata-complete="true">

  <!-- 配置过滤器,解决post请求中文乱码问题 -->
  <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>

    <!-- 强制请求对象(HttpServletResponse)使用encoding编码的值 -->
    <init-param>
      <param-name>forceResponseEncoding</param-name>
      <param-value>true</param-value>
    </init-param>

    <!-- 强制应答对象(HttpServletRequest)使用encoding编码的值 -->
    <init-param>
      <param-name>forceRequestEncoding</param-name>
      <param-value>true</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>characterEncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>


  <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.xml</param-value>
    </init-param>

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

  <servlet-mapping>
    <servlet-name>springmvc</servlet-name>
    <url-pattern>*.do</url-pattern>
  </servlet-mapping>

</web-app>

show.jsp(结果页面)

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>show</title>
</head>
<body>
    <span>message:${message}</span>
    <br/>
    <span>u_name:${u_name}</span>
    <br/>
    <span>u_age:${u_age}</span>
</body>
</html>

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"
       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">

    <!-- 开启组件扫描 -->
    <context:component-scan base-package="com.bgy.controller"></context:component-scan>

    <!-- 声明springmvc框架中的视图解析器,帮助开发人员设置视图文件的路径 -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <!-- 前缀 -->
        <property name="prefix" value="/WEB-INF/view/"></property>
        <!-- 后缀 -->
        <property name="suffix" value=".jsp"></property>
    </bean>
</beans>

Student.java

package com.bgy.vo;

public class Student {

    // 使用对象接收,这里的参数要和请求中的参数名保持一致。
    private String u_name;
    private String u_age;

    public Student() {
        System.out.println("Student无参构造执行了。。。。。");
    }

    public String getU_name() {
        return u_name;
    }

    public void setU_name(String u_name) {
        this.u_name = u_name;
    }

    public String getU_age() {
        return u_age;
    }

    public void setU_age(String u_age) {
        this.u_age = u_age;
    }

    @Override
    public String toString() {
        return "Student{" +
                "u_name='" + u_name + '\'' +
                ", u_age='" + u_age + '\'' +
                '}';
    }
}
内容概要:本文提出了一种基于非合作博弈理论的居民负荷分层调度模型,并结合双层鲸鱼优化算法(Two-level Whale Optimization Algorithm)进行高效求解,模型与算法均通过Matlab代码实现。研究针对电力系统中居民侧用电负荷的复杂调度问题,引入非合作博弈机制刻画各用户之间的利益竞争关系,实现负荷的分层优化分配;同时设计双层优化架构,上层优化资源配置,下层模拟用户自主决策行为,提升了模型的实用性与合理性。通过智能优化算法求解多层级、非凸非线性的博弈模型,有效提高了调度方案的收敛性与全局寻优能力,适用于现代智能电网中的需求侧管理与能源优化场景。; 适合人群:具备电力系统基础理论知识和Matlab编程能力,从事智能电网、能源优化调度、需求侧管理、博弈论应用等方向的科研人员、高校研究生及工程技术人员。; 使用场景及目标:①应用于居民区电力负荷的分层优化调度系统设计与仿真分析;②为非合作博弈在多主体能源系统建模中的应用提供方法论支持;③利用双层鲸鱼算法解决具有嵌套结构的复杂双层优化问题,提升求解效率与调度方案的可行性。; 阅读建议:建议读者结合提供的Matlab代码深入理解模型构建逻辑与算法实现流程,重点关注博弈模型的效用函数设计、纳什均衡求解思路以及双层优化结构的迭代机制,宜配合实际用电数据开展复现实验以验证模型有效性与鲁棒性。
内容概要:本文围绕基于自适应神经模糊推理系统(ANFIS)智能控制器的可再生能源微电网功率管理系统展开研究,结合Simulink仿真实现,深入探讨了微电网中功率的智能调控与经济机组组合调度问题。通过引入ANFIS控制器,有效应对风能、光伏等可再生能源出力的波动性与不确定性,提升系统运行的稳定性与电能质量。研究内容涵盖微电网多源协调控制策略、功率平衡管理、优化调度模型构建及仿真验证,实现了对分布式电源、储能系统和负荷的协同优化,兼顾经济性与可靠性目标,并通过仿真平台验证了所提方法的有效性与优越性。; 适合人群:具备电力系统、自动化或新能源相关专业背景,熟悉Matlab/Simulink仿真环境,从事微电网能量管理、智能控制、能源优化等领域研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①用于高比例可再生能源接入场景下的微电网能量管理系统研发与教学实践;②为实现微电网功率稳定控制与经济高效运行提供先进的智能控制解决方案;③支撑高水平学术论文复现、科研课题攻关及实际工程项目的仿真验证与方案优化。; 阅读建议:建议结合提供的Simulink模型与相关代码进行动手实践,重点关注ANFIS控制器的设计流程、规则库构建与参数调优方法,并通过与传统PID或MPC控制策略的对比实验,深入理解其在动态响应与鲁棒性方面的优势。同时可进一步拓展文中提出的优化调度逻辑,应用于多目标、多约束的复杂实际应用场景中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值