·Servlet的主要功能、运行过程以及生命周期
1.在Servlet技术体系中,用户创建的Servlet是通过HTTPServlet派生的。HTTPServlet的主要方法有init()、destory()、service()、doGet()、doPost()等。
(1)init():在Servlet的生命周期中,init()方法只执行一次,它是在服务器装入Servlet时执行的。常用默认方法,也可以自己重写覆盖。
(2)destroy():destroy()方法只执行一次,在服务器卸载Servlet时执行该方法。常用默认方法,也可以自己重写覆盖。
(3)service():Service方法是Servlet的核心。每当一个客户请求一个HTTPServlet对象时,该对象的service()方法就要被调用。系统将请求(ServletRequest)对象和响应(ServletResponse)对象传给它。
上面三种方法直接继承,不必重写(特殊情况例外)。对于do方法,用户必须重写,处理get或post等请求。
2.Servlet的运行过程
2.1web端服务器接收到客户端访问的请求。
2.2装载并创建一个该Servlet的实例对象。
2.3调用init()方法。
2.4创建两个对象,用于封装HTTP请求消息的HttPServletRequest对象和用于HTTP响应消息的HTTPServletResponse对象。
2.5Tomcat为其创建或者分配线程(第一次请求该Servlet为创建,以后则为分配)。
2.6调用Servlet的service()方法,该方法根据请求类型的不同调用doGet()、doPost()或者其他方法。
2.7WEB应用程序停止或者重启前,Servlet将被卸载,卸载之前调用destory()方法。
3.Servlet的生命周期:加载,实例化,初始化,服务,销毁。Servlet的生命周期不长于容器生命周期。
3.1加载和实例化过程只有一次(调用init()),这个过程可能是Tomcat容器启动时执行,也可能是第一次访问这个Servlet执行,这取决于容器的配置文件。
3.2服务过程(调用service())可进行多次,一次服务过程就是一个Servlet线程的运行过程。service(ServletRequest request,ServletResponse response)方法在每次访问时必然执行。
3.3当容器关闭,执行销毁(destroy()),销毁实例。
doGet()和doPost()方法的区别:
1、安全性:get的安全性低。post的安全性高。
Servlet在web.xml中的配置
实现一个简单的登录功能。
一个简单的登录框。
通过ajax向后端传递数据,返回error登录失败,否则登录成功。
```
public class BookServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html; charset=utf-8");
PrintWriter out = response.getWriter();
String num = request.getParameter("pagenum");
String size = request.getParameter("pageSize");
int pageNum = Integer.parseInt(num);
int pageSize = Integer.parseInt(size);
BookDAO bookDAO = new BookDAOImpl();
Listlist = bookDAO.findBooks(pageNum,pageSize);
JSONArray dataBooks = JSONArray.fromObject(list);
out.write(dataBooks.toString());
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
}
```
servlet代码,前面是请求的方式选择的是post。获取到前端账号密码之后,调用业务逻辑层,UserService中的judgeLog方法。
```
public class UserServiceImpl implements UserService{
public boolean judgeLogin(String userName,String userPwd){
UserDao userDao = new UserDaoImpl();
if(userDao.findUser(userName,userPwd)) {
return true;
}
return false;
}
}
```
UserService实现代码。
dao层实现代码。连接mysql数据库,因为没有用框架,自己写了一个连接数据库的工具类。
最后输入正确的账号密码,提示登录成功。