1. 简述
1.1 Servlet
- Java Servlet 是运行在服务器上的程序,其作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。
- 使用 Servlet可收集来自网页表单的用户输入,呈现来自数据库或者其他源的记录,还可以动态创建网页。
1.2 HttpServlet
- HttpServlet是Servlet接口的一个实现类,并且它是一个抽象类,servlet.http包中定义了采用HTTP通信协议(一个无状态协议)的HttpServlet类。
2、响应流程
- Web客户向Servlet容器发出Http请求;
- Servlet容器解析Web客户的Http请求;
- Servlet容器创建一个HttpRequest对象,在这个对象中封装Http请求信息;
- Servlet容器创建一个HttpResponse对象;
- Servlet容器调用HttpServlet的service方法,把HttpRequest和HttpResponse对象作为service方法的参数传给HttpServlet对象;
- HttpServlet调用HttpRequest的有关方法,获取HTTP请求信息;
- HttpServlet调用HttpResponse的有关方法,生成响应数据;
- Servlet容器把HttpServlet的响应结果传给Web客户,其中HttpServlet首先必须读取Http请求的内容,Servlet容器负责创建HttpServlet对象,并把Http请求直接封装到HttpServlet对象中。
3、创建HttpServlet步骤
- 继承HttpServlet抽象类;
- 重写HttpServlet的部分方法,如doGet()或doPost()方法;
- 获取HTTP请求信息。通过HttpServletRequest对象来检索HTML表单所提交的数据或URL上的查询字符串;
- 通过HttpServletResponse对象生成HTTP响应结果。
4、具体实现
HttpServlet的实现由两种方式:
4.1、xml配置实现
具体实现步骤如下:
- 配置xml文件(实现方式同Servlet接口的.xml配置相同,此处不再重复),代码实现如下:
# form表单注册页面:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>注册页面</title>
</head>
<body>
<a href="myservlet?a=10&b=5">测试我的servlet</a>
<!--
action:提交到服务器的路径
method:提交的方式
-->
<form action="myservlet" method="get">
<!-- servlet通过name属性获取用户输入的数据 -->
用户名:<input type="text" name="username"><br>
密码:<input type="password" name="userpwd"><br>
<input type="submit" value="注册">
</form>
</body>
</html>
- 继承HttpServlet抽象类,并重写get()和post()方法,代码实现如下:
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class UserServlet extends HttpServlet{
private static final long serialVersionUID = 1L;
/* 对应form表单的get请求方式
* HttpServletRequest:请求对象
* HttpServletResponse:响应对象
*/
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//设定请求的字符集
req.setCharacterEncoding("utf-8");
//设置响应的文本类型
resp.setContentType("text/html;charset=utf-8");
//通过请求对象获取用户输入的内容
String username = req.getParameter("username");
String password = req.getParameter("userpwd");
System.out.println(username+" "+password);
//如果输入的用户名是abc,密码是123,则表示注册成功,反之注册失败
if("abc".equals(username)&&"123".equals(password)){
//使用响应对象,重定向到成功页面
//resp.sendRedirect("success.html");
//请求转发
req.getRequestDispatcher("success.html").forward(req, resp);;
}else{
//使用响应对象,重定向到注册页面
resp.sendRedirect("register.html");
}
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//设定请求的字符集
req.setCharacterEncoding("utf-8");
//设置响应的文本类型
resp.setContentType("text/html;charset=utf-8");
//通过请求对象获取用户输入的内容
String username = req.getParameter("username");
String password = req.getParameter("userpwd");
System.out.println(username+" "+password);
//如果输入的用户名是abc,密码是123,则表示注册成功,反之注册失败
if("abc".equals(username)&&"123".equals(password)){
//使用响应对象,重定向到成功页面
resp.sendRedirect("success.html");
}else{
//使用响应对象,重定向到注册页面
resp.sendRedirect("register.html");
}
}
}
4.2、注解实现
步骤如下:
- 直接在Package包下新建Servlet
- 取消构造方法,选中doGet、doPost方法后,点击Finish创建结束
- 重写doGet()和doPost()
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class UserServlet extends HttpServlet{
private static final long serialVersionUID = 1L;
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//设定请求的字符集
req.setCharacterEncoding("utf-8");
//设置响应的文本类型
resp.setContentType("text/html;charset=utf-8");
//通过请求对象获取用户输入的内容
String username = req.getParameter("username");
String password = req.getParameter("userpwd");
System.out.println(username+" "+password);
//如果输入的用户名是abc,密码是123,则表示注册成功,反之注册失败
if("abc".equals(username)&&"123".equals(password)){
//请求转发
req.getRequestDispatcher("success.html").forward(req, resp);;
}else{
//使用响应对象,重定向到注册页面
resp.sendRedirect("register.html");
}
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//设定请求的字符集
req.setCharacterEncoding("utf-8");
//设置响应的文本类型
resp.setContentType("text/html;charset=utf-8");
//通过请求对象获取用户输入的内容
String username = req.getParameter("username");
String password = req.getParameter("userpwd");
System.out.println(username+" "+password);
//如果输入的用户名是abc,密码是123,则表示注册成功,反之注册失败
if("abc".equals(username)&&"123".equals(password)){
//使用响应对象,重定向到成功页面
resp.sendRedirect("success.html");
}else{
//使用响应对象,重定向到注册页面
resp.sendRedirect("register.html");
}
}
}