jsp中request取值和java中request取值问题

最近在做支付宝即时到账

alipayapi.jsp
 <%@page import="java.io.Console"%>
<%
/* *
 *功能:即时到账交易接口接入页
 *版本:3.4
 *修改日期:2016-03-08
 *说明:
 *以下代码只是为了方便商户测试而提供的样例代码,商户可以根据自己网站的需要,按照技术文档编写,并非一定要使用该代码。
 *该代码仅供学习和研究支付宝接口使用,只是提供一个参考。

 *************************注意*****************
 *如果您在接口集成过程中遇到问题,可以按照下面的途径来解决
 *1、开发文档中心(https://doc.open.alipay.com/doc2/detail.htm?spm=a219a.7629140.0.0.KvddfJ&treeId=62&articleId=103740&docType=1)
 *2、商户帮助中心(https://cshall.alipay.com/enterprise/help_detail.htm?help_id=473888)
 *3、支持中心(https://support.open.alipay.com/alipay/support/index.htm)
 *如果不想使用扩展功能请把扩展功能参数赋空值。
 **********************************************
 */
%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="com.alipay.config.*"%>
<%@ page import="com.alipay.util.*"%>
<%@ page import="java.util.HashMap"%>
<%@ page import="java.util.Map"%>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>支付宝即时到账交易接口</title>
    </head>
    <%
        ////////////////////////////////////请求参数//////////////////////////////////////

        //商户订单号,商户网站订单系统中唯一订单号,必填
        String out_trade_no = new String(request.getParameter("WIDout_trade_no").getBytes("ISO-8859-1"),"UTF-8");

        //订单名称,必填
        String subject = new String(request.getParameter("WIDsubject").getBytes("ISO-8859-1"),"UTF-8");

        //付款金额,必填
        String total_fee = new String(request.getParameter("WIDtotal_fee").getBytes("ISO-8859-1"),"UTF-8");

        //商品描述,可空
        String body = new String(request.getParameter("WIDbody").getBytes("ISO-8859-1"),"UTF-8");

        System.out.print(subject);

        //////////////////////////////////////////////////////////////////////////////////

        //把请求参数打包成数组
        Map<String, String> sParaTemp = new HashMap<String, String>();
        sParaTemp.put("service", AlipayConfig.service);
        sParaTemp.put("partner", AlipayConfig.partner);
        sParaTemp.put("seller_id", AlipayConfig.seller_id);
        sParaTemp.put("_input_charset", AlipayConfig.input_charset);
        sParaTemp.put("payment_type", AlipayConfig.payment_type);
        sParaTemp.put("notify_url", AlipayConfig.notify_url);
        sParaTemp.put("return_url", AlipayConfig.return_url);
        sParaTemp.put("anti_phishing_key", AlipayConfig.anti_phishing_key);
        sParaTemp.put("exter_invoke_ip", AlipayConfig.exter_invoke_ip);
        sParaTemp.put("out_trade_no", out_trade_no);
        sParaTemp.put("subject", subject);
        sParaTemp.put("total_fee", total_fee);
        sParaTemp.put("body", body);
        //其他业务参数根据在线开发文档,添加参数.文档地址:https://doc.open.alipay.com/doc2/detail.htm?spm=a219a.7629140.0.0.O9yorI&treeId=62&articleId=103740&docType=1
        //如sParaTemp.put("参数名","参数值");

        //建立请求
        String sHtmlText = AlipaySubmit.buildRequest(sParaTemp,"get","确认");
        System.out.print(sHtmlText);
        out.println(sHtmlText);
    %>
    <body>
    </body>
</html>

整合成servlet java代码

 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //订单号
        String out_trade_no = getTradeNo();
        PrintWriter out = response.getWriter();
        response.setContentType("text/html; charset=utf-8");
        request.setCharacterEncoding("utf-8");
        response.setCharacterEncoding("utf-8");
        //商品名
        System.out.println(request.getParameter("WIDsubject"));
        String subject =new String(request.getParameter("WIDsubject").getBytes("ISO-8859-1"),"UTF-8");
        System.out.println(subject);
        //金额
        String total_fee = new String(request.getParameter("WIDtotal_fee").getBytes("ISO-8859-1"),"UTF-8");
        //描述
        String body =subject;
        String sub=request.getParameter("WIDsubject");

        //数据封装
        Map<String, String> sParaTemp = new HashMap<String, String>();
        sParaTemp.put("service", AlipayConfig.service);
        sParaTemp.put("partner", AlipayConfig.partner);
        sParaTemp.put("seller_id", AlipayConfig.seller_id);
        sParaTemp.put("_input_charset", AlipayConfig.input_charset);
        sParaTemp.put("payment_type", AlipayConfig.payment_type);
        sParaTemp.put("notify_url", AlipayConfig.notify_url);
        sParaTemp.put("return_url", AlipayConfig.return_url);
        sParaTemp.put("anti_phishing_key", AlipayConfig.anti_phishing_key);
        sParaTemp.put("exter_invoke_ip", AlipayConfig.exter_invoke_ip);
        sParaTemp.put("out_trade_no", out_trade_no);
        sParaTemp.put("subject", subject);
        sParaTemp.put("total_fee", total_fee);
        sParaTemp.put("body", body);

        //发送请求

        String sHtmlText = AlipaySubmit.buildRequest(sParaTemp,"get","确认");
        System.out.println(sHtmlText);
        out.println(sHtmlText);

    }

action写出alipayapi.jsp支付跳转页面,商品名显示正常,改成servlet,跳转中文乱码,求解决办法。。。。。

图片说明

3个回答

打印出来是乱码么?如果是把这一句放在第一行试下:request.setCharacterEncoding("utf-8");

u013693144
当你途径我的盛放 回复wolf犭良: request.getParameter("WIDsubject")正常的,但是必须转码,转码之后就乱码了,不转码会出现支付宝的ILLEGAL_SIGN错误
3 年多之前 回复
ldz_wolf
wolf犭良 回复当你途径我的盛放: request.setCharacterEncoding("utf-8");方法开始的第一句,即放在服务端获取请求数据之前设置字符编码。另外将tomcat的编码修改为UTF-8
3 年多之前 回复
u013693144
当你途径我的盛放 设置这一句了
3 年多之前 回复
u013693144
当你途径我的盛放 是的,jsp里面 打印正常,Java里面获取就出现乱码(String subject =new String(request.getParameter("WIDsubject").getBytes("ISO-8859-1"),"UTF-8");)
3 年多之前 回复

后台响应的时候response.setCharacterEncoding("utf-8");

u013693144
当你途径我的盛放 我加这一句了,request.getParameter("WIDsubject")是正常的String subject =new String(request.getParameter("WIDsubject").getBytes("ISO-8859-1"),"UTF-8");转换之后乱码,但是不转换会出现ILLEGAL_SIGN
3 年多之前 回复

总结:response.setCharacterEncoding("utf-8"); response.setContentType("text/html; charset=utf-8");放在方法开始位置。。。解决问题!

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问