Sevelet
服务器开发-->LAMP(经典的开源模式:linux--Apache(tomcat)--Mysql数据库--php(jsp+servlet))
C/S 模式: 是客户端和服务器 如穿越火线
特点:不稳定 功能丰富 效果复杂 更新慢
应用范围:游戏开发
B/S模式: 是浏览器(broswer)和服务器 如网页游戏
特点:稳定 功能单一 效果比较简单 更新快
应用范围:企业级,商业应用
Servlet
编程语言:是用java语言写出来的;(不是用前端web编的网页,javaSe是为其服务的; Jsp(java服务器页面)是为java服务页面(相当于前端页面))
实质:服务器上的小程序
应用:主要用在第三方框架以及本身程序的引入外部技术的使用
tomcat
服务器开发,需要浏览器访问(全程都是tomcat :编译---运行---呈现)
(意思就是:在tomcat中写一段程序,tomcat帮助你运行,在浏览器中打开,访问你这个地址程序,并给你呈现一个页面 )
快捷键:shift + 右键 ==》打开当前文件夹下 的命令窗口
文件夹中webapps是对外暴露的
网页中:地址+端口+要访问的路径(路径可以造假-->假路由)
目录结构就必须是这样的:
webapps:
新建WEB-INF(死写法):
文件夹:classes(存放程序的class文件) 和libs(存放第三方库的jar包)
文件:web.xml(做映射配置:说白了就是用什么url访问,我给你访问什么程序)
(编译报错原因:我们现在用的是javaSE的JDK,不是javaEE(服务器的),javaSE找不到关于服务器包的class文件)
注:xml文件的标签是可以随便写的,不是像web那样呈现页面的,作用:用标签的映射来记录数据
(??为什么标签都可以随便写了还是死的写法呢??)
servlet-name 可以随便起名 servlet -class不能瞎起,得是class地址(.class文件) url-pattern 用什么URL访问这个demo,然后通过映射找到对应的类(.class文件)
流程:当你在网址上输入……\hehe时,就会自动找到xml文件,找配置然后加载配置,通过url找到对应的class文件,并运行.class文件并呈现
Servelet原理:是因为我们继承HttpServer类,才会这么特殊能够“run as server”运行,(不能像javaSE那样“run as java……”是因为没有main方法,写上也没用)
这个类是一个能够在tomcat里面运行,受tomcat编译的类
受tomcat编译,能在服务器上形成程序,(能gan什么)向访问他的人发送一个页面,这个页面有helloworld
实质:利用java程序向前端打印一个页面,并不是本地的mian方法之类的,他是在tomcat里,tomcat运行他并呈现
找url啊。找映射配置的什么都是tomcat干的事儿
tomcat功能:
真正的tomcat在javaResources中是没有存储的,他会把.java文件编译成.class文件再放入到Webcontent的classes文件夹中,tomcat并编译,把信息分解成WEB-INF下面的classes+web.xml,再放入到tomcat中的first文件夹中的/WEB_INF文件夹中
java源程序在workSpace工作空间中,但是找网页部分要在tomcat中,工作空间也可以找(能够同步),但是找tomcat更加直观一点(但是更改tomcat中文件并不能同步到工作空间中====》这更加说明了tomcat中的WEB-INF是从工作空间中tomcat同步过去的)
假路由:
按不同的URL去显示不同的内容,和按不同的IP显示不同的电脑意思一样,
路由的功能就是分发不同的路径
自己通过new Class创建的。java文件属于手动配置的,xml文件不会帮你自动配置,你手动配置后,也要在重启tomcat才能通过RUL找到??;因为你之前创建的是servlet,xml文件会自动帮你配置好
servlet生命周期:
因为当前类中没有写service方法,但是客户端访问的时候却会调用到service方法和init方法(只有第一次会调用init方法),所以只能调用父类HttpServlet的service方法;
在这个HttpServlet类的service方法中调用了doget/dopost方法,要是当前子类没有覆写doget/dopost方法,那么会调用父类的doget/dopost方法,但是发现无论怎么样(if…else…)doget和dopost的方法体内部都要发送错误(要是这样就没正确结果了),所以子类必须覆写dopost和doget方法
每次访问服务器,在第一次tomcat会帮我们创建Servlet对象,并调用service方法提供服务;而我们当前类继承HttpServelet,tomcat是会调用service方法,帮我们调用doget/dopost方法; 这个doget/dopost是Httpservlet中的service方法调用的,而service方法是在servlet里面我们通过URL访问时,tomcat会调用这个类去new一个对象并调用service方法(所以每次刷新页面都会显示在服务中)
我们继承的Httpservlet,这个类把servlet类的所有方法都覆写了,子类覆写doget/dopost的话,那么声明父类new子类,调用的是Httpservlet的service方法,但是service的方法中的doget/dopost是子类新覆写的(这跟模板模式一样,固定的流程在父类,让子类去实现方法,在通过调用父类的大方法(里面包含着将要被子类覆写的新方法),如实现子类的方法,特点:父抽象类已声明好(Httpservlet也是抽象类),固定流程已定好);这是正儿八经的模板模式,(模板模式模型中,父类也是抽象类,父类大方法中的方法也是抽象的)
在弗雷中帮我们调用doget/dopost,而父类的service是tomcat调用的,而service调用doget/dopost所以我们覆写
注意:这里tomcat创建当前类的对象是单实例的,应该是运用了多态,(已验证:显示地写一个构造器,里面打印输出语句,因为创建对象就是调用构造器,结果多次刷新页面,却只能打印一次,服务方法确实多次调用)

浙公网安备 33010602011771号