Servlet

 一.Servlet的使用

编写Servlet步骤:

1.自定义类,继承HttpServlet

2.重写service方法

public class FirstServlet extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, 
HttpServletResponse resp) throws ServletException, IOException {

        //编写服务
    }
}

3.在web.xml配置访问的路径

<!--    配置servlet访问路径-->
<!--    servlet路径指定-->
    <servlet>
        <servlet-name>first</servlet-name>
        <servlet-class>com.zqwl.servlet.FirstServlet</servlet-class>
    </servlet>

一个Servlet可以有多个访问路径

(1)/内容(访问时,必须严格匹配)

<servlet-mapping>
        <servlet-name>first</servlet-name>

        <url-pattern>/first</url-pattern>
</servlet-mapping>

注意:修改web.xml之后必须重新启动tomcat服务器。

(2)内容.do(访问时,必须严格匹配)

<servlet-mapping>
        <servlet-name>first</servlet-name>

        <url-pattern>aa.do</url-pattern>
</servlet-mapping>

(3)*.do(访问时,只要为.do结尾都可匹配)

<servlet-mapping>
        <servlet-name>first</servlet-name>

        <url-pattern>*.do</url-pattern>
</servlet-mapping>

(4)/*(访问时,所有内容都能匹配)

<servlet-mapping>
        <servlet-name>first</servlet-name>

        <url-pattern>/*</url-pattern>
</servlet-mapping>

(5)/(访问时,除了jsp,其它内容都能匹配)

<servlet-mapping>
        <servlet-name>first</servlet-name>

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

Idea集成Tomcat

1.复制conf log work 目录,集成的tomcat使用单独的目录。

2.更换了项目部署的目录,默认不在使用tomcat的webapps的目录。

3.集成的每一个tomcat可以单独管理和设置。

欢迎页面

web.xml的欢迎页面也可以匹配多个,优先级从上至下。

<!--默认欢迎页面-->
<welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
</welcome-file-list>

在web.xml可以自定义欢迎页面,它的优先级高于父。

<welcome-file-list>
    <welcome-file>hello.html</welcome-file>
</welcome-file-list>

二.Servlet的继承结构

 1.Servlet接口

  1. init(),创建Servlet对象后立即调用该方法完成一些初始化工作。

  2. service(),处理客户端请求,执行业务操作,可以利用响应对象响应客户端请求。

  3. destroy(),在销毁Servlet对象之前调用该方法。

  4. getServletConfig(),ServletConfig是容器向servlet传递参数的载体。

  5. getServletInfo(),获取servlet相关信息。

2.ServletConfig接口

  1. String getServletName(),获取servlet中servlet-name的值。

  2. ServletContext getServletContext(),获取 ServletContext 对象。

  3. String getInitParameter(String name),获取初始化参数值。

  4. Enumeration getInitParameterNames(),获取所有的初始化参数名。

3. GenericServle抽象类

GenericServlet 是一个抽象类,它实现了 Servlet 接口。它提供了一个通用的、协议无关的 Servlet 基础,可以被扩展以创建特定协议的 Servlet。

4. HttpServlet类

HttpServlet类定义了一系列生命周期方法,包括init()、service()和destroy()。在Servlet容器启动时,init()方法被调用来初始化Servlet。在 HttpServlet的service() 方法中已经把 ServletReuqest 和 ServletResponse 转为 HttpServletRequest 和 HttpServletResponse,不再需要强转。 在每次收到HTTP请求时,service()方法被调用来处理请求,并根据请求类型调用doGet()、doPost()等具体的方法。

doGet() 方法

doGet() 是服务请求中最常用的方法,用于处理请求,当URL的请求类型为GET请求 ,或者是一个未指定请求类型HTML表单,那么该请求将由 doGet() 方法处理。

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

 doPost() 方法

doPost() 是服务请求中最常用的方法,用于处理请求,当请求来自一个特别指定了请求类型为POST的 HTML 表单,那么该请求将由doPost() 方法处理。

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

 5.总结

三. Servlet的生命周期

创建Servlet对象后---------->初始化(调用 init () 方法)--------->处理/响应客户端的请求(调用 service() 方法)--------->销毁(调用 destroy() 方法)

 默认情况:

1.启动服务器,不会创建servlet对象

2.第一次访问servlet时,完成创建和初始化,并只创建和初始化1次

3.关闭服务器,销毁servlet

手动设置:

在web.xml中配置了servlet的load-on-startup

1.启动服务器,完成创建和初始化,并只创建和初始化1次(load-on-startup数值越小启动越早)

2.关闭服务器,销毁servlet

注意:servlet使用单例设计模式

1.所有线程共享一个servlet实例化对象,效率高。

2.尽量不使用全局变量,容易出现线程安全问题。

四.在Tomcat中Servlet的运行原理

在Tomcat中,Servlet的运行原理可以简单描述如下:

  1. 客户端发起HTTP请求,请求到达Tomcat服务器。

  2. Tomcat服务器接收到请求后,根据请求的URL路径找到对应的Web应用。

  3. Tomcat根据Web应用的配置文件web.xml找到匹配的Servlet。

  4. Tomcat创建一个ServletRequest对象和一个ServletResponse对象,并将它们传递给对应的Servlet进行处理。

  5. Servlet容器调用Servlet的初始化方法(init)进行初始化。该方法只会在Servlet第一次被加载时执行一次。

  6. Servlet容器调用Servlet的服务方法(service),并将ServletRequest和ServletResponse对象作为参数传递进去。

  7. Servlet根据请求类型(如GET、POST等)进行不同的处理逻辑。

  8. Servlet完成处理后,生成响应结果,并将其写入ServletResponse对象中。

  9. Servlet容器将ServletResponse对象中的响应数据返回给Tomcat服务器。

  10. Tomcat服务器将响应数据返回给客户端。

五.请求对象

1.GET和POST的区别

  • GET请求会被浏览器主动cache,而POST不会,除非手动设置。

  • GET请求只能进行url编码,而POST支持多种编码方式。

  • GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。

  • GET请求在URL中传送的参数是有长度限制的,而POST则没有。对参数的数据类型GET只接受ASCII字符,

  • POST既可是字符也可是字节。

  • GET相比POST来说不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。

  • GET参数通过URL传递,POST放在Request body中。

2.Service方法开发

1.获取请求数据

(1)获取请求行中数据

请求方式

String method = req.getMethod();

 请求URI

String requestURI = req.getRequestURI();

请求URL

String requestURL = req.getRequestURL();

获取协议及版本

String protocol = req.getProtocol();

(2)获取请求头中数据

获取HTTP请求头部中的"Accept"字段的值

String accept =req.getHeader("Accept");

获取所有头的名字

Enumeration<String> headerNames = req.getHeaderNames();

(3)获取请求中参数

String 变量名 = req.getParameter("参数名")

注意:获取复选框有多个数据,可用数组来接收

String[] 数组名 = req.getParameterValue("参数名");

注意:如果出现乱码问题,可以在首行添加如下代码:

req.setCharacterEncoding("utf-8");

2.处理请求数据

3.处理响应

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值