记一次Java代码的部署
当出现下面的结果时,我的内心产生了许久没有的激动
本篇主要是记述下我经历了什么。
开篇
要想将文件部署好,首先你得配置服务器的环境。安装JDK、Tomcat、配置环境(JAVA_HOME、CLASSPATH、PATH或者JAR_HOME(6.0以上才有))等先期准备,检查是否配置成功,Tomcat是否能启动:
1、检查JAVA_HOME配置:set | grep JAVA
添加JAVA_HOME:export JAVA_HOME=$(jdk解压出来的文件夹路径)
2、检查PATH:echo $PATH
添加 PATH export PATH= $JAVA_HOME/bin:$PATH
3、检查CLASSPATH:set | more 然后在结果列表中找到classpath
添加CLASSPATH export CLASSPATH=$JAVA_HOME/lib:$CLASSPATH:你需要加载的jar文件路径
路过一个坑就是,当使用文本编辑java文件时,javax.servlet这个框架一直找不到,不管你放在哪个文件夹中都无法使用javac编译该文件。这是因为jvm通过CLASSPATH无法找到该框架(这个jar包来自tomcat,只要是servlet容器,肯定都有这个包),所以需要设置该包的路径加到CLASSPATH中去。
4、验证Tomcat是否成功启动:使用localhost:port(默认为8080)访问是否会出现Tomcat的主页,如果没有说明未启动成功
弯路篇
当所有的都准备好了,我就开始走上了坎坷之路......
首先我想用Eclipse来部署我的代码:
网上说法,需要新建一个动态的网页应用(其实是不需要的,任何一个项目都是OK的),然后就是配置tomcat本地服务器(详情参考、其他篇)。在这会碰到很多问题,但主要的是就是自己的tomcat的文件配置,比如web.xml、server.xml。然后就是创建servlet了,我碰到一个问题就是没有导入javax.servlet包,找了半天才发现不是自带的,需要自己在servlet容器中找到对应的jar包导入到工程中,并添加构建路径。还出现个问题,就是访问localhost:8080的时候出现404,网上说是修改下tomcat的服务器的配置
找到本地的服务器,双击
找到红色框中的,查看是否是第二个选项,如果不是并且是灰色的那么就需要右击本地tomcat服务器,选择Properties
然后就是启动tomcat。这种做法不适合新手去了解部署的原理,做完一整套的我还是感觉很懵,不知所云,根本不知道这是在干嘛,就是跟着流程走一遍,毫无意义。这个时候就不得不吐槽下百度了,千篇一律都是类似的文章、博客。无奈之下通过FQGoogle了一番,发现一篇不错的文章,提醒我去关注servlet本身的原理,然后就整了一套简单的流程。
回归正道篇
首先准备一个servlet-api.jar包,然后在CLASSPATH配置上包路径,也就是Eclipse中的addBuildPath,准备好java文件(我准备了一个SayHello.java):
1 package com.junary.Servlet; 2 3 import java.io.IOException; 4 5 import javax.servlet.ServletException; 6 import javax.servlet.http.HttpServlet; 7 import javax.servlet.http.HttpServletRequest; 8 import javax.servlet.http.HttpServletResponse; 9 10 public class SayHello extends HttpServlet { 11 12 private String message; 13 14 @Override 15 public void init() throws ServletException { 16 message = "Hello, first Servlet!"; 17 } 18 19 @Override 20 protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { 21 resp.getWriter().println(message); 22 } 23 24 }
然后使用javac编译(这里需要配置CLASSPATH路径,否则无法编译通过),产生class文件,将class文件放在Tomcat的解压包里(tomcat-8.5/webapps/ROOT/WEB-INF/classes) ,如果是标准的包,那就需要放在对应的文件夹下,比如:com.junary.Servlet,那么就需要放在classes/com/junary/Servlet文件夹中,具体路径为:/classes/com/junary/Servlet/SayHello.class。
准备好后,就轮到配置了,这里不需要配置tomcat中conf下的server.xml文件,我们就直接配置web.xml文件,首先需要设置servlet和servlet-maping,我的配置如下:
<?xml version="1.0" encoding="UTF-8"?> <web-app> <servlet> <!-- 通过容器指定对应的类,需要带上包名 --> <servlet-name>SayHello</servlet-name> <servlet-class>com.junary.Servlet.SayHello</servlet-class> </servlet> <!-- 接口映射 --> <servlet-mapping> <!-- 将/hello映射到SayHello servlet容器中 --> <servlet-name>SayHello</servlet-name> <url-pattern>/hello</url-pattern> </servlet-mapping> </web-app>
至此就配置完了所有的项目,现在只剩下最后一步了,那就是启动tomcat,启动完了之后在浏览器中输入localhost:8080/hello就出现最开始的那张图片了。当然还有很多优秀的框架可以替代我们做这些繁琐的配置,但作为初学者,我觉得这样操作才能让我们明白原理,记忆更深刻。同事给我推荐了一篇关于配置的文章,里面介绍了三种配置方式,做完以上的事后,看这篇文章还是很好懂得。
总结篇
感慨下,搜索引擎对初学者来说真的很重要,很重要,好的搜索引擎能让我们少走很多弯路。
回归正题
1、在tomcat中如果我们要配置端口和域名那么我们需要去配置/修改server.xml文件。
2、Java类需要编译成class文件部署在webapps下的web-inf文件夹中,如果还有其他的框架,那还需要新建一个lib文件夹,放置我们需要的jar包。
3、配置web.xml文件,将接口映射到容器当中,由容器产生一个request,最后由Java程序返回response
这篇就记我一次弯路,很多东西都是可以使用其他的框架去实现,比如Spring boot、maven,但需要理解原理,今后我会进一步的去了解这些框架,熟悉里面的设计思想。
-------------更新 2018.04.10---------------------
发现一篇更加简单明了的文章:Eclipse配置Tomcat,对Eclipse配置tomcat有个很好的介绍,需要注意的是通过@WebServlet()整的路径是要包含项目名称的,例如"@WebServlet("/hello")"则对应的路径为:localhost:8080/project_name/hello。"@WebServlet()"的效果相当于在web.xml文件中配置
<servlet> <!-- 类名 --> <servlet-name>SayHello</servlet-name> <!-- 所在的包 --> <servlet-class>com.junary.Servlet.SayHello</servlet-class> </servlet> <servlet-mapping> <servlet-name>SayHello</servlet-name> <!-- 访问的网址 --> <url-pattern>/project_name/hello</url-pattern> </servlet-mapping>