javaweb之servlet基础

版权声明:版权所有,如需引用,请注明出处! 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);

猜你喜欢

转载自blog.csdn.net/DHRMM999/article/details/82429428