基础知识
- 什么是Servlet
- 全称:(Server Applet)运行在服务器端的Java程序,实现了Servlet接口的类。
- 作用:实现客户端与服务器端数据的动态交互。
- Servlet的体系结构
- 服务器端将客户端发送的请求转发给Servlet容器,servlet容器根据请求查找web.xml映射/注解,调用相应的Servlet,获取返回响应。
- Servlet接口及相关类
- Servlet接口:五个抽象方法
public interface Servlet {
//容器创建servlet对象后就会调用该方法。
void init(ServletConfig var1) throws ServletException;
//获得servlet配置信息
ServletConfig getServletConfig();
//容器接收到客户端访问Servlet的请求后就调用该方法。
void service(ServletRequest var1, ServletResponse var2) throws ServletException, IOException;
//获得配置信息,servlet的作者、版权等
String getServletInfo();
//服务器关闭或servlet被移除
void destroy();
}
- 相关类:
HttpServlet: 继承自GenericServlet。加入了doGet、doPost等方法。重写了service方法,将ServletRequest强转为HttpServlet.GenericServlet: 实现了Servlet接口。- 两者关系:
HttpServlet继承自GenericServlet
- Servlet生命周期
在一个生命周期中,
init()方法只会调用一次;service()方法可以被调用多次
- Servlet配置虚拟路径映射
- 多重映射:
- 配置多个
<servlet-mapping>
<servlet-mapping> <servlet-name>HelloServlet</servlet-name> <url-pattern>/test01</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>HelloServlet</servlet-name> <url-pattern>/test02</url-pattern> </servlet-mapping> <!--访问test01和test02均可访问链接到HelloServlet-->- 配置多个
<url-pattern>子元素
<servlet-mapping> <servlet-name>HelloServlet</servlet-name> <url-pattern>/test03</url-pattern> <url-pattern>/test04</url-pattern> </servlet-mapping> <!--访问test03和test04均可访问链接到HelloServlet--> - 配置多个
- 默认Servlet
Servlet 服务器在接收到访问请求时,如果在web.xml文件中找不到匹配的<servlet-mapping>元素的 URL,则会将访问请求交给默认 Servlet 处理,也就是说,默认 Servlet 用于处理其他 Servlet 都不处理的访问请求。
- ServletConfig和ServletContext接口
ServletConfig接口:
当Servlet容器初始化一个Servlet的时候,会将一些web.xml里面的<init-param>配置信息封装成一个ServletConfig对象,调用init(ServletConfig config)方法,初始化Servlet的配置信息,如文件编码、共享信息等。
<servlet>
<!--默认Servlet-->
<servlet-name>loginServlet</servlet-name>
<servlet-class>com.kingwan.LoginServlet</servlet-class>
<!--初始化配置-->
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</servlet>
- 常用方法
public interface ServletConfig {
//获取Servlet名字,即web.xml中<servlet-name>元素的值
String getServletName();
//返回一个代表当前 Web 应用的 ServletContext 对象
ServletContext getServletContext();
//根据参数名返回对应初始化参数值
String getInitParameter(String var1);
//返回一个 Enumeration 对象,其中包含了所有的初始化参数名
Enumeration<String> getInitParameterNames();
}
- 例子【待完善】
ServletContext接口:
Servlet容器启动时,会为每一个web应用创建一个唯一的ServletContext对象代表当前web应用。该对象封装了web应用的所有信息。
- Servlet处理用户请求流程
HttpServletRequest和HttpServletresponse是web容器创建的实例对象,封装请求和响应信息。
注意:一个Servlet实例只被web容器创建一次,而request和response在每次调用Servlet时都会被重新创建。
- 请求转发与重定向
- 请求转发
req.getRequestDispatcher("/文件路径").forward(req,resp);
//注意:WEB-INF 目录中的内容对 RequestDispatcher 对象也是可见的。
//在 RequestDispatcher 接口中,forward() 方法可以实现请求转发,include() 方法可以实现请求包含,
- 重定向
resp.sendRedirect("路径");
- 两者的区别
请求转发的request是共享的;重定向不共享。
request和response的中文乱码问题
- 请求乱码解决方法:
request.setCharacterEncoding("UFT-8") - 响应乱码解决方案:
适用于post请求,response.setContentType("text/html";charset="utf-8")
未完待续。。。
笔记
- 为什么不能直接访问Servlet?要怎么访问
- 为什么配置xml映射的时候需要配全类名,servlet对象是怎么创建的
- 三个Servlet的联系
- jsp本质就是一个servlet
- jsp九大内置对象
- request常用方法6个
- HTTP请求的状态码
- response常用方法
- 转发和重定向的区别
- session
- cookie的创建与读取
- session与cookie的区别
- Java内置对象作用域 统计访问次数
- el表达式${变量名}
- jstl 标签库
- 两者结合,侧重点不同