1.Servlet
2019-11-08 本文已影响0人
_麻辣香锅不要辣
概念
Servlet(server applet)就是运行在服务器端的小程序,Servlet是一个接口,定义了Java类被浏览器访问到(Tomcat识别)的规则。
例子
1.创建JavaEE项目
2.定义一个类,实现Servlet接口
3.实现接口中的抽象方法
4.配置Servlet(2.5在web.xml中配置,3.0用注解的方式配置)
public class ServletDemo 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("hello");
}
@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_3_1.xsd"
version="3.1">
<servlet>
<servlet-name>first_servlet</servlet-name>
<servlet-class>cn.yb.test.ServletDemo</servlet-class>
<!--指定Servlet创建的时机-->
<!--1.第一次访问时创建-->
<!--load-on-startup 值为负数-->
<!--2.在服务器启动时创建-->
<!--load-on-startup 值为正数-->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>first_servlet</servlet-name>
<url-pattern>/firstservlet</url-pattern>
</servlet-mapping>
</web-app>
3.0中使用@WebServlet注解
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface WebServlet {
String name() default "";
String[] value() default {};
String[] urlPatterns() default {};
int loadOnStartup() default -1;
WebInitParam[] initParams() default {};
boolean asyncSupported() default false;
String smallIcon() default "";
String largeIcon() default "";
String description() default "";
String displayName() default "";
}
原理
1.当服务器接收到客户端浏览器的请求后,会解析请求url的路径,获取访问的Servlet的资源路径
2.查找web.xml文件,是否有对应的<url-pattern>
3.有的话,tomcat会根据对应的<servlet-class>的全类名,将字节码文件加载进内存,并且创建其对象
4.调用其方法
1.png
Servlet体系结构
Servlet --- 接口
GenericServlet --- 抽象类
HttpServlet---抽象类
- GenericServlet:将Servlet接口中其他的方法做了默认的空实现,只将service()方法作为抽象方法
- HttpServlet:对http协议的一种封装,简化操作
public class ServletDemo1 extends GenericServlet {
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("hello");
}
}
public class ServletDemo1 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.doGet(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.doPost(req, resp);
}
}