Java Web学习3(Servlet技术2-表单数据处理)

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

发布了157 篇原创文章 · 获赞 217 · 访问量 28万+

猜你喜欢

转载自blog.csdn.net/kenjianqi1647/article/details/105708286