用户发出一次请求就会执行以下操作
Servlet通过反射机制被tomcat创建对象
再它自己调用自己的init方法(对象已经存在了)
再调用service方法,只要用户发出一次请求,就调用一次service方法
这个对象是假单例,我们没有权限去创建这个对象,但是这个对象的构造方法不是私有化的
init初始化,service服务
destroy方法也是只执行一次,在tomcat销毁对象之前调用
destroy执行时,servlet对象仍然存在(对象仍未被销毁)
我们就可以在destroy方法内执行如关闭流,关闭数据库连接等一系列操作
构造方法,init方法,destroy方法执行一次,service方法发送几次请求就执行几次
程序员手动提供了有参数的构造方法,会导致实例化异常,没有无参数构造方法
为什么不要写构造方法代替init,因为init方法更安全,构造方法有概率导致错误
servlet规范有要求,不建议编写构造方法,因为容易导致对象无法实例化,所以有存在的必要
使用最多的是service方法,这个使用是最多的,init和destroy方法使用次数都较少
通常在资源没有关闭的时候,抓紧时间关闭,还有没保存的,抓紧时间保存
我们编写一个类直接实现servlet接口的缺点
我们只需要service方法,大部分方法不需要
我们需要使用适配器模式
适配器模式,让我们不再直接实现接口,而是继承一个实现接口的公共类
实现了精简代码,避免类的成员方法过于繁杂的缺点
类似于我们不再将手机直接接到220V的高压电上,而是通过手机充电器转接的方式
编写一个GenericServlet类,这个类是一个抽象类,有一个抽象方法service
因为此方法必定被重写,GenericServlet实现Servlet接口,GenericServlet是一个适配器,以后编写的所有Servlet类继承它
并重写service方法
用户发出一次请求就会执行以下操作
Servlet通过反射机制被tomcat创建对象
再它自己调用自己的init方法(对象已经存在了)
再调用service方法,只要用户发出一次请求,就调用一次service方法
这个对象是假单例,我们没有权限去创建这个对象,但是这个对象的构造方法不是私有化的
init初始化,service服务
destroy方法也是只执行一次,在tomcat销毁对象之前调用
destroy执行时,servlet对象仍然存在(对象仍未被销毁)
我们就可以在destroy方法内执行如关闭流,关闭数据库连接等一系列操作
构造方法,init方法,destroy方法执行一次,service方法发送几次请求就执行几次
程序员手动提供了有参数的构造方法,会导致实例化异常,没有无参数构造方法
为什么不要写构造方法代替init,因为init方法更安全,构造方法有概率导致错误
servlet规范有要求,不建议编写构造方法,因为容易导致对象无法实例化,所以有存在的必要
使用最多的是service方法,这个使用是最多的,init和destroy方法使用次数都较少
通常在资源没有关闭的时候,抓紧时间关闭,还有没保存的,抓紧时间保存
我们编写一个类直接实现servlet接口的缺点
我们只需要service方法,大部分方法不需要
我们需要使用适配器模式
适配器模式,让我们不再直接实现接口,而是继承一个实现接口的公共类
实现了精简代码,避免类的成员方法过于繁杂的缺点
类似于我们不再将手机直接接到220V的高压电上,而是通过手机充电器转接的方式
编写一个GenericServlet类,这个类是一个抽象类,有一个抽象方法service
因为此方法必定被重写,GenericServlet实现Servlet接口,GenericServlet是一个适配器,以后编写的所有Servlet类继承它
并重写service方法
package com.bjpowernode.javaweb.servlet;
import jakarta.servlet.*;
import java.io.IOException;
//编写一个标准通用的servlet,后续的servlet类继承它就好,作为适配器存在
public abstract class GenericServlet implements Servlet {
@Override
public void init(ServletConfig servletConfig) throws ServletException {
}
@Override
public ServletConfig getServletConfig() {
return null;
}
@Override
public abstract void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException;
@Override
public String getServletInfo() {
return null;
}
@Override
public void destroy() {
}
}
package com.bjpowernode.javaweb.servlet;
import jakarta.servlet.*;
import java.io.IOException;
//编写一个标准通用的servlet,后续的servlet类继承它就好,作为适配器存在
public abstract class GenericServlet implements Servlet {
@Override
public void init(ServletConfig servletConfig) throws ServletException {
}
@Override
public ServletConfig getServletConfig() {
return null;
}
@Override
public abstract void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException;
@Override
public String getServletInfo() {
return null;
}
@Override
public void destroy() {
}
}
package com.bjpowernode.javaweb.servlet;
import jakarta.servlet.ServletException;
import jakarta.servlet.ServletRequest;
import jakarta.servlet.ServletResponse;
import java.io.IOException;
public class LoginServlet extends GenericServlet
{
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("正在登录");
}
}
package com.bjpowernode.javaweb.servlet;
import jakarta.servlet.ServletException;
import jakarta.servlet.ServletRequest;
import jakarta.servlet.ServletResponse;
import java.io.IOException;
public class LoginServlet extends GenericServlet
{
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("正在登录");
}
}
package com.bjpowernode.javaweb.servlet;
import jakarta.servlet.*;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.*;
public class StudentServlet implements Servlet
{
@Override
public void init(ServletConfig servletConfig) throws ServletException {
}
@Override
public ServletConfig getServletConfig() {
return null;
}
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("Service");
Connection connection = null;
PreparedStatement ps = null;
ResultSet set = null;
servletResponse.setContentType("text/html");
PrintWriter writer = servletResponse.getWriter();
try
{
Class.forName("com.mysql.jdbc.Driver");
String url = "jdbc:mysql://127.0.0.1:13306/powernode";
String user = "root";
String password = "abc123";
connection = DriverManager.getConnection(url,user,password);
String sql = "select id,name from t_student";
ps = connection.prepareStatement(sql);
set = ps.executeQuery();
while (set.next())
{
String id = set.getString("id");
String name = set.getString("name");
writer.println(id + "," + name);
}
}
catch(Exception e)
{
e.printStackTrace();
}
finally {
if (connection != null) {
try {
connection.close();
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
if (set != null) {
try {
set.close();
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
if (ps != null) {
try {
ps.close();
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
}
}
@Override
public String getServletInfo() {
return null;
}
@Override
public void destroy() {
}
}
package com.bjpowernode.javaweb.servlet;
import jakarta.servlet.*;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.*;
public class StudentServlet implements Servlet
{
@Override
public void init(ServletConfig servletConfig) throws ServletException {
}
@Override
public ServletConfig getServletConfig() {
return null;
}
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("Service");
Connection connection = null;
PreparedStatement ps = null;
ResultSet set = null;
servletResponse.setContentType("text/html");
PrintWriter writer = servletResponse.getWriter();
try
{
Class.forName("com.mysql.jdbc.Driver");
String url = "jdbc:mysql://127.0.0.1:13306/powernode";
String user = "root";
String password = "abc123";
connection = DriverManager.getConnection(url,user,password);
String sql = "select id,name from t_student";
ps = connection.prepareStatement(sql);
set = ps.executeQuery();
while (set.next())
{
String id = set.getString("id");
String name = set.getString("name");
writer.println(id + "," + name);
}
}
catch(Exception e)
{
e.printStackTrace();
}
finally {
if (connection != null) {
try {
connection.close();
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
if (set != null) {
try {
set.close();
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
if (ps != null) {
try {
ps.close();
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
}
}
@Override
public String getServletInfo() {
return null;
}
@Override
public void destroy() {
}
}
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<servlet>
<servlet-name>studentServlet</servlet-name>
<servlet-class>com.bjpowernode.javaweb.servlet.StudentServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>studentServlet</servlet-name>
<url-pattern>/servlet/student</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>LoginServlet</servlet-name>
<servlet-class>com.bjpowernode.javaweb.servlet.LoginServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>LoginServlet</servlet-name>
<url-pattern>/LoginServlet</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>VipServlet</servlet-name>
<servlet-class>com.bjpowernode.javaweb.servlet.VipServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>VipServlet</servlet-name>
<url-pattern>/VipServlet</url-pattern>
</servlet-mapping>
</web-app>
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<servlet>
<servlet-name>studentServlet</servlet-name>
<servlet-class>com.bjpowernode.javaweb.servlet.StudentServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>studentServlet</servlet-name>
<url-pattern>/servlet/student</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>LoginServlet</servlet-name>
<servlet-class>com.bjpowernode.javaweb.servlet.LoginServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>LoginServlet</servlet-name>
<url-pattern>/LoginServlet</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>VipServlet</servlet-name>
<servlet-class>com.bjpowernode.javaweb.servlet.VipServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>VipServlet</servlet-name>
<url-pattern>/VipServlet</url-pattern>
</servlet-mapping>
</web-app>