servlet基础

一:什么是servlet?


 

servlet 是运行在web服务器的java小程序,可以获取并针对web客户端的请求做出响应(一般情况下通过Http进行传输通信。),是一种用于开发动态web资源的技术。

补充:静态web资源(HTML页面):指web页面提供给浏览器的数据始终不变。

           动态web资源(servlet,jsp):指web页面提供给浏览器的数据是由程序产生的,不同的时刻访问web页面呈现的内容不一样。

二:开发动态web资源步骤:

  1. 编写一个实现servlet接口的java类。
  2. 把开发好的Java类部署到web服务器中。

三:servlet生命周期:

  1. 初始化阶段:ini()方法(一次)
  2. 运行阶段:service(HttpServletRequest request,HttpServletResponse reponse)方法,线程处理。
  3. 消亡阶段:destroy()方法(一次),释放资源。

具体过程如下:从浏览器(Client)获取连接”/helloWorld.html” — Tomcat Connector模块将请求(Request)传递给 Container模块 — Container 模块会做以下事情 —— 分析HTPP请求信息,组装成HttpServletRequest对象 —— 创建新的HttpServletResponse对象 —— 根据路由配置,搜索相应的Servlet,并创建一个线程用于处理本次请求。此时线程会将上面RequestResponse对象的索引传递给Servlet — 新线程中的Servlet处理逻辑 — 线程结束后,通过HttpServletResponse对象的PrintWriter,返回浏览器一个信息。 (转自:https://zhuanlan.zhihu.com/p/25828675)

语句分析:

response.setContentType("text/html;charset=gbk");//设置响应的页面类别和页面编码

PrintWrite out = response.getWriter(); //构造一个标准的输出流,把想要表达的内容传输到页面上。

①:编写一个servlet类(包括init(),service(),destroy(),doGet(),doPost()方法)

package gacl.servlet.study;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.PrintWriter;

@WebServlet("/ServletDemo1")
public class ServletDemo1 extends HttpServlet {
    private static final long serialVersionUID = 1L;
       public void init() throws ServletException{
           System.out.print("初始化init()方法");
    }
  
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.print("调用doGet()方法");
        response.setContentType("text/html;charset = gbk");
        PrintWriter out = response.getWriter();
                out.print("<html>");
                out.print("<head><title>测试0-10循环</title>");
                out.print("<body>");
                out.print("开始执行。。。。");
        int count = 0;
        for(int i=0;i<=10;i++) {
            count+=i;
        }
                out.print("程序结果为:"+count);
                out.print("</body>");
                out.print("</head>");
                out.flush();
                out.close();
    }

    
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
        doGet(request, response);
    }
public void destroy() {
    System.out.print("调用destroy()方法");
    
}
}

 

②配置web.xml文件。(供servlet给外界访问,把这个servlet映射到一个URL地址上。)

<servlet>
<servlet-name>ServletDemo1</servlet-name>
<servlet-class>gacl.servlet.study.ServletDemo1</servlet-class>
</servlet>

<servlet-mapping>
<servlet-name>ServletDemo1</servlet-name>
<url-pattern>/servlet/ServletDemo1</url-pattern>
</servlet-mapping>

  四:servlet初始化参数:在web.xml中通过<init.param>配置

//servlet初始化参数:会将参数封装到servletConfig对象中,在servlet调用init方法时将servletconfig对象传给servlet。进而获得servlet初始值

private ServletConfig config;
public void init(ServletConfig config) throws ServletException {
this.config = config;
}

调试过程中遇到问题:Server Tomcat v8.5 Server at localhost failed to start.

原因是xml.web中的<servlet-mapping>重复了,删掉即可。

关于web.xml配置servlet问题:在web.xml文件中可以配置多个servlet,格式如下:

<servlet>
    <servlet-name>ServletContextDemo1</servlet-name>
    <servlet-class>gacl.servlet.study.ServletContextDemo1</servlet-class> 
</servlet>
<servlet>
    <servlet-name>ServletContextDemo2</servlet-name>
    <servlet-class>gacl.servlet.study.ServletContextDemo2</servlet-class>
</servlet>
  <servlet-mapping>
    <servlet-name>ServletContextDemo1</servlet-name>
    <url-pattern>/servlet/ServletContextDemo1</url-pattern>
  </servlet-mapping>
    <servlet-mapping>
    <servlet-name>ServletContextDemo2</servlet-name>
    <url-pattern>/servlet/ServletContextDemo2</url-pattern>
  </servlet-mapping>

 五:ServletContext对象实现数据共享

 

posted @ 2018-06-11 19:54  芦苇不学习  阅读(97)  评论(0)    收藏  举报