黑马程序员技术交流社区

标题: Servlet [打印本页]

作者: Masumi    时间: 2019-9-25 13:33
标题: Servlet
概念:运行在服务器端的小程序
Servlet就是一个接口,定义了Java类被浏览器访问到(被tomcat识别)的规则
自定义一个类,实现Servlet接口,实现方法

快速入门
1.创建JavaEE项目
2.定义一个类,实现Servlet接口
3.实现接口中的抽象方法
4.在web.xml中配置Servlet
<!--配置Servlet-->
    <servlet>
       <!--servlet名字-->
       <servlet-name>demo</servlet-name>
       <!--servlet全类名-->
       <servlet-class>cn.itcast.web.servlet.ServletDemo1</servlet-class>
    </servlet>
    <!--配置servlet映射-->
    <servlet-mapping>
       <!--servlet-->
       <servlet-name>demo</servlet-name>
       <!--虚拟路径-->
       <url-pattern>/demo1</url-pattern>
    </servlet-mapping>

实现原理
1.当服务器接收到客户端浏览器的请求后,会解析请求的url路径,获取访问的Servlet的资源路径
2.查找web.xml文件,是否有对应的<url-pattern>标签体内容
3.如果有,则再找到对应的<servlet-class>全类名
4.tomcat将全类名对应的字节码文件加载进内存 Class.forName();
5.创建对象  cls.newInstance();
6.调用方法 service();

生命周期
1.被创建:执行init方法,只执行一次
2.提供服务:执行service方法,可以多次被执行
3.被销毁:执行destroy方法,只执行一次

Servlet中的方法
  init()
  
  Servlet被创建时执行,Servlet在第一次被访问时被创建。只能执行一次
  
  getServletConfig()
  
  获取Servlet的配置对象
  
  service()
  
  每次Servlet被访问时执行,可以被执行多次
  
  getServletInfo()
  
  获取servlet的信息:版本号、作者等
  
  destroy()
  
  在服务器正常关闭时执行,只能执行一次
  


可以配置Servlet的创建时机,配值<servlet>标签下的<load-on-startup>
在服务器启动时创建:值为0或正数
在第一次被访问时创建:值为负数

Servlet的init方法只执行一次,说明Servlet是单例的
多个用户同时访问时,可能存在线程安全问题
解决:尽量不要在Servlet中定义成员变量,即使定义了成员变量也不要修改它的值。

Servlet3.0
好处
支持注解配置,可以不需要使用web.xml进行配置
使用步骤
1.创建JavaEE项目,选择Servlet的版本3.0以上,可以不用创建web.xml
2.定义一个类,实现Servlet接口
3.复写方法
4.在类上使用注解@WebServlet,进行配置

IDEA与tomcat的相关配置
1.IDEA会为每一个tomcat部署的项目单独建立一份配置文件
查看控制台的log:log:UsingCATALINA_BASE:  "C:\Users\fqy\.IntelliJIdea2018.1\system\tomcat\_itcast"
2.工作空间项目和tomcat部署的web项目
tomcat真正访问的是tomcat部署的web项目,tomcat部署的web项目对应着工作空间的web文件夹下的文件
WEB-INF下的文件不能被浏览器直接访问
断点调试:使用”小虫子“启动debug

Servlet体系结构
Servlet --接口
GenericServlet --抽象类,实现了Servlet
enericServlet只把service方法做成了抽象方法,把其它的方法都做了空实现,
        所以,继承GenericServlet只需要重写service方法

HttpServlet --抽象类,继承了GenericServlet,对http协议的一种封装
在HttpServlet中的service方法,会判断请求的方式
对于get方式获取数据:调用doGet()方法
post方式获取数据:调用doPost()方法
所以在使用HttpServlet时需要重写的是doGetdoPost方法

Servlet相关配置

urlpartten:servlet访问路径
1.一个Servlet可以定义多个访问路径:@WebServlet({"/d4","/ddd4","/dddd4"})
2.路径定义规则
/xxx:路径匹配
/xxx/zzz:多层路径,目录结构
*.do:扩展名匹配(前面不能加“/”)






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2