文章目录
一、什么是Servlet
Servlet是在服务器端运行的Java程序,可以接受客户端请求并做出响应
Servlet可以动态生成HTML内容对客户端进行响应
Servlet与JSP都可以动态生成HTML内容,二者之间的关系:
二、Servlet
1、Servlet体系结构
1、Servlet接口
定义了所有Servlet需要实现的方法
2、GenericServlet抽象类
提供了Servlet与ServletConfig接口方法的默认实现(service方法除外)
3、HttpServlet抽象类
继承自GenericServlet
处理HTTP协议的请求和响应
4、ServletConfig接口
在Servlet初始化过程中获取配置信息
一个Servlet只有一个ServletConfig对象
5、ServletContext接口
获取Web应用上下文,与Servlet容器进行通信
2、请求、响应相关接口
1、ServletRequest接口
获取客户端请求的数据
2、HttpServletRequest接口
除了继承ServletRequest接口中的方法,还增加了一些用于读取HTTP请求信息的方法
3、ServletResponse接口
设置响应参数和向客户端发送响应数据
4、HttpServletResponse接口
除了继承ServletResponse接口中的方法,还增加了适用于HTTP响应的新方法
3、Servlet的应用
创建Servlet
- 继承HttpServlet
- 重写doPost()或doGet()方法
部署Servlet - 编译Servlet到/WEB-INF/classes目录
- 编辑部署描述文件web.xml
<servlet>
<servlet-mapping>
<url-pattern>
......
启动Tomcat,访问Servlet
三、使用Servlet实现控制器
修改控制器
示例:
public class TopicServlet extends HttpServlet {
public void doGet( HttpServletRequest request, HttpServletResponse response ) throws ServletException, IOException {
... ...
String opr = request.getParameter( "opr" );
TopicsService topicsService = new TopicsServiceImpl();
String contextPath = request.getContextPath();
if ( opr.equals( "list" ) ) { //查找所有主题
List<Topic> list = topicsService.getAllTopics();
request.setAttribute( "list", list );
request.getRequestDispatcher (
contextPath + "/newspages/topic_list.jsp" )
.forward( request, response );
}
… …
}
}
<div id="opt_list">
<ul>
<li><a href="../util/news_control.jsp?opr=findTopics">添加新闻</a></li>
<li><a href="../util/news_control.jsp?opr=list">编辑新闻</a></li>
<li><a href="../newspages/topic_add.jsp">添加主题</a></li>
<li><a href="../util/topics?opr=list">编辑主题</a></li>
</ul>
</div>
四、Servlet的生命周期
生命周期的各个阶段
Servlet的生命周期
五、获取Servlet初始化参数
Servlet初始化参数配置
<web-app>
<servlet>
<servlet-name>HelloServlet</servlet-name>
<servlet-class>demo.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>
获取初始化参数
public void doGet ( HttpServletRequest request, HttpServletResponse response ) throws ServletException, IOException {
System.out.println("处理请求时,doGet()方法被调用。");
String initParam = getInitParameter( "initParam" );
System.out.println(initParam);
}//根据名称进行读取
六、获取Servlet上下文参数
配置上下文
<web-app>
<context-param>
<param-name>contextParam</param-name><!--初始化参数的名字 -->
<param-value>Hello Servlet</param-value><!--初始化参数的值 -->
</context-param>
<!--省略其他配置-->
</web-app>
读取Servlet上下文
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);
}
}