这篇文章写的是如何使用idea部署web应用到weblogic,用的是本地部署,即idea和weblogic装在一起
至于为啥不用远程部署,因为我没测试成功。。。
测试环境
操作系统:Windows 2016
weblogic版本:10.3.6
JDK版本:1.7.80
0x01 在idea内新建一个项目
这里使用的是安装weblogic时使用的JDK1.7 (建议使用Java的,Maven的可能会出错)
起一个名字,点击finish
给这个项目增加web框架
左侧的Web Application打上勾后 点击OK
首页随便写点东西,作为web应用
0x02 连接weblogic服务器
选择 Weblogic Server 的Local
点击Configure之后,选择安装weblogic的路径,会自动识别出weblogic的版本,如图所示
输入weblogic的相关信息
点击最下面的fix
点击 Apply 和 OK
0x03 运行WEB应用
此时尝试运行web应用,发现会报错 Unmarshaller failed
找到web.xml 把其中的web-app 修改为如下图所示即可运行成功
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:j2ee="http://java.sun.com/xml/ns/j2ee">
</web-app>
0x04 尝试写一个命令执行的Servlet
在web.xml中加入对应的servlet路径
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:j2ee="http://java.sun.com/xml/ns/j2ee">
<servlet>
<!-- servlet的内部名称,自定义。尽量有意义 -->
<servlet-name>httpServlet</servlet-name>
<!-- servlet的类全名: 包名+简单类名 -->
<servlet-class>httpServlet</servlet-class>
</servlet>
<!-- servlet的映射配置 -->
<servlet-mapping>
<!-- servlet的内部名称,一定要和上面的内部名称保持一致!! -->
<servlet-name>httpServlet</servlet-name>
<!-- servlet的映射路径(访问servlet的名称) -->
<url-pattern>/httpServlet</url-pattern>
</servlet-mapping>
</web-app>
把以下代码复制进去
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.util.Scanner;
public class httpServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String cmd = req.getParameter("cmd");
if(cmd != null){
boolean isLinux = true;
String osTyp = System.getProperty("os.name");
if (osTyp != null && osTyp.toLowerCase().contains("win")) {
isLinux = false;
}
String[] cmds = isLinux ? new String[]{"bash", "-c", cmd} : new String[]{"cmd.exe", "/c", cmd};
InputStream in = Runtime.getRuntime().exec(cmds).getInputStream();
Scanner s = new Scanner(in).useDelimiter("\\\\a");
String output = s.hasNext() ? s.next() : "";
PrintWriter out = resp.getWriter();
out.println(output);
out.flush();
out.close();
}else {
resp.getWriter().write("nothing");
}
}
}
粘贴后代码会报红,此时可以点击
点击Libraries 的加号,导入weblogic的这个模块,代码即会不报红
我们再次运行一下这个weblogic
可以进行命令执行
期间需要注意的问题
1、修改web.xml的头部
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:j2ee="http://java.sun.com/xml/ns/j2ee">
</web-app>
2、报错
Command line is too long. Shorten command line….
修改项目下 .idea\workspace.xml,找到标签