Servlet技术

Servlet技术,第1张

Servlet技术

Servlet是一个基于Java技术的Web组件,用于处理Web请求,生成动态内容,运行于服务器端,由Servlet容器创建并调用

创建Servler

  • 继承HttpServler对象

  • 重写doPost()或者doGet()方法

部署servlet

1.配置web.xml

 
        servletTest
        servlet.ServletTest
    

    
        servletTest
        /servletTest.html
    	

2.WebServlet注解

package Servlet;

import javax.servlet.*;
import java.io.IOException;
@WebServlet("/FirstServlet")    //注解表示servlet默认路径可以省略上面servlet部署
public class FirstServlet implements Servlet {
    //用于初始化,service第一次被访问时执行一次
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        System.out.println("执行了init");
    }

servlet接口常用方法

servlet接口定义了所有servlet主键必须实现的方法

目录说明void init(ServletConfig config)Servlet对象的初始化方法 由Servlet容器调用void service( ServletRequest req, ServletResponse res)处理客户端的请求 由Servlet容器调用void destroy()释放Servlet对象所使用的资源 由Servlet容器调用ServletConfig getServletConfig()返回传递给init()方法的ServletConfig对象,该对象包含此Servlet的初始化和启动参数String getServletInfo()返回字符串文本形式的Servlet相关信息

GenericServlet抽象类

抽象类GenerivServlet定义了通用的不依赖于协议的servlet

目录说明public void init(ServletConfig config)实现Servlet接口中init(ServletConfig config)方法将ServletConfig实例进行保存以备用public void init()用于在子类中重写,以实现用户订制的初始化工作public String getInitParameter(String name)返回web.xml中名称为name的初始化参数的值public ServletContext getServletContext()返回ServletContext对象的引用

HttpServlet抽象类

抽象类HttpServlet继承自GenerivServlet类,除了具有GenerivServlet类相似的方法,还针对http提供了相关的技术支持,能够对http的post、get等请求进行差异化处理

目录说明public void service( ServletRequest req, ServletResponse res)实现GenericServlet抽象类中的service()方法,根据请求方法的类型调用相应的doGet()或doPost方法protected void service( HttpServletRequest req, HttpServletResponse res)接收HTTP请求,并将它们分发给此类中定义的一系列doXxx()方法protected void doXxx( HttpServletRequest req, HttpServletResponse res)根据请求方式的不同分别调用的相应处理方法,如doGet()、doPost()等

ServletContext接口

1.ServletContext是一个接口,他表示Servlet上下文对象

2.一个web工程,只有一个ServletContext对象实例

3.ServletContext对象是一个域对象

域对象:是一种像Map一样存取数据的对象,叫域对象

ServletContextt类的四个作用域

1.获取web.xml中的配置上下文参数context-param

2.获取当前的工程路径,格式:/工程路径

3.获取工程部署后在服务器硬盘上的绝对路径

4.像Map一样存取数据

目录说明String getInitParameter( String name)获取应用范围中名为name的初始化参数值,在web.xml中使用元素定义void setAttribute( String name, Object object)设置名称为name的属性Object getAttribute(String name)获取名称为name的属性void removeAttribute(String name)从Servlet上下文中删除指定名称的属性String getRealPath(String path)返回参数所代表目录的真实路径void log(String message)记录一般日志信息

ServletConfig接口

ServletConfig类(servlet程序的配置信息类) Servlet程序和ServletConfig对象都是由Tomcat负责创建的,我们只负责使用,Servlet程序默认是第一次访问的时候创建,ServletConfig是每个Servlet程序创建时,就创建一个对应的ServletConfig对象

作用: 可以获取Servlet程序的别名Servlet-name的值 获取初始化参数init-param 获取ServletContext对象

目录说明Enumeration getInitParameterNames()获取Servlet所有初始化参数的名称String getInitParameter(String name)获取以name命名的初始化参数值ServletContext getServletContext()返回Servlet的上下文对象引用

web.xml的配置


        
        HelloServlet
        
        servlet.HelloServlet

        
        
            
            username
            
            root
        
        
            
            url
            
            jdbc:mysql://localhost:3306/1
        
    

    
        
        HelloServlet
        
        /hello
    

 Java类中

public void init(ServletConfig servletConfig) throws ServletException {
        System.out.println("2.init初始化方法");

        //1. 可以获取Servlet程序的别名Servlet-name的值
        System.out.println("HelloServlet程序的别名是:"+servletConfig.getServletName());
        //  2. 获取初始化参数init-param
        System.out.println("初始化参数username的值是:"+servletConfig.getInitParameter("username"));
        System.out.println("初始化参数url的值是:"+servletConfig.getInitParameter("url"));
      //  3. 获取ServletContext对象
        System.out.println(servletConfig.getServletContext());
    }

ServletRequest接口

servlet组件能够利用servletRequest接口获取客户端的请求数据

 

目录说明Object getAttribute(String name)获取请求域中名称为name的属性值void setAttribute( String name, Object object)在请求域中保存名称为name的属性void removeAttribute(String name)清除请求域中名字为name的属性String getCharacterEncoding()返回请求体所使用的字符编码void setCharacterEncoding( String charset)设置请求体的字符编码String getParameter(String name)返回指定请求参数的值String[ ] getParameterValues( String name)返回指定请求参数的全部值RequestDispatcher getRequestDispatcher(String path)返回指向指定路径的请求分发对象

HttpServletRequest接口

HttpServletRequest接口位于java.servlet.http包中,HttpServletRequest接口继承自ServletRequest接口,同时增加了一些用于读取http请求信息的方法

目录说明String getContextPath()返回请求的上下文路径,上下文路径是请求URI的开始部分cookie[ ] getcookies()返回客户端在此次请求中发送的cookie对象HttpSession getSession()返回和此次请求相关联的session对象,若没有为客户端分配session对象,则创建一个新的String getMethod()返回此次请求所使用的HTTP方法的名字,如GET、POSTString getHeader(String name)获取指定的请求头信息

ServletResponse接口

servlet组件可以使用ServletResponse对象设置和发送响应数据

目录说明PrintWriter getWriter()返回用于向客户端发送文本的PrintWrite对象String getCharacterEncoding()返回发送响应正文所使用的字符编码void setCharacterEncoding(String charset)为即将发送到客户端的响应设置字符编码void setContentType(String type)设置发送到客户端的响应的内容类型ServletOutputStream getOutputStream()返回适合于在响应中写入二进制数据的ServletOutputStream对象

HttpServletResponse接口

HttpServletResponse接口继承自ServletResponse接口,用于在发送响应时提供特定于http的功能

目录说明void addcookie(cookie cookie)向响应中增加一个cookie 多次调用,可设置多个cookievoid addHeader( String name, String value)向响应中添加一个名称为name、值为value的响应报头void sendRedirect(String location)向客户端发送一个临时的重定向响应,以便客户端访问新的URLvoid encodeRedirectURL(String url)使用session ID对用于重定向的URL进行编码

Servlet生命周期 

示例代码:

package Servlet;

import javax.servlet.*;
import java.io.IOException;
@WebServlet("/FirstServlet")    //注解表示servlet默认路径可以省略上面servlet部署
public class FirstServlet implements Servlet {
    //用于初始化,service第一次被访问时执行一次
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        System.out.println("执行了init");
    }
    
    @Override
    public ServletConfig getServletConfig() {
        System.out.println("执行了getServletConfig");
        return null;
    }
    
    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("执行了service");
    }
    
    @Override
    public String getServletInfo() {
        System.out.println("执行了getServletInfo");
        return null;
    }

    //销毁,服务器关闭时执行
    @Override
    public void destroy() {
        System.out.println("执行了destroy");
    }
}

 首页代码:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>

  
    $Title$
  
  
  
  

 结果:

 

Servlet继承体系

通过继承HttpServlet实现Servlet程序

一般使用继承HttpServlet类的方式实现Servlet程序

1.缩写一个类去继承HttpServlet类 2.根据业务重写doGet或者doPost方法 3.到web.xml中的配置Servlet程序的访问地址

Httpservlet类实现

package servlet;

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

public class HelloSrevlet2 extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //系统默认使用get请求
        System.out.println("HelloSrevlet2 的doPost请求");
    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("HelloSrevlet2 的doGet请求");
    }
}

访问应用上下文

使用元素声明Web应用的全局范围参数

:参数名

:参数值


    adminEmail
    [email protected]

JSP对比Servlet

JSP:在HTML页面嵌入Java代码和JSP标记

便于表现层开发

前后端代码混乱,不利于代码重用和模块化开发

Servlet:在Java类中输出HTML代码

便于代码重用和模块化开发

不利于开发表现层功能、开发效率低

@webservlet常用属性

目录数据类型说明nameString指定Servlet名称,默认为类的全限定名urlPatternsString[]指定一组Servlet的URL匹配模式loadOnStartupint指定Servlet的加载顺序initParamsWebInitParam[]指定一组Servlet初始化参数

疏导图

 

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5609362.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-15
下一篇 2022-12-15

发表评论

登录后才能评论

评论列表(0条)

保存