1.
index.jsp只用虚拟地址不用加东西是因为相当于默认的首页在tomct配置中可以设置虚拟地址如果只设置/就是在根目录中直接访问
web下其他的html访问就需要再加地址了
2.这里配置好就可以只要更改了资源(比如添加了一个html就是更新了资源设置了update resources的情况就可以重新部署)
3.
java中接口就是规则
servlet是运行在服务器端的小程序
* Servlet就是一个接口,定义了Java类被浏览器访问到(tomcat识别)的规则。
* 将来我们自定义一个类,实现Servlet接口,复写方法。
4.快速入门
1. 创建JavaEE项目
2. 定义一个类,实现Servlet接口
* public class ServletDemo1 implements Servlet
3. 实现接口中的抽象方法 ------五个方法 (ee解释中说过要全部实现五个方法)
4.配置
配置这里可以配置好几个 不止一个 这里注意
配置这里其实就是给src中的servletdemo01这种名字起一个别名 然后直接输入别名完成信息交互
以上的快速入门这个实现了一个什么结果呢 ? 与直接放在web下的文件夹下的html有什么区别呢
实现结果:
区别就是web下的html可以通过虚拟地址+名字访问出html网页 而这种是信息交互
servlet执行原理
1. 当服务器接受到客户端浏览器的请求后,会解析请求URL路径,获取访问的Servlet的资源路径demo1
2. 查找web.xml文件,是否有对应的资源路径demo1相同的<url-pattern>标签体内容,再找到<servlet-name>demo1
3. 如果有,则在找到对应的<servlet-class>全类名
4. tomcat会将<servlet-class>标签里全类名对应字节码文件加载进内存,并且创建其对象
5. 调用service方法(在servletDemo1中覆盖重写的service方法 因为servlet接口(规则)一定有这个service方法 所以方法被调用了被执行) 所以说不需要创建对象调用方法只要填写代码就可以 创建对象调用方法都是服务器执行的
servlet的五个抽象方法 注意配置文件也要配置好
init()初始化方阿飞 servlet创建时执行一次且只会执行一次
类比一直刷新页面 访问service();service(); 会执行多次
service(); :每一次servlet被访问时都会执行 会执行多次
destory();在servlet被杀死时执行 在服务器正常关闭时执行 只会执行一次
package cn.itcat.web.servlet;
import javax.servlet.*;
import java.io.IOException;
public class ServletDemo2 implements Servlet {
/*init是初始化方法
特点:在servlet创建时执行init();方法,只会执行一次
*/
@Override
public void init(ServletConfig servletConfig) throws ServletException {
System.out.println("init......");
}
/*
获取servletConfig对象
ServletConfig对象是servlet的配置对象 了解 需要自己实现的
*/
@Override
public ServletConfig getServletConfig() {
return null;
}
/*
service();是提供服务的方法
特点:每一次servlet被访问时都会执行 会执行多次
*/
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("service......");
}
/*
获取servlet的一些信息 版本作者等 了解
*/
@Override
public String getServletInfo() {
return null;
}
/*
销毁方法destory();
在servlet被杀死时执行
在服务器正常关闭时执行 只会执行一次
*/
@Override
public void destroy() {
System.out.println("destroy......");
}
}
输出:
servlet生命周期
1.init();
指定servlet的创建时机<load-on-startup>标签
Servlet的init方法,只执行一次,说明一个Servlet在内存中只存在一个对象,Servlet是单例的
* 多个用户同时访问时,可能存在线程安全问题。 好比好多个人同时访问一个对象
(其实servletDemo中也是可以设置变量的 然后再srvice();方法中进行操作)
* 解决:尽量不要在Servlet中定义成员变量。多定义局部变量就不会存在安全问题了 即使定义了成员变量,也不要对其修改值,在成员方法中获取值就好了 不要改变成员变量的值,否则有人修改成员变量有人使用就会产生线程安全问题
2. service(); 提供服务:执行service方法,执行多次
* 每次访问Servlet时,Service方法都会被调用一次。
3. destroy(); 被销毁:执行destroy方法,只执行一次
* Servlet被销毁时执行。服务器关闭时,Servlet被销毁
* 只有服务器正常关闭时,才会执行destroy方法。
* destroy方法在Servlet被销毁之前执行,一般用于释放资源
因为如果在配置文件中配置web.xml的话 资源多了会很乱
* Servlet3.0注解配置
* 好处:
* 支持注解配置----注解又要看一下了。可以不需要web.xml了。
* 步骤:
1. 创建JavaEE项目,选择Servlet的版本3.0以上,可以不创建web.xml
2. 定义一个类,实现Servlet接口
3. 复写方法
4. 在类上使用@WebServlet注解,进行配置
* @WebServlet("资源路径")注解源码 主要是配置urlPatterns();
注意虚拟目录是在运行--编辑配置--写的 而@WebServlet注解里面写的是Servlet资源路径urlpatterns 这里的urlpatterns与之前不用注解的web.xml配置中的<url-pattern>标签是对应的
因为如果在配置文件中配置web.xml的话 资源多了会很乱
* Servlet3.0注解配置
* 好处:
* 支持注解配置----注解又要看一下了。可以不需要web.xml了。
* 步骤:
1. 创建JavaEE项目,选择Servlet的版本3.0以上,可以不创建web.xml
2. 定义一个类,实现Servlet接口
3. 复写方法
4. 在类上使用@WebServlet注解,进行配置
* @WebServlet("资源路径")注解源码 主要是配置urlPatterns();
配置最主要的就是资源路径和原来配置文件中<url-pattern>的别名映射起来
Servlet3.0注解配置方法一
Servlet3.0注解配置方法简化成 其实这里是value省略了
注意区别
虚拟目录是项目访问方式(项目是project)
@WebServlet("资源路径") 括号中是资源路径是urlpattern 与原来配置文件中<url-pattern>标签的映射地址是一样的
项目中src的资源是交互的
web文件夹下的html是网页 index.jsp是默认首页
打断点调试点小虫子