JavaEE学习日志持续更新----> 必看!JavaEE学习路线(文章总汇)
JavaEE学习日志(五十)
Servlet
Servlet是运行在服务器端的Java程序,也是JavaEE十三规范中的一个规范。
规范理解为就是接口interface
实现步骤:
- 创建类,实现接口Servlet
- 重写接口中全部的抽象方法
- 通知Tomcat服务器,运行实现类(去web.xml编写配置文件)
Servlet快速入门
- 实现接口Servlet
- 重写抽象方法,6个
JavaEE使用的类和接口,由Tomcat提供
import javax.servlet.*;
import java.io.IOException;
/*
实现Servlet程序快速入门
实现接口Servlet
重写抽象方法,6个
JavaEE使用的类和接口,Tomcat提供
*/
public class QuickStartServlet implements Servlet {
@Override
public void init(ServletConfig servletConfig) throws ServletException {
}
@Override
public ServletConfig getServletConfig() {
return null;
}
/*
方法service
参数:ServletRequest 接收客户端提交的数据
ServletResponse 向客户端响应数据对象
*/
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("快速入门");
servletResponse.getWriter().print("aaa");//获取流对象,返回值PrintWriter
}
@Override
public String getServletInfo() {
return null;
}
@Override
public void destroy() {
}
}
编写配置文件
运行Tomcat,在浏览器中输入地址
Servlet技术概述
Servlet是JavaEE技术平台的规范,只能运行在Web服务器。
作用:接收请求,进行响应
广义的Servlet:Servlet接口所以的实现类
狭隘的Servlet:专门指的是Servlet接口
Servlet程序执行原理
Servlet生命周期
Servlet对象什么时候生,什么时候死
生命周期相关的三个方法:init,service,destroy
init(ServletConfig config)
Servlet对象的初始化方法,对象被创建时调用。
Servlet对象什么时候被创建:
- Servlet默认第一次访问的时候,被创建
- Tomcat服务器启动的时候创建对象,需要修改web.xml(一般不用)
<!--
配置的是Servlet对象启动的优先级
理论上可以写任意整数:数字越小,启动的优先级越高
-->
<load-on-startup>5</load-on-startup>
service(request,response)
客户端访问一次,执行一次destory()
Servlet对象销毁之前被调用
Servlet对象什么时候被销毁:
- 停止Tomcat服务
- Web项目从服务器中移除掉
Servlet的web.xml配置
<servlet>
<!--name,定义名字,随意写,一般写类名前缀-->
<servlet-name>path</servlet-name>
<!--class 配置类的全名,反射-->
<servlet-class>com.itheima.servlet.PathServlet</servlet-class>
</servlet>
<servlet-mapping>
<!--name 必须和上面的name相同-->
<servlet-name>path</servlet-name>
<!--url-pattern 配置的是浏览器访问的虚拟路径-->
<!--完全匹配-->
<url-pattern>/path</url-pattern>
</servlet-mapping>
url-pattern
的配置
- 完全匹配
/abc
:浏览器地址栏必须写/abc,大小写也不能错 - 目录匹配
/aaa/bbb/*
:浏览器地址栏可以写/aaa/bbb/任意 - 后缀名匹配
*.abc
:浏览器地址栏可以写 任意.abc
注意:目录匹配和后缀名匹配不能同时使用
Tomcat的全局web.xml
tomcat目录中/conf/web.xml 是全局配置文件,所有的web项目都使用。自己写的web.xml只有你自己的项目使用。
当全局配置web.xml和自己的web.xml冲突,就听自己的
一、当找不到自己项目中的servlet时,执行默认的servlet,报出404错误页面
二、session对象的超时时间为30分钟
<session-config>
<session-timeout>30</session-timeout>
</session-config>
三、
<mime-mapping>
<extension>dv</extension>
<mime-type>video/x-dv</mime-type>
</mime-mapping>
extension:扩展名,给人看的文件名
mine-type:文件类型,给浏览器看的
四、欢迎页面
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
Idea创建servlet
继承的方式创建:继承HttpServlet
public class MyServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
}
- doPost方法对应了客户端浏览器的提交方式POST
- doGet方法对应了客户端浏览器的提交方式GET
无论:是POST提交,还是GET,统一处理,都使用doGet
public class MyServlet extends HttpServlet {
/*
doPost方法对应了客户端浏览器的提交方式POST
无论:是POST提交,还是GET,统一处理,都使用doGet
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//调用doGet
doGet(request,response);
}
/*
doGet方法对应了客户端浏览器的提交方式GET
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.getWriter().print("MyServlet Run");
}
}
继承HttpServlet的原理
ServletConfig对象
ServletConfig对象,表示的是Servlet配置对象
有一个Servlet程序,出现对应的ServletConfig对象
获取ServletConfig对象:
init方法参数(ServletConfig servletConfig)
,调用者是Tomcat引擎,所以ServletConfig对象也是由Tomcat引擎创建。- 父类中定义了方法
ServletConfig getSevletConfig()
public class ConfigServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
/*
通过父类的方法getServletConfig()获取ServletConfig对象
ServletConfig是接口
org.apache.catalina.core.StandardWrapperFacade@5b21f320是实现类(Tomcat中)
*/
ServletConfig config = getServletConfig();
System.out.println(config);//org.apache.catalina.core.StandardWrapperFacade@5b21f320
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
ServletConfig对象能做什么:
- 获取Servlet的名字,
String getServletName()
<servlet-name>config</servlet-name>
- 获取Servlet的初始化参数,
String getInitParameter("键名")
<servlet>
<servlet-name>config</servlet-name>
<servlet-class>com.itheima.servlet.ConfigServlet</servlet-class>
<init-param>
<param-name>heima</param-name>
<param-value>java</param-value>
</init-param>
</servlet>
public class ConfigServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
/*
通过父类的方法getServletConfig()获取ServletConfig对象
ServletConfig是接口
org.apache.catalina.core.StandardWrapperFacade@5b21f320是实现类(Tomcat中)
*/
ServletConfig config = getServletConfig();
System.out.println(config);//org.apache.catalina.core.StandardWrapperFacade@5b21f320
//获取Servlet名字
String name = config.getServletName();
System.out.println(name);
//获取Servlet初始化参数
String value = config.getInitParameter("heima");
System.out.println(value);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
- 获取ServletContext对象,
getServletContext()
返回Servlet上下文对象