以前一直有疑惑,就是eclipse中的项目能不能再idea中运行,简单尝试只是把项目导入idea中无法运行,报错一大堆,以为这两个工具中项目是不能共用的。其实不然,不论你使用什么工具,都是工具中的配置问题。在eclipse中的配置有的不能在idea中使用,那你就要改成idea设置,有时,看看报错信息也是成功的关键。始终相信,idea只是工具,eclipse也是,一个完整的项目,能在在命令行里跑起来,也就能借助对应工具在工具中跑起来。那么,我是如何将一个能在eclipse上完整运行的简单web项目导入到idea中运行的呢?
一.让项目在eclipse中跑起来
i.将项目导入eclipse中
File->Import->Exisiting Projects into Workspace
导入进来有一个红叉
和其他项目对比,这个项目少了JRE System Library
右键项目工程-->Properties-->java build path-->libraries-->add library-->JRE System Library
这里是问你使用什么JRE,是执行环境,还是候选JRE,还是工作区默认JRE,我这里已经设置好了工作区默认JRE,所以不用设置什么。如果你没有设置,可以选择其他试试。
加载进来我们可以下拉看到我们的jar包都可以出来
接着把unbound的JRE移除(remove),apply and close
我们发现我们的小红叉并没有消除哈,我们不管,直接run as ,Run on a server, 看看会报什么错
看样子是Tomcat配置除了问题
继续右键项目Properties,找到Server
Apply and Close 后还是不行
运行一个Java报错
把11改成1.8
还是不行,再改
这时,项目上的小红叉消失了
项目可以跑起来了,只是里面没有什么内容。我们可以加入一些内容,我这里就先加一个index.jsp和Refresh.java(这是一个servlet)
先加一个index.jsp,再WebContent目录下新建一个JSP文件
eclipse提示找不到这个类,我们知道,servlet.http.HttpServlet是在Tomcat中,我们把jar包导入项目,还是在Properties中的Java build path的右边栏点击Add External(外部的) jars,我们导入的包在Tomcat的安装目录下的lib文件夹的servlet-api.jar,在项目的Referenced Libraries中可以看到我们引入的jar包。右键项目名,Refresh一下。
index.jsp内容:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<%out.print("Hello World!"); %>
<%out.print("This is my first JSP!"); %>
</body>
</html>
重新run一下可以成功
可以说,只要项目不报错,基本上都可以跑起来。这里面我们看到的项目都是在eclipse内部,怎么在我们自己的浏览器上看到结果呢?我们在最上面一栏Windows-->Web browser-->0是eclipse内置浏览器,其他是外部浏览器,我们选择1就行
现在,我们新建一个servlet试试看。servlet就是运行在服务器上的Java程序,也是.java文件,当当被请求时,servlet容器就是把servelt编译成.class文件执行。
在src目录(有的项目是src/main/java,应该是设置的问题)下新建一个名为Refresh的servlet
package servlet;
// 导入必需的 java 库
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;
// 扩展 HttpServlet 类
public class Refresh extends HttpServlet {
// 处理 GET 方法请求的方法
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException
{
// 设置刷新自动加载时间为 5 秒
response.setIntHeader("Refresh", 5);
response.setCharacterEncoding("utf-8");
// 设置响应内容类型
response.setContentType("text/html");
// Get current time
Calendar calendar = new GregorianCalendar();
String am_pm;
int hour = calendar.get(Calendar.HOUR);
int minute = calendar.get(Calendar.MINUTE);
int second = calendar.get(Calendar.SECOND);
if(calendar.get(Calendar.AM_PM) == 0)
am_pm = "AM";
else
am_pm = "PM";
String CT = hour+":"+ minute +":"+ second +" "+ am_pm;
PrintWriter out = response.getWriter();
String title = "自动刷新 Header 设置";
String docType =
"<!doctype html public \"-//w3c//dtd html 4.0 " + "transitional//en\">\n";
out.println(docType +
"<html>\n" +
"<head><title>" + title + "</title></head>\n"+
"<body bgcolor=\"#f0f0f0\">\n" +
"<h1 align=\"center\">" + title + "</h1>\n" +
"<p>当前时间是:" + CT + "</p>\n");
}
// 处理 POST 方法请求的方法
public void doPost(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
接下来是web.xml配置,发现我们这个project根本没有web.xml,我们可以新建一个。注意要在WEB-INF下新建
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
<display-name>WebTest</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>Refresh</servlet-name>
<servlet-class>servlet.Refresh</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Refresh</servlet-name>
<url-pattern>/Refresh</url-pattern>
</servlet-mapping>
</web-app>
再次run on a server然后补全URL可以看到servlet也跑起来了
二.让项目在idea中跑起来
上面的内容是让项目在eclipse中运行起来,但是现在的idea比eclipse更加智能,怎么把一个已有的项目从eclipse上转移到idea上呢?
idea中导入项目没找到复制项目到ideaworkspace 的选项,那我们就手动复制,将eclipse下的项目复制到idae的工作区中。
依次点击File-->New-->Project From Existing Source-->选择项目路径-->Import project from external model中选择eclipse
一直next直到这一步,选择你本地JDK目录路径
报错了,没关系,我们接着设置,这个只是项目中的JDK命名和我们idea中本地JDK命名不同引起的。
设置JDK版本
点击左上角的File-->Project Structure,点击左侧的Project,在Project SDK中选择1.8,在Project language level 中选择 8 。
注: 这个从File-->Project Structrue 和直接点击最右边的图标是同一个入口。
接着点击File --> Settings,在Build,Execution,Deployment下的Compiler下的Java Compiler,在Target bytecode version右边有一个+号,添加你的项目。
依赖导入
点击File-->Project Structure,点击左侧的Modules
可以看到我们的JDK依赖名为JavaSE-1.8,下拉Module SDK选择我们在Idea中设置的本地JDK,并把红色的依赖全部移除(remove)。
然后点击+添加依赖,然后选择
找到你的lib包所在位置并选择它,然后点击ok。(如果你是Maven管理的项目,此步骤可跳过)
如果你的项目是web项目,则还需要手动定位web.xml。
同样的窗口,在左侧栏选择Facets→“+”→Web。
选择你的项目名称
之后选中如图所示的路径,点击右侧图书按钮,在中间框中点击“...”来编辑web.xml的路径。
因为IDEA的规范与Eclipse不一,web.xml的存放位置不一,所以此处需要手动找到导入的Eclipse项目的web.xml,否则IDEA识别不到。之后点击ok保存。
接着点击右下角的“Create Artifact”。
出现一个Problems
我们在左侧找到Artifacts,点击右下角的fix,选择第二项。
配置服务器
File-->Settings,在搜索框中搜索servers,找到Application servers,点击右侧的+,选择Tomcat Server
选择两次Tomcat安装路径点击两次OK
接着点击右上角的“Add configuration”。
点击左上角的+,选择Tomcat Server中的local,右侧Name处可任意命名。
点击右下角的fix
点击OK保存
然后打开左上角File→Project Structure。
artifact(人工制品)
如图所示选择Modules→tmanager(你的项目名)→“+”。
选择之前配置好的tomcat版本,然后点击Add selected,点击ok保存。
到这里设置基本完成,可以试着运行了,只需点击右上角绿色的三角形。
报错了。
我们按照指示,同时按Alt+Shift+Enter,红色消失,再次运行。
Tomcat启动成功,不过网页是404不管怎么补全URL都不行。
这时观察项目结构
发现有一个web目录和我们的WebContent目录,会不会是idea把web目录当成了内容输出了呢?
点开Project Structure,一通查找后发现,我在Facets中找到了这种映射关系
意思是web目录和Tomcat下的Root目录存在映射关系,我们修改项目的映射目录为:
双击左侧的Web Resource Directory修改
改为我们的WebContent目录
当我们再次运行
发现上面的URL中,项目名称还跟了一串英文,如何把它改成项目名呢?
通过修改红色框内的内容
修改失败
这时想起这个设置可能和服务器配置有关,所以又打开了
发现则合理确实有一个修改URL的地方
修改之后直接
把Tomcat移除后重新添加,然后点击fix后恢复正常
注:如果遇到端口占用可以手动在Tomcat安装目录bin下双击shotdown.bat关闭
按照之前的顺序,那么我可以先修改项目的名称,然后添加Tomcat服务器
参考文章:https://jingyan.baidu.com/article/2a13832843c2e0464a134f9f.html