servlet是在服务器端运行的程序
一个servlet就是一个类,并且通过请求-响应编程模型来访问这个驻留在服务器内存里的servlet程序
tomcat
容器等级 tomcat container engine HOST servlet context
tomcat
container
engine
HOST 主机
servlet
context 一个context对应一个web工程
servlet接口:init() service() destroy()
GenericeServlet抽象类 与协议无关的Servlet
HttpServlet抽象类:实现了Http协议的servlet
自定义Servlet类:一般覆盖doGet 和 doPost方法,还有init,destroy方法
用myEclipse创建的servlet类的运行过程:
browser
在 web.xml中的中,
找到这个"/servlet/HelloServlet"的url-pattern,根据url-pattern找到对应的servlet-name,
在web.xml 中的中
根据servlet-name找到,
根据找到对应的servlet类,完成doGet或doPost方法
servlet生命周期
构造,初始化,doPost,doGet,destroy
browser -request-> servlet是否存在?
否:装载servlet类并创建实例
init()
调用servlet方法 doGet or doPost
是:调用servlet方法
服务器关闭,则调用destroy方法
tomcat管理servlet
登录结束自动跳转到home页面,若home页面需要登录页面的数据,可以在登录页面把数据保存到session中,request.getSession.setAttribute(“sessionName”,user);
setAttribute()键值对形式,第一个是session的名字,第二个是要保存到session中的数据
然后在服务器中跳转到home
request.getRequestDispatcher("…/home.html").forward(request,response);
forward(request,response)是将请求
tomcat 的启动需要JavaHome环境变量
/work
jsp的翻译后的java,编译后的class文件
一个应用 对应 一个端口,注意端口不要被占用
servlet.xml 修改端口号
部署项目的方法
1 把项目直接放到webapps中
比如在webapps新建project/1.html
然后输入localhost:8080/project/1.html就可以了
要求项目编译好,war包
2 修改conf/server.xml文件
在HOST标签中加入
path:浏览器访问时的路径名
docBase:web项目的WebRoot所在的路径,注意是WebRoot的路径,不是项目的路径。其实也就是编译后的项目
reloadble:设定项目有改动时,tomcat是否重新加载该项目
3 进入到 apache-tomcat-7.0.52\conf\Catalina\localhost 目录,新建一个 项目名.xml 文件
添加:
总结
①、第一种方法比较普通,但是我们需要将编译好的项目重新 copy 到 webapps 目录下,多出了两步操作
②、第二种方法直接在 server.xml 文件中配置,但是从 tomcat5.0版本开始后,server.xml 文件作为 tomcat 启动的主要配置文件,一旦 tomcat 启动后,便不会再读取这个文件,因此无法再 tomcat 服务启动后发布 web 项目
③、第三种方法是最好的,每个项目分开配置,tomcat 将以\conf\Catalina\localhost 目录下的 xml 文件的文件名作为 web 应用的上下文路径,而不再理会 中配置的 path 路径,因此在配置的时候,可以不写 path。
通常我们使用第三种方法
tomcat service.xml
一个就是一个服务器的实例
server port =“8005” shutdown = “SHUTDOWN”>
能够处理请求的服务
一个service 可以有多个connector,一个connector代表一个请求,监听一个端口
<connector port = “8080” protocol http
server
service name = Catalina
Connector port = 8080 protocol = http connectTimeout protocol redirectPort = 8443//开启https
Connector port = 8009 protocol = ajp
Engine name = Catalina defaultHost = localhost,
当engine收到localhost的请求时,根据 name,把请求发送给name为Catalina的service,service再 调用 Connector
browser request -> server -> service -> engine -> service -> connector
发起http请求 相当于 建立一个Socket
browser如何与server建立socket连接呢?
根据ip地址和port
建立socket链接必须由底层的TCP/IP来建立TCP连接
建立实例化socket之前要TCP三次握手协议
建立TCP连接需要IP和端口
因此要建立客户端和服务端的连接,需要创建一个socket实例,为socket分配未被占用的端口
服务端要建立serverSocket
如何模拟浏览器来发起一个htt请求呢?
HttpClient
为什么http连接是无状态的?或者说为什么要设计成无状态的?
为了能够同时服务更多的用户,应为当前互联网应用每天都会处理上亿个请求,不可能每个用户访问一次后就一直保持这个连接
interface HttpServletRequest extends interface ServletRequest
HTTPServlet extends GenericServlet implements Servlet
Servlet
init
service(Servlet Request var1,ServletResponse var2)
getServletInfo()
destory()
backlog :在服务器拒绝接收传入的请求之前,传入的连接请求的最大队列长度