为什么需要Servlet ?
- 使用JSP技术如何编写服务器动态网页?
- 流程图:JSP使用Java生成动态内容
- 在JSP技术出现之前如何编写服务器动态网页?
- 流程图:Java代码就是Servlet程序
什么是Servlet ?
- Servlet 是一个 Java程序,是在服务器上运行以处理客户端请求并做出响应的程序
第一个serlvet程序
- 手动编写一个Servlet需要以下几步:
- 创建一个servlet类,此类继承自HttpServlet
- 重写doGet和doPost方法中的一个
- 配置Servlet
初识Servlet
Servlet的配置
- 在web.xml文件中配置Servlet
运行Servlet
- 启动Tomcat服务器
- 在浏览器中输入
Servlet和JSP的关系
JSP在运行时会被翻译成一个Servlet类,然后进行执行,可以说JSP本质上就是Servlet。
Servlet的生命周期
生命周期的各个阶段
Servlet API
ServeltConfig接口
- 在Servlet初始化过程中获取配置信息
- 一个Servlet只有一个ServletConfig对象
ServeltConfig接口的常用方法
|--------------------------------------|-----------------------------|
| 方法名称 | 功能描述 |
| String getInitParameter(String name) | 获取web.xml中设置的以name命名的初始化参数值 |
| ServletContext getServletContext() | 返回Servlet的上下文对象引用 |
ServeltContext接口
- 获取Servlet上下文
ServeltContext接口的常用方法
|-------------------------------------------|----------------------------------|
| 方法名称 | 功能描述 |
| ServletContext getContext(String path) | 返回服务器上与指定URL相对应的ServletContext对象 |
| void setAttribute(String name,Object obj) | 设置Servlet中的共享属性 |
| Object getAttribute(String name) | 获取Servlet中设置的共享属性 |
例:
java
getServletConfig().getServletContext().getContext("/servlet").getServerInfo()
GenericServlet抽象类
- 提供了Servlet与ServletConfig接口的默认实现方法
GenericServlet的常用方法
|--------------------------------------|-------------------------------------------------------------|
| 方法名称 | 功能描述 |
| String getInitParameter(String name) | 返回服务器上与指定URL相对应的ServletContext对象,实际上是调用ServletConfig接口的同名方法 |
| ServletContext getServletContext() | 返回Servlet的上下文对象引用,实际上是调用ServletConfig接口的同名方法 |
| void init() | 初始化Servlet |
HttpServlet类
- HttpServlet继承于GenericServlet
- 处理HTTP协议的请求和响应
HttpServlet的方法
|-----------------------------------------------------------------------|--------------|
| 方法名称 | 功能描述 |
| void doGet(HttpServletRequest request,HttpServletRresponse response) | 以Get请求服务时调用 |
| void doPost(HttpServletRequest request,HttpServletRresponse response) | 以Post请求服务时调用 |
- 使用doXxx()接收用户请求
- doGet():用户使用get方式提交请求时调用
- doPost():用户使用post方式提交请求是调用
Servlet的部署
- 在Tomcat中如何部署
使用Servlet处理GET/POST请求
- HttpServletRequest类常用方法
|--------------------------------------------|-----------|
| 方法名称 | 功能描述 |
| String getParameter(String param) | 获取客户端请求数据 |
| void setCharacterEncoding(String encoding) | 设置输入字符集 |
- HttpServletResponse类常用方法
|--------------------------------------|---------------|
| 方法名称 | 功能描述 |
| void setContentType(String contType) | 设置输出字符集 |
| void sendRedirect(String url) | 让浏览器重定向到指定的资源 |
获取Servlet初始化参数
- Servlet初始化参数配置
XML
<web-app>
<servlet>
<servlet-name>HelloServlet</servlet-name>
<servlet-class>org.jbit.servlet.HelloServlet</servlet-class>
<init-param>
<param-name>initParam</param-name>
<param-value>Hello Servlet</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>HelloServlet</servlet-name>
<url-pattern>/HelloServlet</url-pattern>
</servlet-mapping>
</web-app>
java
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
System.out.println("处理请求时,doGet()方法被调用。");
String initParam = getInitParameter("initParam");
System.out.println(initParam);
}
获取Servlet上下文参数
- 配置Servlet上下文
XML
<web-app>
<context-param>
<param-name>contextParam</param-name>
<param-value>Hello Servlet</param-value>
</context-param>
<!--省略其他配置-->
</web-app>
- 读取Servlet上下文
java
public class HelloServlet extends HttpServlet {
// ...省略其他代码
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
System.out.println("处理请求时,doGet()方法被调用。");
String initParam = getInitParameter("initParam");
String contextParam =
this.getServletContext().getInitParameter("contextParam"); System.out.println("Servlet初始化参数" + initParam);
System.out.println("系统初始化参数" + contextParam);
}
}
调用<init-param>中的参量:
调用格式为:
String name = getInitParameter("name"); 或
String name = getServletConfig().getInitParameter("name");
调用<context-param>中的参量:
调用格式为:
String name =getServletContext(). getInitParameter("name"); 或
String name = getServletConfig().getServletContext().getInitParameter("name");