一、简答题
1>简述servlet的生命周期
第一次访问某个servlet的时候,tomcat容器会创建servlet实例,紧接着会调用init方法进行初始化。然后执行service方法,在父类中的service方法中判断请求是get或post执行相应的doGet或doPost方法。后面再访问的时候,执行service方法,在父类中的service方法中判断请求是get或post执行相应的doGet或doPost方法。当停止服务或重新加载或将项目从tomcat中移除的时候,会执行destroy方法,释放资源,销毁servlet的实例。
2>servlet中的两个init方法
- 如果我们直接通过实现Servlet接口来编写一个Servlet类,就需要实现 Servlet接口中定义的5中方法,为了简化Servlet的编写,在javax.servlet包中,给我们提供了一个抽象的类 GenericServlet,它提供了除service()方法外的其他4种方法的简单实现。GenericServlet类定义了一个通用的、不依赖于具体协议的Servlet,它实现了Servlet接口和ServletConfig接口。
- 如果我们要编写一个通用的Servlet,只需要从GenericServlet类继承,并实现其中的抽象方法service()。
- GenericServlet类中,提供了两种重载的init()方法:
·public void init(ServletConfig config)throws ServletException
·public void init()throws ServletException- 第一种init()方法是Servlet接口中init()方法的实现。这种方法中,首先将ServletConfig对象保存在一个transient实例变量中,然后调用第二种不带参数的init()方法。
通常我们在编写集成自GenericServlet的Servlet类时,只需重写第一种不带参数的init()方法就可以了。如果覆盖了第一种init()方法,那么应该在子类的该方法中,包含一句super.init(config)代码调用。
3>servlet再什么时候创建,servlet是单例的吗
tomcat会在第一次访问的时候创建servlet的对象,然后调用init方法。请求过来后,执行service方法,再service方法中判断请求是get还是post调用相应的doGet或doPost方法。后面再访该servlet的时候,直接实现sevice方法。servlet是单例的。
二、编程题
model2开发模式 实现 数据展示与删除 页面使用 el+jstl实现
提交的代码 servlet代码以及 jsp代码 以及 运行结果图
public class EmpListServlet extends HttpServlet {
private EmployeeDao employeeDao = new EmployeeDaoImpl();
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
List<Employees> list = employeeDao.findAll();
req.setAttribute("list",list);
req.getRequestDispatcher("emplist.jsp").forward(req,resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
}
}
@WebServlet(urlPatterns = "/empdel.do")
public class EmpDelServlet extends HttpServlet {
EmployeeDao employeeDao = new EmployeeDaoImpl();
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String id = req.getParameter("id");
int rows = employeeDao.del(Integer.parseInt(id));
resp.sendRedirect("emplist.do");
}
}
<html>
<head>
<title>Titletitle>
<link href="bootstrap/static/bootstrap-3.3.7-dist/css/bootstrap.css" rel="stylesheet">
<script type="text/javascript" src="js/jquery-1.12.4.js">script>
<script type="text/javascript" src="bootstrap/static/bootstrap-3.3.7-dist/js/bootstrap.js">script>
head>
<body>
<div style="width: 780px;margin: 0px auto">
<table class="table table-hover">
<tr>
<td>工号td>
<td>姓名td>
<td>性别td>
<td>住址td>
<td>电话td>
<td>工资td>
<td>操作td>
tr>
<c:forEach items="${list}" var="emp">
<tr>
<td>${emp.id}td>
<td>${emp.name}td>
<td>${emp.sex}td>
<td>${emp.address}td>
<td>${emp.phone}td>
<td>${emp.salary}td>
<td>
<a href="empdel.do?id=${emp.id}" class="btn btn-danger">删除a>
td>
tr>
c:forEach>
table>
div>
body>
html>
效果展示: