Servlet基础

来源:互联网 发布:dnf淘宝买金币安全吗 编辑:程序博客网 时间:2024/05/29 07:31

一. 什么是servlet

  • servlet是在服务器上运行的小程序。一个servlet就是一个java类,并且可以通过“请求-响应”编程模型来访问的这个驻留在服务器内存里的servlet程序。
  • jsp的前身就是servlet

二. Tomcat容器等级

这里写图片描述

Tomcat容器分为四个等级:
1)Container 容器,集装箱
2)Engine 引擎容器
3)Host 主机()
4)Servlet容器(tomcat最低级别的容器)里面包含了一个或多个Context
—— Context (上下文,背景,环境) 一个context对应一个web项目
—— Wrapper 容器里的封装部分。

三. 第一个Servlet

创建一个Servlet需要经过以下步骤:
1)新建一个Java类,继承“javax.servlet.http.HttpServlet”;
2)实现“doGet()”方法或“doPost()”方法处理不同请求

package servlet;import java.io.*;import javax.servlet.ServletException;import javax.servlet.http.*;//继承HttpServletpublic class HelloServlet extends HttpServlet {    @Override    protected void doGet(HttpServletRequest request, HttpServletResponse response)            throws ServletException, IOException {        System.out.println("处理get请求");        response.setContentType("text/html;charset=utf-8");  //设置解析类型及编码        PrintWriter out = response.getWriter(); //获取输出流        out.println("<em>收到你的get...</em><br>");    }    @Override    protected void doPost(HttpServletRequest request, HttpServletResponse response)            throws ServletException, IOException {        System.out.println("处理post请求");        response.setContentType("text/html;charset=utf-8");        PrintWriter out = response.getWriter(); //获取输出流        out.println("<em>收到你的post...</em><br>");    }}

3)在应用配置文件“web.xml”中注册新建的Servlet;

  <servlet>    <servlet-name>HelloServlet</servlet-name>  //servlet名字    <servlet-class>servlet.HelloServlet</servlet-class> //servlet类(详细到包)  </servlet>  <servlet-mapping>    <servlet-name>HelloServlet</servlet-name>  //servlet名字    <url-pattern>/servlet/HelloServlet</url-pattern> //该类文件的相对路径  </servlet-mapping>

这样,在jsp页面中通过get或post请求该servlet,servlet做出响应

<body>    <h1>第一个servlet</h1>    <hr>    <a href="servlet/HelloServlet">get方式请求servlet</a>    <form action="servlet/HelloServlet" method="post">        <input type="submit" value="post方式请求servlet">       </form>  </body>

使用myeclipse在src中新建servlet文件,可以自动继承HttpServlet,并在web.xml中完成注册

对于以上代码,存在这样的执行流程:
1、提交超链接请求后,服务器会在web.xml中的<servlet-mapping>寻找对应的url(url-pattern)地址,然后得到这个servlet的名称。
2、得到名称后,在servlet中寻找名称相同的标签,然后得到处理类(servlet-class文件)
3、进入servlet处理类,根据请求方式(get或者post)执行doGet或者doPost)方法

四. Servlet的生命周期

这里写图片描述

Servlet装载的三种情况:
1、自动装载:某些Servlet如果需要在Servlet容器启动时就加载,需要在web.xml下它的<Servlet>标签里中,添加优先级代码:
<Servlet>
<load-on-startup>1<load-on-startup>
</Servlet>

数字越小表示该servlet的优先级越高,会先于其他自动装载的优先级较低的先装载
2、Servlet容器启动后,客户首次向某个Servlet发送请求时,Tomcat容器会加载它
3、当Servlet类文件被更新后,也会重新自动加载

Servlet是长期驻留在内存里的。某个Servlet一旦被加载,就会长期存在于服务器的内存里,直到服务器关闭
Servlet被装载后,Servlet容器创建一个Servlet实例并且调用Servlet的init()方法进行初始化。在Servlet的整个生命周期内,init()方法只被调用一次。
当服务器关闭时,会调用Servlet的destroy()方法Servlet销毁

五. 获取Jsp内置对象

这里写图片描述

六. Servlet路径跳转

这里写图片描述

例如,图中这种目录结构
1、JSP跳转到Servlet
1)相对路径 <a href="servlet/HelloServlet"></a>
*注意:如果写成”/servlet/TestServlet”会报错,因为第一个’/’表示的是【服务器根目录:http://localhost:8080/】
2)绝对路径,通过内置成员变量path实现,<a href="<%=path%>/servlet/TestServlet"></a>
*注意:这里的path得到的是项目根目录,如【http://localhost:8080/ServletDemo】

2、Servlet跳转JSP
1)请求重定向:response.sendRedirect(request.getContextPath()+"/index.jsp");这里通过request.getContextPath()方法获得项目根目录,或者通过”../index.jsp”取得上层路径得到
2)服务器内部转发:request.getRequestDispatcher("../index.jsp").forward(req,resp);

3、web.xml中的<url-pattern>
<url-pattern>/servlet/RegServlet</url-pattern>
这里必须以/开头,斜线表示项目的根目录

原创粉丝点击