一,搭建JDK开发环境
1,在Java官网下载Jdk软件包,我的系统是64位Ubuntu14.04,所以选择jdk-8u25-linux-x64.tar.gz。
2,解压Jdk软件包
tar xvzf jdk-8u25-linux-x64.tar.gz
3,使用管理员权限拷贝解压的文件夹到/usr/lib/jvm目录下,无需安装
sudo cp -r jdk1.8.0_25 /usr/lib/jvm/
4,设置环境变量,在/etc/profile的后面添加如下内容,然后输入 source /etc/profile,当然重启的话也会重新加载的
#set java environment
export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_25
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=./:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
5,在shell中输入java -version,得到如下结果说明安装成功
注:后面在切换到root账户下时使用javac弹出openjdk未安装的错误提示,原因是前面设置的环境变量对root账户无效
6,下面设置root账户的环境变量,在/etc/environment文件中做如下修改
在$PATH末尾添加
:/usr/lib/jvm/jdk1.8.0_25/bin,如下所示:
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/usr/lib/jvm/jdk1.8/bin
在文件末尾加入第4步中的三条语句设置三个环境变量
export JAVA_HOME=/usr/lib/jvm/jdk1.8
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=./:${JAVA_HOME}/lib:${JRE_HOME}/lib:/home/yxl/download/tomcat/lib/servlet-api.jar
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/usr/lib/jvm/jdk1.8/bin
输入如下语句使修改的环境变量立即生效而不用重启
source /etc/environment
再次输入java -version,得到如下结果说明修改成功
注:关于修改环境变量的一个发现就是,虽然修改了/etc/profile和/etc/environment,在重启后重新登录bash时,对于 root账户该环境变量依然无效,可以利用source命令对配置文件进行更新,但是每次进入root账户都得这样太麻烦了,一个技巧就是将所有对环境变 量的修改添加到.bashrc文件中,这样在每次bash登录时就会自动加载了,一劳永逸。我的.bashrc文件末尾如下图所示,对于PATH采用的是具体路径指定,没有将$PATH本身作为右值的一部分,这样是为了避免重复。最后面的CATALINA_HOME环境变量是tomcat的安装路径:
export JAVA_HOME=/usr/lib/jvm/jdk1.8
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=./:${JAVA_HOME}/lib:${JRE_HOME}/lib:/home/yxl/download/tomcat/lib/servlet-api.jar
export PATH=.:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/usr/lib/jvm/jdk1.8/bin
export CATALINA_HOME=/home/yxl/download/tomcat/
二,安装JSP容器tomcat
tomcat可以与Apache共同搭建Web服务器,Apache负责静态HTML文件,tomcat负责解析JSP文件,也可以单独使用,这里为了学习JSP的开发,单纯使用tomcat就足够了。
1,从官网http://tomcat.apache.org/下载最新版的tomcat,现在的最新版为8.0
2,解压下载的软件包
tar xvzf apache-tomcat-8.0.14.tar.gz
3,进入解压文件下的bin目录,可执行文件startup.sh和shutdown.sh分别用于启动和关闭tomcat服务器。
4,启动后在浏览器中输入localhost:8080/,得到如下界面说明启动成功(tomcat默认使用8080端口),网页默认根目录位于解压文件下的:xxx/webapps/ROOT/index.html
5,测试JSP运行
在tomcat网页根目录webapps/ROOT/下新建test目录,并在test目录下新建如下JSP文件,命名为test.jsp
xxx/tomcat_install_dir/webapps/test/test.jsp
1 <html>
2 <body>
3 <center>
4 Now time is: <%=new java.util.Date()%>
5 </center>
6 </body>
7 </html>
在浏览器中输入localhost:8080/test/test.jsp,得到如下页面说明运行成功
三,搭建Servlet环境
1,修改环境变量CLASSPATH,在末尾添加servlet-api.jar的路径,CLASSPATH修改后的内容如下:(我的tomcat解压文件被重命名为tomcat,根据tomcat解压路径不同,添加的内容也不同)
如果不添加如上内容,不能正常编译Servlet类,编译时出现如下错误:
四,测试Servlet开发环境
1,Servlet开发简介
Servlet是运行在Web服务器上的Java程序,它读取浏览器发出的HTTP请求,生成结果,并向浏览器发送文档,一般是HTML格式。
Servlet开发时遵循一定的目录规则,在webapps下,我们新建自己开发用的项目文件夹xxx/tomcat/webapps/test,所有的文件都在该文件夹及其子目录下。为了能够正常运行Servlet程序,我们需要新建xxx/tomcat/webapps/test/WEB-INF子目录,在WEB-INF目录下新建xxx/tomcat/webapps/test/WEB-INF/classes子文件夹,用于存放我们编写的Servlet类的编译结果,为了方便,我们将编写的.java源程序也放在该目录下。在实际部署时,有多种方式,例如将生成的类打包成jar格式,那么jar格式的文档需要放置在另一个需要新建的子目录xxx/tomcat/webapps/test/lib下。
web.xml用于向Tomcat注册我们编写的Servlet类,可以将xxx/tomcat/webapps/ROOT/WEB-INF/web.xml拷贝到我们的xxx/tomcat/webapps/test/WEB-INF/目录下。web.xml示例代码及元素介绍见下一步。注意,如果没有此web.xml文件以及加入对应的类注册信息,在浏览器中输入URL后会出现404 NOT FOUND 错误。
2,测试不使用包的Servlet
示例代码:
a,xxx/tomcat/webapps/test/WEB-INF/classes/HelloServlet.java,编译后的文件为xxx/tomcat/webapps/test/classes/HelloServlet.class
1 import java.io.*;
2 import javax.servlet.*;
3 import javax.servlet.http.*;
4
5 public class HelloServlet extends HttpServlet
6 {
7 public void doGet(HttpServletRequest request,
8 HttpServletResponse response)
9 throws ServletException, IOException
10 {
11 response.setContentType("text/html");
12 PrintWriter out = response.getWriter();
13 out.println("<html><head><title>head</title></head><body><h1>Hello Servlet</h1></body></html>");
14 }
15 }
b,xxx/tomcat/webapps/test/WEB-INF/web.xml
1 <?xml version="1.0" encoding="ISO-8859-1"?>
2 <!--
3 Licensed to the Apache Software Foundation (ASF) under one or more
4 contributor license agreements. See the NOTICE file distributed with
5 this work for additional information regarding copyright ownership.
6 The ASF licenses this file to You under the Apache License, Version 2.0
7 (the "License"); you may not use this file except in compliance with
8 the License. You may obtain a copy of the License at
9
10 http://www.apache.org/licenses/LICENSE-2.0
11
12 Unless required by applicable law or agreed to in writing, software
13 distributed under the License is distributed on an "AS IS" BASIS,
14 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 See the License for the specific language governing permissions and
16 limitations under the License.
17 -->
18 <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
19 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
20 xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
21 http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
22 version="3.1"
23 metadata-complete="true">
24
25 <display-name>Welcome to Tomcat</display-name>
26 <description>
27 Welcome to Tomcat
28 </description>
29
30 <servlet>
31 <servlet-name>Test1</servlet-name>
32 <servlet-class>HelloServlet</servlet-class>
33 </servlet>
34
35 <servlet-mapping>
36 <servlet-name>Test1</servlet-name>
37 <url-pattern>/servlet1</url-pattern>
38 </servlet-mapping>
39
40 </web-app>
代码解释:1-28行是头部和根元素,无需理会,30-38行是添加进去的类注册信息,servlet-name元素的值Test1任意命名,合法即可。servlet-class元素的值HelloServlet是类名,这个肯定不能错,url-pattern表示从浏览器中输入URL的格式,前面需要加上我们的项目文件夹的名称。完整的一个URL如下:
http://localhost:8080/test/servlet1
在初次开发的时候经常遇到的一个问题就是浏览器中输入URL后得到404错误,这时需要仔细检查下面几个方面,也是我已经犯过的错误:
关键字是否输入错误,例如servlet-pattern被我写成了servlet-patter,少一个,多一个字符都不行。
类名称,也就是servlet-class元素中的值是否正确。
url-pattern元素的值必须以“/”或者“*.”开头,有一次我将url-pattern的值赋成了servlet1,结果总是404错误,浪费了好几个小时来排错。
所有的注册信息都必须在<web-app>和</web-app>之间。
所有的元素必须成对存在,<servlet>必须以标签</servlet>结束,这也是xml文件的规则。
每次修改web.xml或者Servlet代码之后都需要重新启动Tomcat。
c,在浏览器中输入:http://localhost:8080/test/servlet1,不出意外的话得到如下结果,如果是404对这步骤b进行检查:
3,测试使用包的Servlet
相比不使用包的Servlet,多了两个变化,一个是需要新建一个子目录,名称就是包名,比如包名称为coreservlets,那么新建子目录为
xxx/tomcat/webapps/test/WEB-INF/classes/coreservlets。二是web.xml文件的servlet-class需要改成“包名.类名”,即多了一个点号,下面直接上代码。
a,xxx/tomcat/webapps/test/WEB-INF/classes/coreservlets/HelloServlet.java,编译后的结果为xxx/tomcat/webapps/test/WEB-INF/classes/coreservlets/HelloServlet.class
1 package coreservlets;
2
3 import java.io.*;
4 import javax.servlet.*;
5 import javax.servlet.http.*;
6
7 public class HelloServlet extends HttpServlet
8 {
9 public void doGet(HttpServletRequest request,
10 HttpServletResponse response)
11 throws ServletException, IOException
12 {
13 response.setContentType("text/html");
14 PrintWriter out = response.getWriter();
15 out.println("<html><head><title>Hello</title></head><body><h1>Hello Servlet</h1>" +
16 "</body></html>");
17 }
18 }
b,xxx/tomcat/webapps/test/WEB-INF/web.xml
1 <?xml version="1.0" encoding="ISO-8859-1"?>
2 <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4 xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
5 http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
6 version="3.1"
7 metadata-complete="true">
8
9 <display-name>Welcome to Tomcat</display-name>
10 <description>
11 Welcome to Tomcat
12 </description>
13
14 <servlet>
15 <servlet-name>Test1</servlet-name>
16 <servlet-class>HelloServlet</servlet-class>
17 </servlet>
18 <servlet-mapping>
19 <servlet-name>Test1</servlet-name>
20 <url-pattern>/servlet1</url-pattern>
21 </servlet-mapping>
22
23 <servlet>
24 <servlet-name>Test2</servlet-name>
25 <servlet-class>coreservlets.HelloServlet</servlet-class>
26 </servlet>
27 <servlet-mapping>
28 <servlet-name>Test2</servlet-name>
29 <url-pattern>/servlet2</url-pattern>
30 </servlet-mapping>
31
32 </web-app>
为了节省篇幅,删掉了web.xml自带的注释。23-30行是我们为了coreservlets.HelloServlet添加的类注册信息,只是在servlet-class元素的值中加上了一个包名。
c,在浏览器中输入http://localhost:8080/test/servlet2,得到如下结果
呼,终于大功告成了,折腾了好久