JavaWEB快速入门之Servlet

一、servlet简介

    (1)概述

                   Java Servlet 是运行在 Web 服务器或应用服务器上的程序,简单来说,就是一个java类,是javweb的规范之一(接口),也是三大组件之一(serlvet,listener,filter),它属于动态资源。servlet的作用是处理请求,服务器会把接收到的请求交给servlet来处理,在servlet通常需要:

                    接收请求数据、 处理请求、 完成响应。

      (2)架构

(3)servlet执行原理
           ① 当服务器接收到客户端浏览器的请求后,会解析请求URL路径,获取访问的Servlet的资源路径
          ② 查找web.xml文件,是否有对应的<url-pattern>标签体内容。
          ③ 如果有,则在找到对应的<servlet-class>全类名
          ④ tomcat会将字节码文件加载进内存,并且创建其对象
          ⑤ 调用其方法

 (4)Servlet 生命周期

          Servlet 生命周期可被定义为从创建直到毁灭的整个过程

           ① Servlet 通过调用 init () 方法进行初始化

           ② Servlet 调用 service() 方法来处理客户端的请求

           ③ Servlet 通过调用 destroy() 方法终止(结束)

           ④ 最后,Servlet 是由 JVM 的垃圾回收器进行垃圾回收的

public class HelloServlet implements Servlet {
           prvate  ServletConfig config;
           Public void destory();
           public ServletConfig getServletConfig(){
                 return config;
           }
           public void init(ServletConfig config)throws ServletException{
                  this.config=config;
	    System.out.println("初始化!");	
           }
           Public void service(ServletRequest req,ServletResponse res)
	throws ServletException,IOException{
	    PrintWriter out = res.getWrite();
	    out.println("Hello world");
	    out.close();
           }
           public void destroy() {
	super.destroy();
	System.out.println("释放资源!");	}

二、servlet的使用

(1)实现servlet

        ① 实现javax.servlet.Servlet接口;
        ② 继承javax.servlet.GenericServlet类;
        ③ 继承javax.servlet.http.HttpServlet类

 

(2)2种配置方式

①  注解   @webServlet("/路径")

②  web.xml中进行配置

<servlet>    
 <servlet-name>xxx</servlet-name>    
 <servlet-class>com.zking.AServlet</servlet-class></servlet>
<servlet-mapping>    
 <servlet-name>xxx</servlet-name>   
<url-pattern>/xxx.do</url-pattern>
 </servlet-mapping>

(3)JSP中的内置对象对应Servlet中的什么对象 


| jsp内置对象 | servlet中java对象   | 获取                    |
| ----------- | ------------------- | ----------------------- |
| request     | HttpServletRequest  | service方法中的req参数  |
| response    | HttpServletResponse | service方法中的resp参数 |
| session     | HttpSession         | req.getSession()        |
| exception   | Throwable           |                         |
| page        | this                | this                    |
| pageContext | PageContext         |                         |
| application | ServletContext      | getServletContext()     |
| config      | ServletConfig       | getServletConfig()      |
| out         | JspWriter           | resp.getWriter()        |

(4)设置编码


request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");


(5) 如何在serlvet中获取到当前项目的绝对路径       

             注:这里的绝对路径指的是基于项目的根目录而不是基于磁盘。

String path = this.getServletConfig().getServletContext().getContextPath();
/项目名称
path+"/index.jsp"

(6)Servlet接口的使用

public interface Servlet{
    public void init(servletConfig config) throws ServletException;
    public ServletConfig getServletConfig();
    public void service(ServletRequest req, ServletResponse resp) throws ServletException,IOException;
    public String getServletInfo();
    public void destory();

}

(7)Servletconfig对象常用方法


 | 返回值             | 方法名                        | 说明                     |
 | ------------------ | ----------------------------- | ------------------------ |
 | String             | getInitParameter(String name) | 根据参数名称获取参数的值 |
 | Enumeratin<String> | getInitParameterNames()       | 根据所有参数名称的枚举   |
 | String             | getSevletName()               | 获取servlet的名称        |
 | ServletContext     | getServletContext()           | 获取servletContext对象   |

      ServletConfig的配置方式

          ①  在<servlet>标签种,通过<init-param>标签来配置。有两个子标签:
          ②  <param-name>:代表初始化参数的key。
          ③ <param-value>: 代表初始化参数的value

(8) ServletContext对象常用方法

 | 返回值              | 方法名                                 | 说明                                   |
 | ------------------- | -------------------------------------- | -------------------------------------- |
 | void                | setAttribute(String name,Object value) | 向域对象中存储数据                     |
 | Object              | getAttribute(String name)              | 通过名称获取域对象中的数据             |
 | void                | removeAttribute(String name)           | 通过名称移除域对象中的数据             |
 | Enumeration<String> | getAttributeNames()                    | 获取域对象中所有数据的名称             |
 | String              | getSevletContextName()                 | 获取servletContext的名称               |
 | String              | getContextPath()                       | 获取当前应用的访问虚拟目录             |
 | String              | getServletInfo()                       | 获取服务器名称和版本信息               |
 | String              | getInitParameter(String name)          | 根据名称获取全局配置的值               |
 | Enumeration<String> | getInitParameters()                    | 获取全局配置的所有名称                 |
 | String              | getRealPath(String path)               | 根据虚拟目录获取应用部署额磁盘绝对路径 |

ServletContext配置方式

        ServletContext不像ServletConfig接口在Servlet标签里配置,而是针对于整个应用的配置,也叫全局的初始化参数;
  在<web-APP>标签中,通过<context-param>标签来配置,有两个子标签:
        ①  <param-name>: 代表全局初始化参数的key。
        ② <param-value>: 代表全局初始化参数的value。

 

(9)doGet() 方法
           GET 请求来自于一个 URL 的正常请求,或者来自于一个未指定 METHOD 的 HTML 表单,它由 doGet() 方法处理。

public void doGet(HttpServletRequest request,
                  HttpServletResponse response)
    throws ServletException, IOException {
    // Servlet 代码
}

(10)doPost() 方法
           POST 请求来自于一个特别指定了 METHOD 为 POST 的 HTML 表单,它由 doPost() 方法处理。

public void doPost(HttpServletRequest request,
                   HttpServletResponse response)
    throws ServletException, IOException {
    // Servlet 代码
}

三、案例 

   使用表单的POST 方法实例

            ① 布局

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>菜鸟教程(runoob.com)</title>
</head>
<body>
<form action="HelloForm" method="POST">
名字:<input type="text" name="first_name">
<br />
姓氏:<input type="text" name="last_name" />
<input type="submit" value="提交" />
</form>
</body>
</html>

           ② 使用

// 导入必需的 java 库
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

// 扩展 HttpServlet 类
public class HelloForm extends HttpServlet {
 
  // 处理 GET 方法请求的方法
  public void doGet(HttpServletRequest request,
                    HttpServletResponse response)
            throws ServletException, IOException
  {
      // 设置响应内容类型
      response.setContentType("text/html;charset=UTF-8");

      PrintWriter out = response.getWriter();
	  String title = "Using GET Method to Read Form Data";
      String docType =
      "<!doctype html public \"-//w3c//dtd html 4.0 " +
      "transitional//en\">\n";
      out.println(docType +
                "<html>\n" +
                "<head><title>" + title + "</title></head>\n" +
                "<body bgcolor=\"#f0f0f0\">\n" +
                "<h1 align=\"center\">" + title + "</h1>\n" +
                "<ul>\n" +
                "  <li><b>名字</b>:"
                + request.getParameter("first_name") + "\n" +
                "  <li><b>姓氏</b>:"
                + request.getParameter("last_name") + "\n" +
                "</ul>\n" +
                "</body></html>");
  }
  // 处理 POST 方法请求的方法
  public void doPost(HttpServletRequest request,
                     HttpServletResponse response)
      throws ServletException, IOException {
     doGet(request, response);
  }
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ning_ning_03

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值