JavaWeb-Servlet6 入门
1、idea创建maven的web项目
新建项目选择maven骨架,配置选择如下图:
新建成功后,在pom.xml添加servlet依赖,
<dependency>
<groupId>jakarta.servlet</groupId>
<artifactId>jakarta.servlet-api</artifactId>
<version>6.0.0</version>
</dependency>
然后新建一个类HelloServlet
public class HelloServlet extends HttpServlet {
private ServletConfig config;
@Override
public ServletConfig getServletConfig() {
return this.config;
}
@Override
public void init(ServletConfig config) throws ServletException {
this.config = config;
}
@Override
public String getServletInfo() {
return this.config.toString();
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.getWriter().println("hello servlet");
}
}
之后,在web.xml中修改如下
<web-app xmlns="https://jakarta.ee/xml/ns/jakartaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee
https://jakarta.ee/xml/ns/jakartaee/web-app_6_0.xsd"
version="6.0">
<display-name>Archetype Created Web Application</display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>hello</servlet-name>
<servlet-class>com.dts.servlet.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
</web-app>
如此一个servlet入门项目就完成了
2、Servlet常用方法讲解
init
init 方法被设计成只调用一次。它在第一次创建 Servlet 时被调用,在后续每次用户请求时不再调用。因此,它是用于一次性初始化。
当用户调用一个 Servlet 时,就会创建一个 Servlet 实例,每一个用户请求都会产生一个新的线程,适当的时候移交给 doGet 或 doPost 方法。
init() 方法简单地创建或加载一些数据,这些数据将被用于 Servlet 的整个生命周期。
destoy
destroy() 方法只会被调用一次,在 Servlet 实例在 web 容器中销毁的时候被调用。
destroy() 方法可以让您的 Servlet 关闭数据库连接、停止后台线程、把 Cookie 列表或点击计数器写入到磁盘,并执行其他类似的清理活动。
在调用 destroy() 方法之后,servlet 对象被标记为垃圾回收。
service
service() 方法是执行实际任务的主要方法。Servlet 容器(即 Web 服务器)调用 service() 方法来处理来自客户端(浏览器)的请求,并把格式化的响应写回给客户端。
每次服务器接收到一个 Servlet 请求时,服务器会产生一个新的线程并调用服务。service() 方法检查 HTTP 请求类型(GET、POST、PUT、DELETE 等),并在适当的时候调用 doGet、doPost、doPut,doDelete 等方法。
service() 方法由容器调用,service 方法在适当的时候调用 doGet、doPost、doPut、doDelete 等方法。所以,您不用对 service() 方法做任何动作,您只需要根据来自客户端的请求类型来重写 doGet() 或 doPost() 即可。
doGet
doGet() 方法当一个客户通过 HTML 表单发出一个 HTTP GET 请求或直接请求一个 URL 时,doGet() 方法被调用。与 GET 请求相关的参数添加到 URL 的后面,并与这个请求一起发送。当不会修改服务器端的数据时,应该使用 doGet() 方法。
doPost
doPost() 方法当一个客户通过 HTML 表单发出一个 HTTP POST 请求时,doPost() 方法被调用。与 POST 请求相关的参数作为一个单独的 HTTP 请求从浏览器发送到服务器。当需要修改服务器端的数据时,应该使用 doPost() 方法。
getServletInfo
getServletInfo方法会返回Servlet的一段描述,可以返回一段字符串。
getServletConfig
getServletConfig方法会返回由Servlet容器传给init()方法的ServletConfig对象。
ServletConfig代表的是当前 servlet 在 web.xml中 的配置信息,他有方法如下:
getInitParamter:获取servlet的初始参数。
getServletName获取servlet名字。
如果该Servlet在web.xml中配置了初始化参数,则可以通过ServletConfig取出来,操作如下:
<servlet>
<servlet-name>hello</servlet-name>
<servlet-class>com.dts.servlet.HelloServlet</servlet-class>
<init-param>
<param-name>username</param-name>
<param-value>admin</param-value>
</init-param>
<init-param>
<param-name>password</param-name>
<param-value>123456</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
private ServletConfig config;
@Override
public void init(ServletConfig config) throws ServletException {
this.config = config;
}
@Override
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
out.write("<table>");
out.write("<tr>");
out.write("<td>用户名:</td>");
out.write("<td>" + this.config.getInitParameter("username") + "</td>");
out.write("</tr>");
out.write("<tr>");
out.write("<td>密码:</td>");
out.write("<td>" + this.config.getInitParameter("password") + "</td>");
out.write("</tr>");
out.write("</table>");
out.close();
}
3、Servlet配置详解-loadOnStartup
标记容器是否在启动应用时就加载Servlet,默认不配置或数值为负数时表示客户端第一次请求Servlet时再加载;0 或 正数表示启动应用就加载,正数情况下,数值越小,加载该Servlet的优先级越高;
<servlet>
<servlet-name>Servlet1</servlet-name>
<servlet-class>com.iss.servlet.Servlet1</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<!-- 添加servlet的访问映射 -->
<servlet-mapping>
<servlet-name>Servlet1</servlet-name>
<url-pattern>/servlet1</url-pattern>
</servlet-mapping><servlet>
<servlet-name>Servlet2</servlet-name>
<servlet-class>com.iss.servlet.Servlet2</servlet-class>
<load-on-startup>2</load-on-startup>
</servlet>
<!-- 添加servlet的访问映射 -->
<servlet-mapping>
<servlet-name>Servlet2</servlet-name>
<url-pattern>/servlet2</url-pattern>
</servlet-mapping>
4、Servlet注解使用方式
从Servlet3.0开始,配置Servlet支持注解方式,使得不再需要在web.xml文件中进行Servlet的部署描述,简化了开发流程。但还是保留了配置web.xml方式。
注解具体实现方式:在Servlet类上使用@WebServlet注解进行配置。
5、总结
通过以上步骤,我们就可以使用servelt6了。