初学Servlet

119 阅读4分钟

「这是我参与2022首次更文挑战的第16天,活动详情查看:2022首次更文挑战」。

Servlet

 

一、介绍

Servlet是使用Java语言编写的运行在服务器端的程序。

Servlet由Servlet容器提供,所谓的Servlet容器是指提供了Servlet 功能的服务器(比如:Tomcat)。

二、创建第一个Servlet

三种方法创建servlet类:

1)实现Servlet接口

2)继承GenericServlet类

3)继承HttpServlet类(常用)

创建步骤:

1、创建一个普通类:

image.png

2、继承HttpServlet类

3、重写父类方法:Ctrl+O

image.png

4、在web.xml里面配置:

配置和

image.png 启动测试

三、Servlet的生命周期

1、加载和实例化

当容器启动时(需要配置)或者客户端向Servlet容器发出HTTP请求要求访问Servlet时,Servlet容器首先会解析请求,检查内存中是否已经有了该Servlet对象,如果有直接使用该Servlet对象,如果没有就创建Servlet实例对象。

2、初始化

实例化后,容器调用Servlet的init()初始化对象。

注意:整个生命周期中只调用一次。

3、处理请求

在这个阶段,Servlet容器会为每个请求创建代表HTTP请求的ServletRequest对象和代表HTTP响应的ServletResponse对象,然后将它们作为参数传递给Servlet的service()方法。service()方法从ServletRequest对象中获得客户请求信息并处理该请求,通过ServletResponse对象生成响应结果。

注意:在Servlet的整个生命周期内,对于Servlet的每一次访问请求,Servlet容器都会调用一次Servlet的service()方法,并且创建新的ServletRequest和ServletResponse对象。

4、销毁

当服务器关闭或web应用被移除出容器时,Servlet随着web应用的销毁而销毁。在销毁Servlet之前,Servlet容器会调用Servlet的destroy()方法,以便让Servlet对象释放它所占用的资源。在Servlet的整个生命周期中,destroy()方法也只被调用一次。

注意:Servlet对象一旦创建就会驻留在内存中等待客户端的访问,直到服务器关闭,或web应用被移除出容器时Servlet对象才会销毁。

四、使用注解创建Servlet

1、创建一个普通类

2、继承HttpServlet 类

3、在web.xml里面设置:metadata-complete="false"

4、在类上面添加注解:@WebServlet()
@WebServlet(value = "/user/register" )

public class UserRegisterServlet extends HttpServlet {

.....

}

 

五、POST和GET

很多情况下,需要传递一些信息,从浏览器到 Web 服务器,最终到后台程序。浏览器使用两种方法可将这些信息传递到 Web 服务器,分别为 GET 方法和 POST 方法。

1、GET 方法

GET 方法向页面请求发送已编码的用户信息。页面和已编码的信息中间用 ? 字符分隔。如:

http://localhost:8080/myservlet/hello.html?name=zhangsan&pwd=123456&age=18

缺点:参数添加在url后面,不安全。GET 方法有大小限制:由浏览器和Web服务器处理能力的设置会限制长度大小。

优点:执行效率比POST高,用于从服务器上获取数据。

1)String str=request.getParameter(参数名称);

//根据参数名称获得参数值

2)Map<String, String[]> parameterMap = req.getParameterMap();

//获得参数集合

3)String[] parameterValues = req.getParameterValues(参数名称);

//如果参数出现一次以上,则调用该方法,并返回多个值,例如复选框。

4)Enumeration parameterNames = req.getParameterNames();

/获得当前请求中的所有参数的完整列表

 

2、POST方法

通过HTTP post机制,将表单内各个字段与其内容放置在HTML HEADER内一起传送。

优点:安全,一般没有大小限制(服务器的不同有所差异)。

缺点:效率没有GET高,用于提交修改数据。

 

这里有一个中文乱码问题,我们来处理,处理之前,先学习另外一个知识点,过滤器。

六、过滤器

Servlet 过滤器可以动态地拦截请求和响应,以变换或使用包含在请求或响应中的信息。

可以将一个或多个 Servlet 过滤器附加到一个 Servlet 或一组 Servlet。Servlet 过滤器也可以附加到 JavaServer Pages (JSP) 文件和 HTML 页面。调用 Servlet 前调用所有附加的 Servlet 过滤器。

Servlet 过滤器是可用于 Servlet 编程的 Java 类,可以实现以下目的:

l 在客户端的请求访问后端资源之前,拦截这些请求。

l 在服务器的响应发送回客户端之前,处理这些响应。

 

创建过滤器步骤:

1、创建一个普通类:

image.png

2、实现javax.servlet.Filter接口:

3、实现接口方法:

image.png

4、在web.xml里面配置

<filter>\
    <filter-name>encondingFilter</filter-name>\
    <filter-class>com.hwadee.train.servlet.filter.EncondingFilter</filter-class>\
</filter>\
<filter-mapping>\
    <filter-name>encondingFilter</filter-name>\
    <!-- /* 表示匹配所有的请求路径-->\
    <url-pattern>/*</url-pattern>\
</filter-mapping>

5、或者使用注解配置。注意:只能选取一种方式。 比如:在写一个登录的过滤器

image.png

6、启动测试

注意:多个过滤器执行顺序,按照web.xml里面从上到下顺序执行。使用注解则按照类名的自然顺序,即类名的字母顺序来排。