WEB后端复习——Servlet

Servlet是运行在Web服务器或应用服务器上的java程序,它是一个中间层,负责连接来自web浏览器或其他HTTP客户程序和[HTTP服务器]上应用程序
Servlet执行下面的任务:
1)读取客户发送的显示数据。
2)读取由浏览器发送的隐式请求数据。如: http请求头
3)向客户端发送显示数据。servlet和jsp最重要的任务就是将结果包在文本(htm7)、二进制(图片)等格式的文件中。
4)发送隐式的HTTP响应数据。如: http响应头


Servlet生命周期

Servlet的生命周期指的是Servlet从创建到销毁的过程:
(1)当一个请求从HTTP服务器转发给servlet容器时,容器会检查对应的Servlet是否创建,如果没有创建就实例化该Servlet,并调用init()方法,inint()方法只调用一次,后续的请求都从第二步开始;
(2) servlet每收到一个请求,就会调用一次service()方法,根据请求类型调用对应的方法,doGet、doPost等;
(3) servlet销毁前调用一次destroy()方法进行清理操作,该方法只调用一次,随后JVM回收资源。

web启动执行init()方法且只执行一次,每次请求都会执行service方法,项目结束执行destroy方法。


配置Servlet

①在xml中配置

<servlet>
    <servlet-name>Demo</servlet-name>
    <servlet-class>com.exa.Demo5 </servlet-class>
<init-param>
    <param-name>name</param-name>
    <param-value>123</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>Demo5</servlet-name>
<url-pattern>/demo5</url-pattern>
</servlet-mapping>

②注解

在以前的servlet中我们初始化一些参数都是配置在web.xml中的,自从servlet3.0之后给我们提供了注解@WebServlet和@WeblnitParam,@WebServlet是用来配置servlet的属性的,@WeblnitParam是用来配置一些初始化属性的。
 

@WebServlet(name = "Demo",urlPatterns = {"/demo"},initParams = {
        @WebInitParam(name = "name",value = "me")
})
public class Servlet1 extends HttpServlet {
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        this.config=servletConfig;
    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setContentType("text/html");
        PrintWriter out = resp.getWriter();
        String pValue = getServletConfig().getInitParameter("name");
        out.println(pValue);
        out.close();
    }
}

ServletConfig代表当前Servlet在web.xml中的配置信息。
当servlet引擎创建一个servlet实例对象后,调用该实例对象的init(ServletConfig config)方法将Servlet对象传递给Servlet。

    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        String name = servletConfig.getInitParameter("name");
        System.out.println(name);
    }


二.HttpServletRequest
Tomcat会把收到的HTTP请求按照HTTP协议的格式解析成一个HttpRequest对象。

三、HttpServletResponse
Servlet中的doXXX方法会根据请求计算响应,并把响应的数据设置到HttpResponse对象中,然后Tomcat就会把这个HttpResponse对象通过Socket写回给浏览器。

四、ServletContext
它代表了一个 Web 应用程序的环境上下文。每个 Web 应用程序都有一个唯的 ServletContext,它在应用程序启动时被创建,在应用程序关闭时被销毁。ServletContext 存储了应用程序的上下文信息,并且为整个应用程序提供了一个共享的存储空间,使得 servlet 能够共享数据和资源。 servletcontext中的属性的生命周期从创建开始,到服务器关闭结束。

1.如何得到对象
servletcontext context = this.getservletcontext();
⒉方法
添加属性: setAttribute(string name,object obj);
得到值: getAttribute(string name),这个方法返回object

删除属性: removeAttribute(string name)
获取服务器真实文件路径:

context.getRealPath("路径+文件名");
servletcontext.getRealPath(" /img/a.png");
 

 


请求转发
请求转发使用RequestDispatcher接口中的forward()方法来实现,该方法可以把请求转发给另外一个资源,并让该资源对此请求进行响应。转发后浏览器地址栏内容不变。

 

请求重定向

重定向是A找B帮忙,B做不了,让A去找C帮忙;且可以重定向到其他项目中去。重定向是两次请求,转发是同一次请求。
重定向浏览器地址栏的URL改变;而转发浏览器地址栏的URL不变。
重定向传输的信息会丢失; req.setAttribute("user" ,user);,这是将数据存储到请求域中,它只能在一次请求中存在,因此在请求转发中可以共享数据,而在重定向中是无法进行数据共享的;

session对象重定向时,session数据不会丢失
重定向可以跳转到第三方服务器
 

 

相关推荐

  1. web——netbeans ide +jsp+servlet开发学习总结

    2024-05-13 09:02:02       25 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-05-13 09:02:02       91 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-05-13 09:02:02       97 阅读
  3. 在Django里面运行非项目文件

    2024-05-13 09:02:02       78 阅读
  4. Python语言-面向对象

    2024-05-13 09:02:02       88 阅读

热门阅读

  1. 监控易:IP地址管理功能

    2024-05-13 09:02:02       29 阅读
  2. 批处理wordpress文件权限

    2024-05-13 09:02:02       26 阅读
  3. Springboot整合向量数据库Milvus

    2024-05-13 09:02:02       30 阅读
  4. spring中常用注解

    2024-05-13 09:02:02       27 阅读
  5. Android WebSocket 使用指南:详细步骤与实践

    2024-05-13 09:02:02       32 阅读
  6. web3.js的使用

    2024-05-13 09:02:02       34 阅读
  7. 历史文件清理

    2024-05-13 09:02:02       30 阅读