1. 创建login.html
在web上右键 -> New ->File 创建一个 login.html文件
添加一个form元素
- action="login" 标题会提交到login路径,login路径在后续步骤会映射到LoginServlet
- method="post" post方式表示提交的密码信息在浏览器地址栏看不到
接着准备账号和密码的input元素,因为要提交两个数据,在servlet端为了区分哪个是账号,哪个是密码,要给这两个input元素的name属性分别叫做name和password。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>登录页面</title>
</head>
<body>
<form action="login" method="post">
账号: <input type="text" name="name"> <br>
密码: <input type="password" name="password"> <br>
<input type="submit" value="登录">
</form>
</body>
</html>
2. 创建LoginServlet
创建一个LoginServlet,因为浏览器中的form的method是post,所以LoginServlet需要提供一个doPost方法。在doPost方法中,通过request.getParameter 根据name对应的账号和密码,然后用System.out.println()打印在控制台。
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 LoginServlet extends HttpServlet {
protected void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException{
String name = request.getParameter("name");
String password = request.getParameter("password");
System.out.println("name:"+name);
System.out.println("password:"+password);
}
}
3. 映射LoginServlet到路径login
在web.xml中新增映射
<?xml version="1.0" encoding="UTF-8"?>
<web-app>
<servlet>
<servlet-name>HelloServlet</servlet-name>
<servlet-class>HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HelloServlet</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>LoginServlet</servlet-name>
<servlet-class>LoginServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>LoginServlet</servlet-name>
<url-pattern>/login</url-pattern>
</servlet-mapping>
</web-app>
6. 在页面提交数据
首先重启tomcat,然后访问页面
http://127.0.0.1/j2ee/login.html
输入账号和密码,提交。
然后在Tomcat窗口,就可以看到提交的账号和密码了!!!
返回响应
1. LoginServlet
判断账号密码是否为admin 123,如果是就打印:success,否则打印:fail
根据账号密码,创建对应的html字符串,然后通过response.getWrite().println()发送到浏览器。
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class LoginServlet extends HttpServlet {
protected void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException{
String name = request.getParameter("name");
String password = request.getParameter("password");
String html = null;
if("admin".equals(name) && "123".equals(password)) {
html = "<div style='color:green'>success</div>";
}else {
html = "<div style='color:red'>fail</div>";
}
PrintWriter pw = response.getWriter();
pw.println(html);
}
}
2. 重启tomcat,提交数据
http://127.0.0.1/j2ee/login.html
输入账号:admin
密码:123
提交,可以看到success
调用流程
1. 流程图
2. login.html
访问http://127.0.0.1/j2ee/login.html
打开一个静态的html页面,在这个页面中可以通过form,以post的形式提交数据。
3. /login路径
在上一步的login.html中,用form,把账号和密码,提交到/login这个路径,并且附带method="post"
4. 找到对应的Servlet
tomcat接收到一个新的请求:http://127.0.0.1/login
其路径是/login,接着就到配置文件web.xml进行匹配,发现/login,对应的Servlet类是LoginServlet。
接下来的工作,就会基于这个LoginServlet进行。
5. 实例化Servlet对象
Tomcat定位到了LoginServlet后,发现并没有LoginServlet的实例存在,于是就调用LoginServlet的public无参的构造方法LoginServlet()实例化一个LoginServlet对象以备后续使用。
6. 调用doGet或者doPost
Tomcat从上一步拿到了LoginServlet的实例之后,根据页面login.html提价信息的时候带的method="post",去调用对应的doPost方法。
7. request获取参数
接着流程进入了doPost方法中,在这个方法中,通过参数request,把页面上传递来的账号和密码信息取出来。
protected void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException{
String name = request.getParameter("name");
String password = request.getParameter("password");
}
8. response设置响应
接着,根据账号和密码是否正确(判断是否是admin和123),创建不同的html字符串。然后把html字符串通过如下方式,设置在了response对象上。
PrintWriter pw = response.getWriter();
pw.println(html);
到这里,Servlet的工作就做完了。
9. tomcat把html传递给浏览器
在Servlet完成工作之后,tomcat拿到被Servlet修改过的response,根据这个response生成html字符串,然后再通过HTTP协议,这个html字符串,回发给浏览器,浏览器再根据HTTP协议获取这个html字符串,并渲染在界面上。
这样在效果上,浏览器就可以看到Servlet中生成的字符串了。