1、Servlet的工作流程
- 客户端(浏览器)提交对Servlet调用的Get或Post请求。
- 服务端接到请求后,如果对Servlet是第一次调用,则实例化这个Servlet。
- 服务器调用该Servlet对象的service()方法。
- 服务器产生动态的回复内容,并将内容发送给service()方法。
2、Servlet表单数据
客户端通过浏览器发送给Web服务器的请求一共有7种,即POST、GET、PUT、DELETE、OPTIONS、HEAD和TRACE。实际web编程中,用到比较多的分别为 GET 方法和 POST 方法。
(1)GET 方法
GET 方法是默认的从浏览器向 Web 服务器传递信息的方法,它会产生一个很长的字符串,出现在浏览器的地址栏中。GET 方法有大小限制:请求字符串中最多只能有 1024 个字符。
Servlet 使用 doGet() 方法处理这种类型的请求。
(2)POST方法
POST 方法打包信息的方式与 GET 方法基本相同,但是 POST 方法不是把信息作为 URL 中 ? 字符后的文本字符串进行发送,而是把这些信息作为一个单独的消息。消息以标准输出的形式传到后台程序
Servlet 使用 doPost() 方法处理这种类型的请求。
“POST”请求是通过HTML中表单“Form”进行发送的,表单中宝矿力不同形式的输入,如Input text、Input password、Input radio、Input checkbox等。
3、doGet、doPost和service方法
在servlet开发中,以doGet()和doPost()分别处理get和post方法。首先判断请求时是get还是post,如果是get就调用doGet(), 如果是post就调用doPost()。
(1) Service是类GenericServlet中的方法,每次客户向服务器发出请求时,服务器就会调用这个方法。程序员如果想对客户的请求进行响应的话就必须覆盖这个方法,并在这个方法中加入自己的代码来实现对客户的响应。
Servlet 类中有 service() 方法,则优先调用 Service 方法。然后才会调用自己覆写的doPost()或是doGet()方法。
(2)doGet()表示,当客户端是使用get方式请求该servlet时,那么就会触发执行doGet()方法中的代码。
(3)doPost()表示,当客户端是使用post方式请求该servlet时,那么就会触发执行doPost()方法中的代码。
参考:https://blog.csdn.net/qq_40301026/article/details/90076936
4、HTML表单基础知识
Form标记基本语法:
<form method="post | get" action="/servlet/addMessage">
<!--添加form标记-->
</form>
说明:method用于设置将表单的数据传递给Web服务端的方法,post或get;action指明处理这个表单的Servlet程序所在的URL地址,默认以form所在文件的URL为设置值。
5、表单应用案例
建立账号、密码登录页面
(1)eclipse下新建一个Dynamic Web Project项目如下
建立三个文件:
- login.html 登录界面
- web.xml 配置文件
- MyServlet.java 编写servlet
(2)编写login.html 登录界面
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form id="form1" name="form1" method="post" action="myServlet">
<table width="313" border="0">
<tr>
<td width="85">用户名:</td>
<td width="218"><input name="username" type="text" id="username" size="18" maxlength="10"></td>
</tr>
<tr>
<td width="85">密码:</td>
<td width="218"><input name="password" type="password" id="password" size="18" maxlength="10"></td>
</tr>
<tr>
<td><input type="submit" name="submit" id="submit" value="提交"></td>
<td><input type="reset" name="reset" id="reset" value="重置"></td>
</tr>
</table>
</form>
</body>
</html>
注意<form> 的action为web.xml文件里配置的servlet-name的名字,引用时前面不要加“/”,该位置设置不正确会出现404错误。
(3) MyServlet.java编写
该类里面重新doPost方法
package com.herry.bean;
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;
import org.apache.catalina.connector.Response;
public class MyServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// TODO Auto-generated method stub
//设置响应内容
resp.setContentType("text/html;charset=utf-8");
PrintWriter out=resp.getWriter();
out.println("<HTML>");
out.println("<HEAD><TITLE>表单测试</TITLE></HEAD>");
out.println("<BODY>");
req.setCharacterEncoding("utf-8");
out.println("input username:"+req.getParameter("username")+"<br>");
out.println("input password:"+req.getParameter("password")+"<br>");
out.println("</BODY>");
out.println("</HTML>");
out.flush();
out.close();
}
}
(4)配置 web.xml 文件
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" id="WebApp_ID" version="4.0">
<!-- 配置servlet -->
<!-- 配置servlel类路径 -->
<servlet>
<servlet-name>myServlet</servlet-name> <!-- servlet名字自定义 -->
<servlet-class>com.herry.bean.MyServlet</servlet-class> <!-- servlet类的路径-->
</servlet>
<!-- 配置servlel访问方式 -->
<servlet-mapping>
<servlet-name>myServlet</servlet-name>
<url-pattern>/myServlet</url-pattern>
</servlet-mapping>
</web-app>
(5)项目 中WebContent的所有文件部署到Tomcat下,开启Tomcat;浏览器中输入
action的配置还要其他方法见以下链接:
https://blog.csdn.net/zeephom/article/details/79609999