折腾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/,你应该能看到:

(坑爹!第一天晚上这个竟然一晚上都没有出现这个界面,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文件具体实现了什么操作,下一篇再说。。。)

这个默认的页面包括了很多有用的东西,不过我想最有用的应该是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的结构图(此图来自于传智播客的教学视频,所以不太清晰,凑合看看):

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

如果你的个人目录(即“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(证书颁发机构)的担保,所以浏览器默认是不信任你的,但你可以选择“继续”。

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

添加web应用

有两种方法:

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

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

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

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

<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<title>
test
</title>
</head>
<body>
<h1>test</h1>
</body>
</html>

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

IntelliJ的安装

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

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

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

New Project,然后这样选:

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

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

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

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


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

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

然后命名为SayHello:


展开,打开SayHello.java的时候却发现IntelliJ提示找不到符号:


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

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

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

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

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>");
}
}

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

<?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>

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

运行Java Web项目

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

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

如上图那样配置好Tomcat。

然后打开Project的运行配置:

继续看图:

再看图,如此般设置:

这里它提示你有个问题,说缺乏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的发布包。

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

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

创建Java Web项目(个人版)

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

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

Intellij Idea 创建JavaWeb项目的更多相关文章

  1. JavaEE——Intellij Idea 创建JavaWeb项目

    原文:JavaEE--Intellij Idea 创建JavaWeb项目 折腾Tomcat折腾了两个晚上,第一个晚上怎么都进不了Tomcat的首页,第二个晚上进去了,但是新建的Web项目,在浏览器中运 ...

  2. Intellij Idea 创建JavaWeb项目入门(一)

    Idea创建JavaWeb项目步骤:1.打开Intellij Idea IDE,然后点击Create New Project 2.左侧选择Java Enterprise,右侧选择Web Applica ...

  3. eclipse弃坑记第一篇之在idea上配置Tomcat环境并创建Javaweb项目的详细步骤原创

    IntelliJ IDEA是一款功能强大的开发工具,在代码自动提示.重构.J2EE支持.各类版本工具(如git.svn.github).maven等方面都有很好的应用. IntelliJ IDEA有免 ...

  4. Intellij idea创建javaWeb:实现JSP/Servlet(转)

    转自:https://www.jianshu.com/p/9684e90cf7b5 Intellij idea创建javaWeb:实现JSP/Servlet by_love唯念 关注 2016.12. ...

  5. 修改Intellij Idea 创建maven项目默认Java编译版本

    在使用Intellij Idea 创建Maven项目时,默认的Java Language是1.5,虽然可以在Project Structrue中修改,但是每次pom.xml文件有变化时,工程又会重置到 ...

  6. Intellij Idea 创建Web项目入门(一)转

    Intellij Idea 创建Web项目入门(一) 相关软件: Intellij Idea14:http://pan.baidu.com/s/1nu16VyD JDK7:http://pan.bai ...

  7. IntelliJ IDEA创建java项目

    IntelliJ IDEA创建java项目 进入到IntelliJ IDEA启动界面,点击Create New Project 2.这样就进入到了创建项目页面,这里可以创建好多项目,这里我们以java ...

  8. 解决IntelliJ IDEA 创建Maven项目速度慢问题

    IntelliJ IDEA 创建maven项目速度很慢,甚至卡住不动了. 原因 IDEA根据maven archetype的本质,其实是执行mvn archetype:generate命令,该命令执行 ...

  9. 一、IntelliJ IDEA创建java项目

    一.IntelliJ IDEA创建java项目 二.IntelliJ IDEA下载并包含jdbc包 1.下载zip格式的驱动包:https://dev.mysql.com/downloads/conn ...

随机推荐

  1. java 基础 03 运算符 分支结构 循环结构

    今天内容: (1)运算符 (2)分支结构 (3)循环结构 1运算符 1.1赋值运算符 (1)简单赋值 = 表示赋值运算符,用于将=右边的数据赋值给=左边的变量来覆盖原来的数值. 笔试题: ia == ...

  2. Day2 HTML基本标签元素

    Day2   HTML基本标签元素 HTML:  超文本标记语言(HyperText   Mark-up  Language ) 1.作用:写网页结构  2.HTML不区分大小写,建议小写   3.文 ...

  3. linux 下 `dirname $0`(转)

    在命令行状态下单纯执行 $ cd `dirname $0` 是毫无意义的.因为他返回当前路径的".".这个命令写在脚本文件里才有作用,他返回这个脚本文件放置的目录,并可以根据这个目 ...

  4. sql2012,返回数据多时不走索引

    当数据达到一定值时,都会走表扫描旧版如SQL2005时就有计算选择性的比例为 满足条件的行数/总行数<=0.7181,会走索引,其它会走表扫描有兴趣可以自己去不同版本中去测试 Roy Wu(吴熹 ...

  5. 爬虫基础-http请求的基础知识

    百度百科上这么介绍爬虫: 网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本. 在开发爬虫时常用的工具:ch ...

  6. Api容器在应用架构演化中的用途

    单层架构 在最开始编程的时候相信大家都写过下面这种架构,界面代码,业务代码,数据库连接全部在工程面完成.当然这种架构在处理很小的程序的时候依然有生命力 两层架构 后来我们发现数据访问的代码大量重复,应 ...

  7. IOS UIActionSheet(底部 弹出框的使用)

    UIActionSheet *sheet = [[UIActionSheet alloc] initWithTitle:@"确定要注销?" delegate:self cancel ...

  8. IOS DatePicker 和 UIBarButtonItem 常用属性

    - (void)viewDidLoad { [super viewDidLoad]; // // self.inputTextField.inputView = [[UISwitch alloc ] ...

  9. 【BZOJ2809】[APIO2012] dispatching(左偏树例题)

    点此看题面 大致题意: 有\(N\)名忍者,每名忍者有三个属性:上司\(B_i\),薪水\(C_i\)和领导力\(L_i\).你要选择一个忍者作为管理者,然后在所有被他管理的忍者中选择若干名忍者,使薪 ...

  10. CSS之常见文字样式整理

    常见文字样式 行高:line-height,当我i们将行高的大小设置成当前元素的高度时,可以实现当行文本在当前元素中垂直方向居中显示的效果 水平对齐方式:text-align:left|center| ...