JavaEE——Intellij Idea 创建JavaWeb项目

原文:JavaEE——Intellij Idea 创建JavaWeb项目

  折腾Tomcat折腾了两个晚上,第一个晚上怎么都进不了Tomcat的首页,第二个晚上进去了,但是新建的Web项目,在浏览器中运行,总是 Error on Apache Tomcat: The requested resource is not available  坑爹!!!!。

  首先我要说一点,在IntelliJ IDEA里面“new Project”就相当于我们eclipse的“workspace”,而“new Module”才是创建一个工程,这是要注意的一点。

  最终多亏了某大神这篇文章的一句话,希望以后遇到同样问题的朋友,都能快速解决。这篇文章的作者明显工作在Mac OS X下,无奈我知之甚少,我还是在windows下进行了配置。具体在某些方面有偏差的,我的问题会自己用小字体批注。

 这标题实在有点拗口,不知道怎么写好,但看了标题也就明白文本的内容。最近几天在折腾这些玩意儿,所以写写总结。除了环境搭建,本文还是一篇入门级的上手教程。

  1. 去下载一些东西
  2. JDK安装
  3. Tomcat安装
  4. Tomcat的配置添加web应用
  5. IntelliJ的安装
  6. 创建Java Web项目
  7. 运行Java Web项目
  8. 打成war包

去下载一些东西

老样子,先废话几句,IntelliJ IDEA,这个名字不知道谁想出来的,也真够拗口的,发音大致如此:[in 'te li dʒei ai di: i: ei],我还是简称之为IntelliJ吧,“Intel”有“智能”的意思,IntelliJ也自称最智能的Java集成开发环境。我这次使用的是最新 的版本——13.1,可以在jetbrains.com的官方网站上下载:http://www.jetbrains.com/idea/

Tomcat是Java的web服务器,目前最新版是8.0.5,可以从这里下载到:http://tomcat.apache.org/download-80.cgi

当然了,搞Java开发,JDK是必须的,JDK的最新版是8u5,也就是Java8的第5个更新版本,可以从这里下载到:http://www.oracle.com/technetwork/java/javase/downloads/index.html

这次全部搞到最新的了!不要跟我说什么新版本不稳定不成熟,我不听。:)

JDK安装

JDK的安装是很简单的,装载dmg镜像,然后双击图标运行安装程序,会安装到这个位置:/Library/Java/JavaVirtualMachines,貌似不需要什么额外的其它配置了。

环境变量的配置在windows下,百度经验很好,贴个链接http://jingyan.baidu.com/article/f96699bb8b38e0894e3c1bef.html

Tomcat安装

Tomcat并不区分Linux版和Mac版(但Windows版却是要区分的),下载下来就是一个tar.gz包,真正 的绿色软件,解压,放到合适的位子去,就算完成安装了。一般来说,是放到/usr/local去,/usr目录就相当于Windows的“program files”目录嘛。但这次我不知道咋搞的(忘了当时参考了个啥文档了),居然弄到/Library下面去了:/Library/Tomcat /apache-tomcat-8.0.5。(如果遇到权限问题的话,就用root账号上去chmod一下)

我习惯性地不修改默认的目录名,依然叫“apache-tomcat-8.0.5”,但我会做一个软链接指向这个目录:

$cd /Library/Tomcat
$ln -s apache-tomcat-8.0.5 Home

这样就能轻易用/Library/Tomcat/Home去访问tomcat了。这样做还有一个好处,哪天Tomcat更新的新版本, 我直接把Home指向新版本的目录即可,其它关于对Tomcat的路径引用的配置不用改,旧的版本可以继续保留用于测试,要换回去也很简单,改一下 Home的指向即可。

启动Tomcat:

$cd /Library/Tomcat/Home/bin
$./startup.sh

立即用浏览器访问一下:http://localhost:8080/,你应该能看到:

JavaEE——Intellij Idea 创建JavaWeb项目

(坑爹!第一天晚上这个竟然一晚上都没有出现这个界面,locathost:8080就是不行啊,localhost直接进入iis7界面,我一狠心把iis7卸载了,还是不行,不过反过来想想,关人家iis嘛事,人家默认使用的貌似是80端口~~~

具体的问题是,在运行startup.bat时候,下面的这个dos界面总是一闪而过,有人说在末尾加pause,让它暂停,看一下出错信息,由于该文件当时不让我改,也懒得备份(好肤浅的理由,明明可以改),所以就没有更改。最后的最后呢,让我发现问题了,就是Java_Home的问题了,师姐以前在电脑上装了一个1.6,我又装了一个1.8,Java_Home还是1.6的路径,然后他就不行了。。。最后更新一下Java_Home环境变量,通关~~至于事故原因,待查,还有startup.bat文件具体实现了什么操作,下一篇再说。。。)

JavaEE——Intellij Idea 创建JavaWeb项目

这个默认的页面包括了很多有用的东西,不过我想最有用的应该是Documentation,有空的话,真的值得看看,大多数问题都能在 那里找到答案。也许你还想点“Server Status”按钮看看服务器状态,但你马上发现不行,你没有设置管理员的用户名/密码,它不让你看。(后面我会讲如何弄)

如果你看不到这个页面,一定是哪里出了什么问题,要查看Tomcat的的日志去找原因,日志在这个目录下:/Library/Tomcat/Home/logs,日志文件名与日期相关,比如:“catalina.2014-05-12.log”。

停止Tomcat:

$./shutdown.sh

可能你还注意到bin目录下有一些bat文件,那是给Windows准备的,可以删除掉。

另外,重启tomcat的方法是:先shutdown,然后再startup,不能直接startup,貌似没有一个直接restart的脚本(也许你可以自己写一个)。

Tomcat的配置

配置管理员账号

配置管理员用户名密码,刚才你不是想查看服务器状态结果不行吗?在这里配:

$vim /Library/Tomcat/Home/conf/tomcat-users.xml

在<tomcat-users>节点中加这么一行:

<user username="admin" password=“123456" roles="manager-gui" />

就设置好了一个叫admin的管理员,密码是123456。(这也能叫密码?)重启Tomcat生效。

配置Tomcat端口

需要在localhost后面加上8080会让你感到不爽,你想把这个去掉,使用默认端口号80,可以在这里配置:

$vim /Library/Tomcat/Home/conf/server.xml

找到这一行:

<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />

把8080改为80即可。但!且慢,由于系统权限的问题,80端口不是随随便便谁都能开启的,你需要root权限来运行Tomcat,否则绑定端口 就会失败。我建议是放弃,毕竟谁会用自己的Mac来做服务器呢?但我会把8080改为8079,这是因为后面用IntelliJ调试程序的时 候,IntelliJ会启动新的Tomcat实例,大家都习惯性地使用8080这个端口,为了避免这个冲突,把默认的8080改一下是有必要的。

顺便提一下,在Mac下想知道哪些端口被占用了,可以用:

$sudo lsof -i | grep LISTEN

在Linux下可以用netstat,但Mac下的netstat命令貌似跟Linux下的出入蛮大,不知道为什么会这样。

windows 下可以通过如下方式查询,第一条命令查看各端口使用情况,第二条命令查看8080端口,发现其进程父ID 6940 ,再通过第三条命令查看ID 6940,是Java.exe

C:\Users\pc>netstat -ano

活动连接

  协议  本地地址          外部地址        状态           PID
TCP 0.0.0.0: 0.0.0.0: LISTENING
TCP 0.0.0.0: 0.0.0.0: LISTENING
TCP 0.0.0.0: 0.0.0.0: LISTENING
TCP 0.0.0.0: 0.0.0.0: LISTENING
... ........... ......... ......... .... C:\Users\pc>netstat -aon|findstr ""
TCP 0.0.0.0: 0.0.0.0: LISTENING C:\Users\pc>tasklist|findstr ""
java.exe Console , K

配置HTTPS

虽然没有绝对的安全,但大牛们说“不用SSL的安全都是‘假装安全’”。所以……

先来看看Tomcat的结构图(此图来自于传智播客的教学视频,所以不太清晰,凑合看看):

JavaEE——Intellij Idea 创建JavaWeb项目

从图中可以看出,我们要配置https其实就是要配置Connector,Connector在之前配置端口的地方已经接触过了,有印象吧?当然,我们还得准备些材料。那就是密钥,准备方法如下图:

JavaEE——Intellij Idea 创建JavaWeb项目

如果你的个人目录(即“cd ~”转到的目录)已经有“.keystore”,那么还要提示你输入密钥库的口令,我这里秘钥库的口令是654321,tomcat这个密钥的口令也是654321。

这样一来,就在你的密钥库中创建了一个叫tomcat的密钥,其中只指明了“名字与姓氏”的信息为localhost,别的都可以留空。完之后你可以看看.keystore到底是个什么玩意儿:

$od ~/.keystore

其实啥都看不出来,一堆加密的二进制码。

接着就是Tomcat的server.xml文件了:

$vim /Library/Tomcat/Home/conf/server.xml

在<Service>节点中加一个<Connector>节点:

<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol" maxThreads="150" SSLEnabled="true" scheme="https" secure="true" clientAuth="false" sslProtocol="TLS" keystorePass="654321" />

注意,一点都不能写错,包括字母大小写都要完全写正确方可。保存,重启服务器,打开:https://localhost:8443/

Safari浏览器提示你无法验证localhost身份,这是很显然的,你的证书是你自己造的,没有CA(证书颁发机构)的担保,所以浏览器默认是不信任你的,但你可以选择“继续”。

JavaEE——Intellij Idea 创建JavaWeb项目

提示:https在实际生产环境中是非常有用的东西,但在开发环境中没什么用,我们只需要知道有这回事,这里先把这个配置拿掉。不拿掉的话后面运行程序的时候可能会出现一个8443端口被占用的错误提示。(尽管此错误其实也无关痛痒)。

添加web应用

有两种方法:

第一是直接把应用放在webapps目录下,Tomcat会自动解释;

另一种是在conf/Catalina/localhost下面放入一个xml文件,如放一个叫test.xml的文件,内容是:

<Context docBase="/Users/guogangj/test" />

然后在/Users/guogangj/test下创建一个index.html,随便写点内容:

JavaEE——Intellij Idea 创建JavaWeb项目
<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<title>
test
</title>
</head>
<body>
<h1>test</h1>
</body>
</html>
JavaEE——Intellij Idea 创建JavaWeb项目

然后访问:http://localhost:8079/test/index.html,就能看到test这几个大字了。

IntelliJ的安装

下载的安装包是个dmg,安装无压力,打开并拽入“应用程序”中即可。直接运行,根据提示进行一些默认的配置即可。

创建Java Web项目(原博主版)

说实在的,IntelliJ的项目创建方式不如其它IDE的直观,反正我一开始是没搞懂(其实搞懂也很简单),另外IntelliJ的不同版本之间 是有差异的,网上找的一些资料并不准确,最好还是直接看官方文档,根据它的Tutorial走走,这次我看的官方文档是针对IntelliJ v12的,而现在我用的是v13,所幸的是差别并不大。

New Project,然后这样选:

JavaEE——Intellij Idea 创建JavaWeb项目

那个Versions只能选3.1,貌似之前还能选3.0,这个版本其实是Servlet的版本,最新的版本是3.1,需要用Tomcat8来承 载,如果你选择用Tomcat7来承载的话,会有一个warning说不认识这个版本,使用默认版本云云,忽略这个warning就是。

在下一步中指定项目名,SDK果断选择最新的1.8(Java8):

JavaEE——Intellij Idea 创建JavaWeb项目

这样一来你的服务器的运行环境得部署为Java8,不过这个也没啥压力,Java8多了不少很有用的新特性,如果没有什么历史负担的话干嘛不用?

Finish,我们现在来看看整个project的结构:

JavaEE——Intellij Idea 创建JavaWeb项目
.idea
这是IntelliJ的相关东西,我们不用管,src目录用于放java源文件,web目录用于放web资源,WEB-INF是java
web应用固定的存放配置及类库的目录,index.jsp是我们首页,HelloWorld.iml是IntelliJ的项目文件,打开工程就是打开它
了,External Library是一些外部引用的库,展开看看好多。

现在我们来创建一个Servlet,Servlet是Java的服务器端小程序(其实也可以不小),右击src目录:

JavaEE——Intellij Idea 创建JavaWeb项目

然后命名为SayHello:

JavaEE——Intellij Idea 创建JavaWeb项目
展开,打开SayHello.java的时候却发现IntelliJ提示找不到符号:

JavaEE——Intellij Idea 创建JavaWeb项目
这一定是因为某些包没引用。如何引用?一般都是设置CLASSPATH,告诉java如何去找它的包,而这里我们可以直接指定包的位置。

打开Project Struture设置对话框(快捷键为<Cmd>+<;>),如图:

JavaEE——Intellij Idea 创建JavaWeb项目

点加号,选“Jars or directories…”,再找到Tomcat下的servlet-api.jar。

JavaEE——Intellij Idea 创建JavaWeb项目

这样就可以了,我们把doPost删掉,用不到,再在doGet方法中写点东西输出,SayHello.java就变成这样:

JavaEE——Intellij Idea 创建JavaWeb项目
package com.mycompany;

import java.io.IOException;
import java.io.PrintWriter; /**
* Created by guogangj on 14-5-13.
*/
public class SayHello extends javax.servlet.http.HttpServlet {
protected void doGet(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<html>");
out.println("<head>");
out.println("<title>Hello World!</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1>Hello World!</h1>");
out.println("</body>");
out.println("</html>");
}
}
JavaEE——Intellij Idea 创建JavaWeb项目

java的代码写好了,配置文件也要加点东西,打开web.xml,加上一个“<servlet-mapping>”节点,改完后的web.xml变成这样:

JavaEE——Intellij Idea 创建JavaWeb项目
<?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_3_1.xsd"
version="3.1">
<servlet>
<servlet-name>SayHello</servlet-name>
<servlet-class>com.mycompany.SayHello</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>SayHello</servlet-name>
<url-pattern>/sayhello</url-pattern>
</servlet-mapping>
</web-app>
JavaEE——Intellij Idea 创建JavaWeb项目

编译(<Cmd>+<F9>),通过无压力。但,怎么运行?

运行Java Web项目

Java Web项目无法单独运行,它需要一个程序来承载(Host)它,这和微软体系的东西是很类似的,ASP.net程序需要IIS来承载对不?而现在我们很明显需要用Tomcat来承载这个Web程序。

首先我们要配置好Tomcat,<Cmd>+<,>打开IntelliJ的配置。

JavaEE——Intellij Idea 创建JavaWeb项目

如上图那样配置好Tomcat。

然后打开Project的运行配置:

JavaEE——Intellij Idea 创建JavaWeb项目

继续看图:

JavaEE——Intellij Idea 创建JavaWeb项目

再看图,如此般设置:

JavaEE——Intellij Idea 创建JavaWeb项目

这里它提示你有个问题,说缺乏artifacts配置,你可以顺着它的指引,fix一下即可。点OK。

这次可以跑了,<Shift>+<F10>。注意看IntelliJ的输出窗口里有什么提示信息,如果有,想想看是什么原因,我常常会碰到一些端口无法打开的问题,一般都是端口被占用了。

IntelliJ运行Java Web程序的时候会开启新的Tomcat实例,很可能会和之前运行的Tomcat实例发生冲突,解决冲突的最快的办法通常是直接把之前运行的Tomcat shutdown掉。

现在看看运行的成果吧:http://localhost:8080/sayhello

是不是看到“Hello World!”?这是用Java代码输出的“页面”,而不是静态页面。

打成war包

工程编译后生成的内容在/work/HelloWorld/out/production/下,我们要对其中的内容进行打包的话,可以这样:

$tar cvf HelloWorld.war /work/HelloWorld/out/production

IntelliJ当然也可以帮助你做这个动作,如图:在工程配置中选择artifact的类型,artifact不知道中文怎么翻译好,在很多游戏中,它都被翻译为“神器”,但这里可以简单把它理解为Java的发布包。

JavaEE——Intellij Idea 创建JavaWeb项目

这样你就能在其中指定的Output directory中找到那个War包了,把War包直接丢到Tomcat的webapps目录下,Tomcat会自动加载它。

希望本文对读者起到抛砖引玉的作用。

创建Java Web项目(个人版)

1、创建工程 File-->New Project

JavaEE——Intellij Idea 创建JavaWeb项目
选择Java,并指定Project name,Project location,Project SDK
 
JavaEE——Intellij Idea 创建JavaWeb项目
 
选择Web Application
JavaEE——Intellij Idea 创建JavaWeb项目
Finish完成,创建好工程。然后创建Module
JavaEE——Intellij Idea 创建JavaWeb项目
依旧指定Module name,Content root,Module file location
JavaEE——Intellij Idea 创建JavaWeb项目
选择Web Application,至此web 应用程序建立完成。
JavaEE——Intellij Idea 创建JavaWeb项目
更改index.jsp 的内容
JavaEE——Intellij Idea 创建JavaWeb项目
 
配置Tomcat,选择Edit Configurations
JavaEE——Intellij Idea 创建JavaWeb项目
选择添加Tomcat Server-->Local
JavaEE——Intellij Idea 创建JavaWeb项目这里命名,并选择Application Server
JavaEE——Intellij Idea 创建JavaWeb项目
切换到Deployment标签下,添加Artifact
JavaEE——Intellij Idea 创建JavaWeb项目
运行web应用,就可以看到界面了,我的第二个错误就出现这里,总是报404,就像上面博主说的,不能startup.bat启动Tomcat,这里直接自己启动,否则多个实例冲突
上一篇:vim创建程序文件自动添加头部注释/自动文件头注释与模板定义


下一篇:Java 创建PDF文件包的2种方法