一:Servlet: 服务器端小程序
Servlet是运行在服务器上,在服务器端调用、执行,是按Servlet规范编写的Java类
(1) 对客户端的请求进行处理
(2)向客户端返回响应
如何实现自己的Servlet:
(1)实现javax.servlet.Servlet接口 init(),service(),destory(),getServletconfig(),
getServletInto()方法;
(2)继承GenericServlet类,重写生命周期的service()方法
(3)继承HttpServlet类,根据页面提示重写doget()或者dopost()方法
Servlet的生命周期(简单来说):
<servlet容器装载Servlet实例—创建Servlet实例—通过init初始化—调用service方法—调用destory方法>
Web服务器在与客户端交互时Servlet的工作过程是:
(1)在客户端对web服务器发出请求;
(2)web服务器接收到请求后将其发送给Servlet;
(3)Servlet容器为此产生一个实例对象并调用ServletAPI中相应的方法来对客户端HTTP请求进行处理,然后将处理的响应结果返回给WEB服务器;
(4)web服务器将从Servlet实例对象中收到的响应结构发送回客户端.
加载类(实例化对象)-->初始化(init)-->服务(service)-->销毁(destroy)
Servlet不能独自运行,运行在Servlet容器中;
Servlet容器和JSP容器统称为WEB容器。
Servlet生命周期(图解)
web.xml:部署描述符文件
<servlet>
<servlet-name>HelloServlet</servlet-name>
<servlet-class>com.test.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HelloServlet</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
Tomcat目录结构
<!-- <load-on-startup>整型值</load-on-startup>标签元素:值为0或者正数时,服务器一启动
Servlet就被加载,正数值越小,优先被加载;值为负数时,当被调用时才被加载 -->
<!-- <init-param></init-param>配置该Servlet初始化参数 (键值对)-->
<!-- 初始化参数为什么要配置在web.xml?Java代码写好之后是不能修改的,而web.xml是可以修改的,有些数据是变化的,不应该写死在Java类中 -->
public class HelloServlet implements Servlet {
public void destroy() {}//销毁
public ServletConfig getServletConfig() { //返回ServletConfig对象
return null;
}
public String getServletInfo() { //返回Servlet的有关信息
return null;
}
public void init(ServletConfig arg0) throws ServletException {}//初始化
public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException {
PrintWriter writer = response.getWriter();//打印到浏览器
writer.println("Hello,Welcome to your first Servlet");
}
}
<枚举>
遍历:hasMoreElements
getHeaders(“Accept-Encoding”):获取多个同名请求头对应的一组value值,因此返回枚举类型数据
getHeaderNames():获取请求头的所有name值,返回的数据也是一个枚举类型的数据
中文乱码
//设置编码格式
request.setCharacterEncoding("utf-8");
respon