技巧 22周 Weblogic发送http请求报错404、400

866 阅读1分钟

步骤一: 确定web-inf文件夹是否存在weblogic.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<weblogic-web-app
        xmlns:wls="http://xmlns.oracle.com/weblogic/weblogic-web-app"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
        http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd
        http://xmlns.oracle.com/weblogic/weblogic-web-app
        http://xmlns.oracle.com/weblogic/weblogic-web-app/1.4/weblogic-web-app.xsd">
        
     <container-descriptor>
         <prefer-web-inf-classes>false</prefer-web-inf-classes>
     </container-descriptor> 
    
	<charset-params>
		<input-charset>
			<resource-path>/*</resource-path>
			<java-charset-name>UTF-8</java-charset-name>
		</input-charset>
	</charset-params>
	    
</weblogic-web-app>

步骤二: 确保对应的后台代码的weblogic.xml的context-root配置正确 与对应war包包名保持一致

步骤三: 项目发送http请求,报400错误(发送参数为空)。(该问题相同代码在tomcat执行不报错,在weblogic执行报错)

问题在于 url.openConnection() 返回对象问题

当部署在tomcat是connection对象是sun.net.www.protocol.http.HttpURLConnection 当部署在weblogic时,connection对象是weblogic.net.http.SOAPHttpURLConnection

问题一: SOAPHttpURLConnection不会在getOutputStream显性调用connect,需要在写入数据之前显性调用connect函数。

问题二: SOAPHttpURLConnection无法携带参数。

需要将connection对象强制转化为HttpURLConnection,然后显性调用connect 如果强制转化报错则jvm 启动加入 -DUseSunHttpHandler=true 让weblogic强制使用默认HttpURLConnection