Servlet 远航 预备篇

趁着现在项目不是很紧,我打算抽出一些时间写个Servlet和JSP的一个专题, 算是对自己这么多年来的一个技术总结吧!
我们会从最基础的开始包括HTTP协议的讲解,逐渐深入到最后的java主流框架都会进行深入的源码解析.Let’s get to work…

一.超文本转移协议(HTTP)

HTTP协议使得Web服务器与浏览器之间可以通过互联网(Internet)或者企业内部网(Intranet)来交换数据.万维网联盟(W3C)是一个开发标准的国际化社区,它负责修订和维护这个协议.HTTP的第一个版本是HTTP0.9,之后是HTTP1.0 最后又被HTTP1.1取代.HTTP1.1是在W3C的RFC2616中定义的.

Web服务器每天24小时运行,随时等待HTTP客户端的连接和资源请求.在HTTP中,总是由客户端发起连接,服务端从不主动连接客户端.在查找某个资源时,用户是通过点击一个包含URL(Uniform Resource Locator,统一资源定位器)的链接,或在他的浏览器地址栏中输入一个URL进行的.

  • 下面举URL的两个例子:

http://google.com/index.html
http://facebook.com/index.html

URL的第一部分是http,它是协议的标识.并非所有的URL都用HTTP.例如下面两个例子,虽然没用HTTP,但它们是有效的:

mailto:[email protected]
ftp://[email protected]

一般来说,URL的格式是这样的:

protocol://[host.]domain[:port][/context][/resource][?query string]

或者如下所示:

protocol://IP address[:port][/context][/resource][?query string]

  • 方括号中的内容都是可选的,因此URL可以像http://yahoo.ca或者http://192.168.1.9这么简单.另外,IP地址其实就是分配给某一台计算机或者另一种设备的一个数字签名.一台计算机可以有多个域名,因此,几个域名也可以同时共用一个IP地址.例如可以不用http://google.com,也可以用http:/209.85.143.99 为查询某个域名的IP地址可以在控制台使用ping命令,如:

ping google.com

  • IP地址很难记住,人民都喜欢使用域名,但是有些域名是无法买到的,如example.com和example.org,因为它们是留着备用的,如编写文档时作为示例用.

  • 主机名host部分可以有也可以,它们表示的则是互联网或者内部网中另一个完全不同的位置.如http://yahoo.com(没有主机名)与http://mail.yahoo.com(有主机名,为mail)表示的是两个完全不同的位置,www是最盛行的主机名,因此它常常省略.

  • 80是HTTP默认端口号,如果WEB服务器在80端口上就不需要端口号也能到达主机,否则每次访问WEB服务器就需要输入端口号.例如:Tomcat默认端口为8080上允许,因此需要输入端口号:

    http:localhost:8080

  • localhost是一个保留名称,用来表示主机,即正在运行WEB浏览器的这台计算机.

  • URL中的context部分指应用程序的名称,可以省略.Web服务器可以运行多个context或多个应用程序.其中一个可以设置为默认context,如果请求的是默认中的context资源,则URL中的context部分可以省略.

  • 一个context可以有一个或多个默认资源(一般为index.html index.htm或者default.htm).一个没有资源名称的URL,通常作为默认资源.如歌context中包含多个资源,当客户端没有指定默认资源时,将总是返回优先级最高的那一个.

  • 在资源名称之后,一般是一个或者多个查询字符串.查询字符串是指可以传到服务器进行处理的一个键/值对.

1.1HTTP请求

这里写图片描述
一个HTTP请求中包含三个部分:

  • 方法/统一资源标识符(URI)/协议/版本
  • 请求标头
  • 实体主体

方法/URL协议版本号,放在请求的第一行.
HTTP1.1支持7种请求类型:GET POST HEAD OPTIONS PUT DELETE以及TRACE
URI用于指定一个互联网资源,是相对于服务器的根目录.以正斜线(/)开头.统一资源定位器(URL)实际上也是一种URI.

请求标头中包含关于客户端环境和请求实体主体的有用信息.各标头之间用一个回车换行序列符隔开

在标头和实体主体之间是一个空行(CRLF),对于HTTP请求格式很重要,CRLF告诉服务器,实体主体从这里开始.

1.2HTTP响应

一个HTTP响应中也包含三个部分:

  • 协议/状态码/描述
  • 响应标头
  • 实体主体
    响应标头的第一行告诉我们所使用的协议版本是HTTP1.1,并且请求成功(200)
    响应标头包含与HTTP请求中类似的游泳信息.响应实体主体是响应本身的HTML内容.标头和实体主体之间用一系列的回车换行符(CRLF)隔开.
    WEB服务器响应成功时返回状态码200,未授权访问状态码是401,未经允许的HTTP方法是405;

二.Tomcat

2.1下载和配置Tomcat

从http:tomcat.apache.org下载最新版本Tomcat,并且应该是zip或gz格式的最新版二进制发行包. 解压完在安装目录下看到几个目录: - bin目录看到几个用来起点和停止Tomcat的程序. - webapps在这里部署应用程序. - conf目录包含了配置文件,包括server.xml和tomcat-users.xml文件. - lib目录,包含了编译Servlet和定制标签所需要的Servlet和JSP的API.

2.2Tomcat环境变量

1.===> 进入bin目录下,双击startup.bat看是否报错。一般肯定会报。
2.===> 右键我的电脑===>高级===>环境变量 新建一个 变量名为 JAVA_HOME 然后变量值是 你的JDK的bin目录的上一层。 再新建一个 变量名为CATALINA_HOME 变量值是你的Tomcat的bin的目录的上一层。

3.===> 进入Tomcat bin目录下 双击shutdown.bat 然后重复1 的操作。看是否报错。应该不报了。

4.===> 进入apache-tomcat-5.5.12\conf 目录下 找到tomcat-users.xml 然后创建一个用户名密码。

5.===>然后进入Tomcat主目录中conf目录下的server.xml文件,找到其中的Connector port=”8080”,并将其更改为Connector port=”8088”

jdk+tomcat环境变量配置在blog里记录一下,以备后用。

JDK环境变量配置:

如果你的JDK安装在C盘里,如:C:\j2sdk1.4.2_05,那么就在系统变量里(当然也可以在用户变量里)点新建:

变量名:JAVA_HOME

变量值:C:\j2sdk1.4.2_05

再次点新建:

变量名:classpath

变量值:.;%JAVA_HOME%\lib\dt.jar;

并在path里加入 .;%JAVA_HOME%\bin;

那么你的JDK就配置成功了,当然最好是再试验一下是否配置成功,那么就写一个简单的程序验证一下:

Public class Test{

public static void main{

   System.out.println("successful")

}

}

运行代码,如果没问题,那一切OK,有问题,请检查一下上边所写的是否有错。

Tomcat环境变量配置:

如果你的Tomcat安装在C盘里,如:F:\Tomcat50(在这里切记一下,安装Tomcat时,在其字母周围一定不要存在空格,否则最后可能导致配置不成功)

同样,在系统变量里点新建:

变量名:CATALINA_BASE

变量值:F:\Tomcat50;

再次新建:

变量名:CATALINA_HOME

变量值:F:\Tomcat50;

点击确定后在classpath中加入%CATALINA_HOME%\common\lib\servlet-api.jar;

在path中加入%CATALINA_HOME%\bin;

  确定后你的Tomcat就配置好了,同样要验证是否配置成功,那就运行Tomcat,点击启动(或Start service)后,打开浏览器,敲入http://localhost:8080,如果出现页面,那么配置成功。

经常看到许多人问如何配置JDK和JSP,现在我把方法总结下,希望对大家有所帮助。

第一步:下载jdk和tomcat

第二步:安装和配置你的jdk和tomcat:执行jdk和tomcat的安装程序,然后设置按照路径进行安装即可。

1.安装j2sdk以后,需要配置一下环境变量,在我的电脑->属性->高级->环境变量->系统变量中添加以下环境变量(假定你的jdk安装在c:\jdk1.6):

JAVA_HOME=c:\jdk1.6

classpath=. ;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\ lib\tools.jar;(.;一定不能少,因为它代表当前路径)

path=%JAVA_HOME%\bin

接着可以写一个简单的java程序来测试JDK是否已安装成功:

public class Test{

public static void main(String args[]){

System.out.println(“This is a test program.”);

}

}

将上面的这段程序保存为文件名为Test.java的文件。

然后打开命令提示符窗口,cd到你的Test.java所在目录,然后键入下面的命令

javac Test.java

java Test

此时如果看到打印出来This is a test program.的话说明安装成功了,如果没有打印出这句话,你需要仔细检查一下你的配置情况。

2.安装Tomcat后,在我的电脑->属性->高级->环境变量->系统变量中添加以下环境变量(假定你的tomcat安装在c: \Tomcat):

CATALINA_HOME: C: \Tomcat

CATALINA_BASE: C: \Tomcat

TOMCAT_HOME: C:\Tomcat

然后修改环境变量中的classpath,把tomat安装目录下的common\lib下的servlet.jar追加到classpath中去,修改后的classpath如下:

classpath=.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;%CATALINA_HOME%\common\lib\servlet.jar;

接着可以启动tomcat,在IE中访问http://localhost:8080,如果看到tomcat的欢迎页面的话说明安装成功了。

第三步:建立自己的jsp app目录

1.到Tomcat的安装目录的webapps目录,可以看到ROOT,examples, tomcat-docs之类Tomcat自带的的目录;

2.在webapps目录下新建一个目录,起名叫myapp;

3.myapp下新建一个目录WEB-INF,注意,目录名称是区分大小写的;

4.WEB-INF下新建一个文件web.xml,内容如下:

2.3启动和停止Tomcat

可以使用bin目录下startup.bat(Windows)或startup.sh文件(Unix/Linux/Mac Os)来启动Tomcat. 在浏览器中输入以下地址来测试Tomcat:

http://localhost:8080

运行bin目录下的shutdown.bat(Windows)或shutdown.sh()(Unix/Linux/Mac Os)文件来停止Tomcat.

2.4定义Context

为了将一个Servlet/JSP应用程序部署到Tomcat中,需要显示或隐式地定义一个Tomcat context,每个Tomcat context都表示Tomcat中的一个web应用程序. 显示定义Tomcat context有几种方式:
  • 在Tomcat的conf/Catalina/localhost目录下创建一个XML文件.

    context文件中必须包含一个Context元素作为其根元素.没有子元素,并且是文件中的唯一元素.例如:

Context docBase=”C:/apps/commerce” reloadable=”true”/>

它唯一必要属性是docBase,用来指定应用程序的位置.reloadable属性是可选的,如果reloadable存在并且为true,Tomcat会对应用程序进行监测,每当发现这种变更时,Tomcat就会重新载入应用程序.

  • 在Tomcat的conf/server.xml文件中添加一个Context元素.
    定义context的另一种做法是在conf/server.xml文件中添加一个Context元素.在server.xml的Host标签下添加Context标签,并指定path属性.例如:
<Host name"localhost" appBase="webapps" unpackWARs="true"
        autoDeploy="true">
    <Context path="/commerce"
                docBase="C:/apps/commerce"
                reloadable="true"
    />
</Host

不建议通过server.xml来管理context,因为只有重启Tomcat,更新才会生效.

  • 通过将一个war文件或者整个应用程序复制到Tomcat的webapps目录下,来隐式地部署应用程序.

2.5定义资源

定义一个JNDI资源,供应用程序在Tomcat context定义中使用,资源用Context元素下的Resource元素表示.
例如:为了添加一个打开MySQL数据库连接的DataSource资源,需添加这个Resource元素:

<Context [path="/appName"] docBase="...">
    <Resource name="jdbc/dataSourceName"
        auth="Container"
        type="javax.sql.DataSource"
        username="..."
        password="..."
        driverClassName="com.mysql.jdbc.Driver"
        url="..."
        />
</Context>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章