Servlet的概念
web资源的概述
Web资源就是运行在服务器上的资源,它一共分为两类: 静态资源以及动态资源
Servlet的概述
什么是Servlet
- Servlet = (Server + Applet)是运行在服务端(Tomcat)的Java小程序,也叫Controller
- Servlet是接口,这个接口是javaEE平台的接口,由TomCat提供
Servlet的作用
- 接收用户发送的请求
- 调用其他的java程序来处理请求
- 根据处理结果,返回给用户一个页面
入门实例
- 自定义实现类,实现接口Servlet
- 重写五个方法
public class QuickStartServlet implements Servlet {
@Override
public void init(ServletConfig servletConfig) throws ServletException {
System.out.println("一二三四");
}
@Override
public ServletConfig getServletConfig() {
return null;
}
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("service");
servletResponse.setContentType("text/html;charset=utf-8");
PrintWriter printWriter=servletResponse.getWriter();
printWriter.println(100);//100
printWriter.write(100);//d
printWriter.println("aaaa");//aaaa
printWriter.write("aaaa");//aaaa
printWriter.write("一二三四");
}
@Override
public String getServletInfo() {
return null;
}
@Override
public void destroy() {
}
}
注意:打印流的write和println方法在打印数字时时不一样的,writer会查编码,priintln打印原始数据
- 配置的核心配置文件web.xml
<servlet>
<!--名字随意,要求与mapping的名一样-->
<servlet-name>quickStartServlet</servlet-name>
<!--自定义的Servlet接口实现类的全名-->
<servlet-class>servlet.QuickStartServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>quickStartServlet</servlet-name>
<!--配置访问路径(映射路径),要求/开头,浏览器的访问路径
Tomcat服务器和浏览器的地址栏对比,Tomcat获得类名,反射创建对象
调用方法service-->
<url-pattern>/quickStart</url-pattern>
</servlet-mapping>
也可以使用注解取代web.xml配置,在类的上面加注解
@WebServlet(urlPatterns = "/quickStart")
- 浏览器地址栏输入访问 http://localhost:8080/web02/quickStart
- web02是配置的上下文路径
- quickStart是web.xml配置的访问路径url-pattern
访问路径一
访问路径二(获取请求地址,在配置文件中找到全类名):
Servlet生命周期
Servlet的生命周期,指Servlet的对象从被创建到被销毁的过程。
创建对象init()
- 客户端第一次访问时创建,直接访问地址栏即可,只创建一次
- Tomcat服务器启动时创建(推荐)
<servlet>
<!-- 全类名太长,给Servlet设置一个简短名称 -->
<servlet-name>HelloServlet</servlet-name>
<!-- 配置Servlet的全类名 -->
<servlet-class>com.atguigu.servlet.HelloServlet</servlet-class>
<!-- 配置Servlet启动顺序 -->
<load-on-startup>1</load-on-startup>
</servlet>
Servlet的映射路径:
- 绝对路径匹配 也就是前面我们写的那种,优先级最高,/名字
<servlet>
<servlet-name>quickStartServlet</servlet-name>
<servlet-class>servlet.QuickStartServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>quickStartServlet</servlet-name>
<url-pattern>/quickStart</url-pattern>
</servlet-mapping>
- 目录匹配 /名字/*,这时整个目录里的文件都可以访问
<servlet>
<servlet-name>quickStartServlet</servlet-name>
<servlet-class>servlet.QuickStartServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>quickStartServlet</servlet-name>
<url-pattern>/servlet/*</url-pattern>
</servlet-mapping>
- 后缀名匹配 *.名字,符合这个后缀名的都可以访问
<servlet>
<servlet-name>quickStartServlet</servlet-name>
<servlet-class>servlet.QuickStartServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>quickStartServlet</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
- 缺省匹配,符号为/,整个目录可以访问
- 全局匹配,/*,其访问路径没有限制,访问路径可以是任何字符与数字
相关接口
ServletConfig
在web.xml中对Servlet配置初始化参数,接下来可以在Servlet的init方法中获取配置的初始化参数的值
<servlet>
<servlet-name>configServlet</servlet-name>
<servlet-class>servlet.ConfigServlet</servlet-class>
<init-param>
<param-name>name</param-name>
<param-value>张三</param-value>
</init-param>
<init-param>
<param-name>password</param-name>
<param-value>123</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>configServlet</servlet-name>
<url-pattern>/config</url-pattern>
</servlet-mapping>
package servlet;
import javax.servlet.*;
import java.io.IOException;
import java.util.Enumeration;
public class ConfigServlet implements Servlet {
@Override
public void init(ServletConfig servletConfig) throws ServletException {
//获取配置的servlet的名字
String servletName=servletConfig.getServletName();
System.out.println("servletName="+servletName);
//获取初始化参数 servletConfig.getInitParameter("name");
String value=servletConfig.getInitParameter("name");
System.out.println("name= " + value);
//获取所有的初始化参数的键名
//Enumeration迭代器的前身
Enumeration<String> enumeration=servletConfig.getInitParameterNames();
while(enumeration.hasMoreElements()){
System.out.println(servletConfig.getInitParameter(enumeration.nextElement()));
}
}
@Override
public ServletConfig getServletConfig() {
return null;
}
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
}
@Override
public String getServletInfo() {
return null;
}
@Override
public void destroy() {
}
}
HttpServlet
HttpServlet 继承 GenericServlet (实现了接口Servlet)