版权声明:版权所有,如需引用,请注明出处! https://blog.csdn.net/DHRMM999/article/details/82429428
1.servlet是运行在服务器的Java小程序,能够响应客户端的请求,并向客户端发送响应结果。
2.servlet请求流程
2.1通过浏览器向服务端发送请求
2.2服务端的web容器接收到请求并根据请求的路径找到相应的servlet处理
2.3servlet接收到请求并处理,将结果返回给web容器
2.4web容器最终将相应的结果交给浏览器
3.实现servlet需要实现两个步骤
实现servlet接口,并重写他的五个方法
init()初始化方法
getServletConfig();获取servlet配置信息,将获取的信息传给init
service();请求的接受方法,并处理请求做出响应
getServletInfo();返回有关servlet的信息
destory();由servlet容器调用,指示将从服务中取出该servlet,此方法仅在servlet的service()方法已经退出或者在过了超时期之后再调用一次。在调用此方法后,servlet不在对此servlet调用service方法。
在web.xml中注册该servlet
//配置servlet信息
<servlet>
//配置servlet名称,必须唯一
<servlet-name>servlet1</servlet-name>
//配置servlet的完全路径;包名+类名
<servlet-class>cn.com.servlet1</servlet-class>
</servlet>
//配置servlet映射路径(访问路径)
<servlet-mapping>
//配置servlet名称,必须和上面相同
<servlet-name>servlet1</servlet-name>
//配置虚拟路径(访问路径)
<url-pattern>/demo1</url-pattern>
<servlet-mapping>
注意:<servlet-name>:该标签内容必须唯一,且两个对应映射的名称也相同
<url-pattern>:该标签内容为服务端访问该servlet的地址;例如http://localhost:8080/servletdemo/demo1;
<servlet-class>:类的完全名
在xml配置完成后,如果有/demo1请求,将按照相应的类名找到处理方式
4.servlet生命周期
当第一次请求到达时,servlet实例被创建,同时调用init()方法
每一次请求都会调用service()方法进行响应处理。
每当服务器停止或者应用从服务器移除时,调用destory方法。
5.HttpServlet
HttpServlet是servlet的实现类,因为对于任何一个servlet都需要写五个方法,所以根据http协议封装了HttpServlet
编写servlet只需要继承HttpServlet,并重写doGet和doPost方法。
编写步骤:
编写一个类继承HtppServlet
重写doGet和doPost方法
在doPost方法中,默认调用的是doGet方法
表单是get时调用deGet方法
表单是post时,调用doPost方法。
6.servlet自动加载
servlet默认第一次访问时创建实例。但是我们可以通过配置让服务器启动时加载,创建servlet实例。
好处:init方法在创建时调用,某些servlet初始化操作较多,比较消耗时间。
使用<load-on-startup>标签
<servlet>
<servlet-name>servlet1</servlet-name>
<servlet-class>cn.com.servlet1</servlet-class>
<load-on-startup>3</load-on-startup>
</servlet>
注意,标签顺序有要求,放在最后,数字越小优先级越高。
7.ServletConfig
在servlet的配置文件中,可以使用一个或多个标签为servlet配置一些初始化参数(配置在某个servlet标签或者整个web.xml下 )
当servlet配置了初始化参数后,web容器在创建servlet实例对象时,会自动将这些初始化参数封装到servletconfig中,并在调用servlet的init方法时,将servletconfig作为参数传入。
8.ServletContext对象(域对象)
web容器在启动时,它会为每个web应用创建一个对应的servletcontext对象,代表当前web应用
一个微博应用对应一个servletcontext对象
一个web应用下有多个servlet时,多个应用共享一个servletcontext对象、
9.实现数据共享
在servlet中使用以下方法设置属性
servletcontext context = this.getServletContext();
context.setAttribute("data","共享数据");//向域中存了一个data属性
在另一个servlet中获取属性
servletcontext context = this.getServletContext();
String value = (String)context.getAttribute("data");//获取域中的data属性
10.获取源文件
因为servlet会被加载到tomacat中运行,其中src文件会加载到apache-tomacat\wtpwebapps\servlet\web-inf\classes中去
获取真实路径
InputStream inputStream = getServletContext().getResourceAsstream("/web-inf/classes/1.txt");
String path = getServletContext().getRealPath("/web-inf/classes/1.txt");
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
//读取一行
String line = bufferedReader.readLine();
response.getWriter().write("line"+line+"\n"+path);