Servlet编程下
1,servlet的运行原理
servlet的底层技术
1.xml的解析
2,反射
- 服务器启动后解析web.xml,然后根据servlet标签的servlet-class子标签配置的全限定名 com.java.web.foundational.servlet.HelloworldServlet使用反射技术来创建对象
- 当浏览器在地址栏输入http://localhost:8080/javaweb/helloworld回车发起get请求之后,根据请求项目的资源路径地址从web.xml中查找servlet-mapping标签的url-pattern,然后根据url-pattern对应的servlet-name 查找servlet标签的子标签servlet-name,然后通过反射技术调用Servlet对象的service方法
http://localhost:8080是Tomcat服务器地址;/javaweb虚拟路径对应项目的真实路径是E:\Java项目代码\javaweb2\java-web-foundational\target\java-web-foundational_war_exploded/helloworld 请求路径的资源地址。
2, servlet的生命周期
servlet的生命周期就是servlet对象从创建到销毁的过程
默认情况下是在第一次请求访问时创建,而且在服务器关闭或者该项目从服务器中移除时销毁。
- inint()方法 ,是在创建servlet时会创建的方法,只会执行一次,该方法可以做一些初始化操作,如读取文件的数据
- service()方法
Servlet接口
servlet源码翻译
javax.servlet public interface Servlet
定义所有 servlet 必须实现的方法。
servlet 是在 Web 服务器中运行的小型 Java 程序。 Servlet 接收并响应来自 Web 客户端的请求,通常是通过 HTTP(超文本传输协议)。
为了实现这个接口,您可以编写延伸的通用servlet javax.servlet.GenericServlet或的HTTP Servlet扩展javax.servlet.http.HttpServlet 。
该接口定义了初始化 servlet、服务请求和从服务器中删除 servlet 的方法。 这些被称为生命周期方法,按以下顺序调用:
servlet 被构造,然后用init方法初始化。
处理从客户端到service方法的任何调用。
servlet 停止服务,然后使用destroy方法destroy ,然后垃圾收集并完成。
除了生命周期方法之外,该接口还提供了getServletConfig方法,servlet 可以使用它来获取任何启动信息,以及getServletInfo方法,它允许 servlet 返回关于它自己的基本信息,例如作者、版本和版权。
GenericServlet类
定义一个通用的,与协议无关的servlet,要编写用于web的Http Servlet 请修改为{@link javax.serlvet.http.HttPServlet
HttpServlet类
提供一个抽象类来创建子类以创建适用于网站的HTTp servlet的子类必须至少覆盖一种方法
doGet 如果servlet支持Http GET请求
doPost 用于HTTP post请求
doPut 用于HTTP PUT请求
Servlet通常运行在多线程服务器上,因此请注意Servlet必须处理并发请求并小心同步对共享资源的访问。
共享资源包括内存数据(例如实例或者类变量)和外部对象(例如文件,数据库和网络连接)。有关在java程序中处理多线程的更多信息,参考多线程编程
在Idea中 new Servlet; 配置过模板后,标准的servlet程序
@WebServlet(name = "StanderdServlet", value = "/${entity_Name}")
public class StanderdServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
}
doPost
doGet
约定post请求调用doGet请求