JavaTomcat(二)

来源:互联网 发布:淘宝 木子禅佛珠总店 编辑:程序博客网 时间:2024/05/16 03:00
XML文件是干什么的?
答:专门用来存放"有关系"的数据


<中国>
<广东>
<深圳></深圳>
<湛江></湛江>
</广东>
<广西>
<桂林></桂林>
</广西>
<河北>
<北京></北京>
<保定></保定>
</河北>
</中国>


------------------------------------------------------------


bin     --> tomcat的启动与关闭文件
conf    --> tomcat的配置文件(最重要的一个是web.xml文件)
lib     --> 支撑tomcat运行的jar包
logs    --> tomcat的日志文件
temp    --> tomcat的临时目录(tomcat自已用的,我们不用去管它)
webapps --> 非常重要的一个目录,专门用来放web资源(也就是放网站)
work    --> 专们用来放JSP翻译成Servlet后的*.java文件


------------------------------------------------------------


重点学习使用java来开发网站!


一个网站由许多网页组成,而网页又分为以下两种:
1. 静态网页(静态web资源)
2. 动态网页(动态web资源)




tomcat帮我们管理网站
第一种情况、我们写的是静态页面的网站 [直接放在webapps目录下即可]
第二种情况、我们写的是动态页面的网站 []


------------------------------------------------------------


如何编写动态网页?使用Servlet技术
我们现在已经进入了javaweb javaee阶段的学习,不再是javase。
既然如此,我们使的API文档就不能再使用以前的了。


Servlet容器是什么意思?
Servlet容器指的就是能够支持Servlet技术的服务器。
Tomcat非常好的支持了Servlet和JSP技术


Servlet的生命周期[Servlet写在服务器端的]:
Servlet生命开始: Tomcat帮我们开始Servlet的生命,tomcat帮我new一个Servlet的实例出来,如 HttpServlet servlet = new HttpServlet();
Servlet生命重要时刻: 初始化一个Servlet [通过调用init()方法]
Servlet生命重要时刻: 处理每一个用户发出的请求[通过调用service()方法] 
public void service(...){
new Thread(new Runnable(){
public void run(){
servlet.service();//这里写这代码,只是说明每一个请求都对应着一个线程的,所以对于贡献资源,就要注意同步问题啦
}
}
}
Servlet生命的结束:关闭tomcat服务器的时候,Servlet的生命就结束了 [通过调用destroy()方法]


Servlet什么时候创建一个实例呢?(什么时候new?)
答:在客户端第一次发出请求时候.只会new一次,就是只存在一个servlet实例


Servlet在什么时候调用init方法?
答:在客户端第一次发出请求时候, 但在new之后.


Servlet在什么时候调用service方法?
答: 每一个用户的请求都会对应一个service方法.
当某一个浏览器去访问Servlet的时候,tomcat内部会启动一个新的线程(也就是service方法)来处理用户的请求。


Servlet在什么时候销毁呢?
答:当tomcat关闭的时候。[注意:是在tomcat关闭前调用的]


Servlet生命周期的详细过程:
当客户端的浏览器发送一个请求给服务器的容器时, 容器开始检查Servlet. 首先调用Servlet的构造方法实例化一个Servlet对象, 接着容器会创建一个ServletConfig的实例并把它作为参数传给init()方法, 这个ServletConfig包含了DD里的配置信息以及其它资源的引用, 当init()方法执行完毕之后, 这个Servlet对象才是一个真真的完整的Servlet. 接着容器才调用service()方法来处理客户的请求, service()方法会隐式的调用HttpServletRequest对象里的getMethod()方法来判断客户端的请求方式(如 Get, Post 等), 并根据请求方式来确定调用doGet(), doPost()方法等等. 在这个过程完成之后, 以后的当每一个Http请求发送过来时, Servlet只会为每一个请求启动一个线程并调用service()方法来进行处理, 并不会再次调用init()方法进行初始化. 最后, 当容器正常关闭时, 容器会在销毁之前自动调用destroy()方法来结束Servlet的生命




------------------------------------------------------------


Tomcat和Servlet有什么关系?
答: Servlet是用来做动态网页的, 而Tomcat专门把Servlet做好的网站提供给别的电脑访问.
当然,Tomcat还有一个重要功能就是帮助管理Servlet.


用记事本写Servlet示例:


第一步 按要求建立web相关文件及文件夹


webapps
--网站名(ILOVEYOU)
----WEB-INF(文件夹)
--------classes (文件夹,专门用来放*.class文件的, 放写好的Servlet)
--------lib (文件夹,专门用来放jar包的,这个文件夹可有可无)
--------web.xml (文件, 专门用来配置Servlet相关的东西)


第二步 写Servlet
在classes文件下建包:com\itcast\servlet
然后建立MyServlet.java文件,如下:


package com.itcast.servlet;
import javax.servlet.http.*;
import javax.servlet.*;
import java.io.*;
class MyServlet extends HttpServlet {
protected void service(HttpServletRequest req,HttpServletResponse resp)
                throws ServletException, IOException {


System.out.println("service()方法被调用!");
}
}


为了能够编译此文件,需要引入Servlet的APIjar包,因为我们的jdk没有带servlet的jar包
classpath: 找到*.class文件或jar包


在cmd命令下set classpath表示查看当前的classpath设置情况
set classpath=%classpath%;tomcat的servlet里jar包的位置
这种在cmd命令下设置classpath的方式称为"临时环境变量设置", 等到cmd命令窗口关闭的时候就失效了。


等到把MyServlet.class文件放好在classes目录下之后,那么这个Servlet就已经交给tomcat管理了。接下来,还有一个问题要解决,什么问题呢?
如何访问我们写好的Servlet程序呢?
只能为这个Servlet程序配置一个路径(在网址上写的路径)
如何为Servlet程序配置一个路径?
答:通过tomcat提供的web.xml文件可以配置,办法如下:
// <servlet>标签专门用来设置Servlet程序的名字和*.class文件的所在路径
<servlet>
// 是为你的MyServlet.class文件随便起一个名字
<servlet-name>MyServlet</servlet-name> 


// 这是放置我们写好的MyServlet.class文件的具体路径
// 此路径在classes目录的基础之上设置
// 记住必须要带包,无包则报错
<servlet-class>com.itcast.servlet.MyServlet</servlet-class>
</servlet>


// <servlet-mapping>标签专门用来配置浏览器上的访问路径
<servlet-mapping>
// 这个名字对应的就是上面的<servlet>标签的<servlet-name>,要一样!
<servlet-name>MyServlet</servlet-name>


// 这个就是配置浏览器上的访问路径
// 习惯上先打个/,这个/表示我们的网站名称
// 然后设置网站名称后跟着什么路径
<url-pattern>/xxx</url-pattern>
</servlet-mapping>


使用记事本写Servlet时,出现了以下错误:
javax.servlet.ServletException: Error instantiating servlet class MyServlet
java.lang.IllegalAccessException: Class org.apache.catalina.core.StandardWrapper can not access a member of class MyServlet with modifiers ""
原因是因为web.xml里的<servlet-class>标签里的class文件没有设置包名
<servlet-class>里的class文件必须要有包,不允许无包.


如何编译带包的*.java文件?
假设有个java文件在 E:\a\b\Test.java
编译办法:
(1) 在E盘根目录下:javac a/b/Test.java
(2) 在E:\a\b\目录下:javac Test.java
运行方式:
(1) 在E盘根目录下:java Test
[注意,不要去E盘根目录下执行java Test,会报异常NoClassDefFoundError]


------------------------------------------------------------


以上这种使用记事本的方式来写Servlet有如下缺点:
1. 非常容易出错
2. 开发速度很慢
3. 配置很繁琐


我们以后不再使用记事本的方式来写Servlet,改用工具MyEclipse,使用MyEclipse来写Servlet程序将会非常的方便。


MyEclipse开发Servlet步骤:
1. 新建web Project,选择javaee 5.0
2. 建包com.itcast.servlet
3. 在src文件夹上右击new -> servlet 把doGet和doPost勾上
4. 把这个工程配置到tomcat里面去(这个过程称为“部署”)






细节:如何更改网站的名称?
右键工程名 --> Properties -> MyEclipse -> Web  [Web Context-root] //这个在我们修改了web工程的名称后,记得最好也修改web的访问路径,也就是网站的名称







原创粉丝点击