Servlet的实现类:
package com.example.web_servlet;
import javax.servlet.*;
import java.io.IOException;
public class RegisterServlet 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("servlet");
}
@Override
public String getServletInfo() {
return null;
}
@Override
public void destroy() {
}
}
配置servlet:web.xml方法
<servlet>
<servlet-name>register</servlet-name>
<servlet-class>com.example.web_servlet.RegisterServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>register</servlet-name>
<url-pattern>/register</url-pattern>
</servlet-mapping>
Servlet的原理:
当浏览器访问该url时,localhost:8080/my_servlet/register(/my_servlet:虚拟目录,/register:资源路径),服务器会自动执行RegisterServlet类中的service方法,这时我们会有一个疑问,为什么我没有new这个对象和调用这个方法,他为什么会执行呢?
其实他是利用了反射技术实现的。
Class.forName(全类名) 返回一个Class对象
Class对象.newInstance() 创建一个实例
实例.getMethod("方法名",方法参数类型的Class对象……) 返回一个Method对象
Method对象.invoke(实例,具体传入参数…) 执行方法
所以客服端访问服务端资源都会执行service方法,同理继承HttpServlet的doPost和doGet他的底层同样也会执行service方法。