HttpServlet
一、简介HttpServlet是Servlet接口的一个实现类,并且它是一个抽象类,servlet.http包中定义了采用HTTP通信协议(一个无状态协议)的HttpServlet类。二、响应流程1.Web客户向Servlet容器发出Http请求2.Servlet容器解析Web客户的Http请求3.Servlet容器创建一个HttpRequest对象,在这个对象中封装Http请求信息4...
一、简介
HttpServlet是Servlet接口的一个实现类,并且它是一个抽象类,servlet.http包中定义了采用HTTP通信协议(一个无状态协议)的HttpServlet类。
二、响应流程
1.Web客户向Servlet容器发出Http请求
2.Servlet容器解析Web客户的Http请求
3.Servlet容器创建一个HttpRequest对象,在这个对象中封装Http请求信息
4.Servlet容器创建一个HttpResponse对象
5.Servlet容器调用HttpServlet的service方法,把HttpRequest和HttpResponse对象作为service方法的参数传给HttpServlet对象
6.HttpServlet调用HttpRequest的有关方法,获取HTTP请求信息
7.HttpServlet调用HttpResponse的有关方法,生成响应数据
8.Servlet容器把HttpServlet的响应结果传给Web客户
其中HttpServlet首先必须读取Http请求的内容,Servlet容器负责创建HttpServlet对象,并把Http请求直接封装到HttpServlet对象中。
三、创建HttpServlet步骤
1.继承HttpServlet抽象类
2.重写HttpServlet的部分方法,如doGet()或doPost()方法
3.获取HTTP请求信息。通过HttpServletRequest对象来检索HTML表单所提交的数据或URL上的查询字符串
4.生成HTTP响应结果。通过HttpServletResponse对象生成响应结果
四、具体实现
HttpServlet的实现由两种方式:
- 实现方式一:.xml配置实现
A.配置xml文件(实现方式同Servlet接口的.xml配置相同,此处不再重复)
B.继承HttpServlet抽象类
C.重写get()、post()方法
代码实现如下:
- 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>
- 继承子类
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");
}
}
}
- 实现方式二:注解实现
直接在Package包下新建Servlet
直接next即可
取消构造方法,选中doGet、doPost方法后,点击Finish创建结束
五、重写doGet()和doPost()
1.具体步骤
①设置请求字符集
②设置响应对象文本类型
③通过请求对象获取用户输入的数据
④响应对象通过重定向/转发响应用户请求
2.代码实现
在分析代码之前一定知道的知识点:
①form表单中的action属性和method属性
A.action属性:值——对应数据要提交到服务器的路径
B.method属性:有get和post两个取值,表示数据提交的方式(具体内容请看:get和post提交方式的区别)
②HttpServlet通过name属性获取用户输入的数据
③通过请求对象的getParameter()方法可以获取用户提交的数据
④由HttpServlet的子类转向页面有重定向和转发两种方式(具体内容请看:重定向和转发)
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");
}
}
}
附:
A.注册页面
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>注册页面</title>
</head>
<body>
<a href="myservlet?a=10&b=5">测试我的servlet</a>
<form action="myservlet" method="get">
用户名:<input type="text" name="username"><br>
密码:<input type="password" name="userpwd"><br>
<input type="submit" value="注册">
</form>
</body>
</html>
B.成功页面
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>注册成功</title>
</head>
<body>
恭喜你注册成功!!
</body>
</html>
六、get和post方法
七、重定向和转发
更多推荐
所有评论(0)