Form表单请求


Form表单请求,一般常用的是Get和Post提交方式,

Get方式提交

表单内容

<form action="user/login.do" method="get" >
    用户名:<input type="text" name="username"><br>
    密码:<input type="text" name="password"><br>
    <input type="submit" value="登录"/>
</form>

Get方式提交,最后以 http://localhost:8080/springmvc/user/login.do?username=zhangsan&password=123456 请求服务器。


Post方式提交

Post提交方式,Form表单有两种enctype类型:

1、enctype="application/x-www-form-urlencoded"

也是默认的提交类型,一般针对文本请求参数,不含附件。比如

<form action="user/login.do" method="post" >
    用户名:<input type="text" name="username"><br>
    密码:<input type="text" name="password"><br>
    <input type="submit" value="登录"/>
</form>

提交表单时的Http请求如下:

POST http://localhost:8080/springmvc/user/login.do HTTP/1.1
Host: localhost:8080
Connection: keep-alive
Content-Length: 33
Cache-Control: max-age=0
Origin: http://localhost:8080
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36
Content-Type: application/x-www-form-urlencoded
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Referer: http://localhost:8080/springmvc/
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.8

username=zhangsan&password=123456

消息头中的

Content-Type: application/x-www-form-urlencoded


消息体中内容以key=value的形式拼接

username=zhangsan&password=123456


2、enctype="multipart/form-data"

需要上传附件时,必须为"multipart/form-data"。,比如

<form action="user/login.do" method="post" enctype="multipart/form-data">
    用户名:<input type="text" name="username"><br>
    密码:<input type="text" name="password"><br>
    上传文件:<input type="file" name="uploadFile"/><br>
    <input type="submit" value="登录"/>
</form>

提交表单时,Http请求协议如下:

POST http://localhost:8080/springmvc/user/login.do HTTP/1.1
Host: localhost:8080
Connection: keep-alive
Content-Length: 400
Cache-Control: max-age=0
Origin: http://localhost:8080
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36
Content-Type: multipart/form-data; boundary=----WebKitFormBoundarykALcKBgBaI9xA79y
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Referer: http://localhost:8080/springmvc/
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.8

------WebKitFormBoundarykALcKBgBaI9xA79y
Content-Disposition: form-data; name="username"

zhangsan
------WebKitFormBoundarykALcKBgBaI9xA79y
Content-Disposition: form-data; name="password"

123456
------WebKitFormBoundarykALcKBgBaI9xA79y
Content-Disposition: form-data; name="uploadFile"; filename="file.txt"
Content-Type: text/plain

文件中的内容     
------WebKitFormBoundarykALcKBgBaI9xA79y--

请求消息头中, Content-Type: multipart/form-data; boundary=----WebKitFormBoundarykALcKBgBaI9xA79y

boundary为分隔符.

消息体中的每个参数都会以“--”+boundary  隔开,最后一个分隔符末尾需要加"--",即"--"+boundary+"--"


模拟Form表单请求

在了解了表单请求时组装的Http协议后,我们就按照http协议,模拟出表单请求了。比如使用HttpUrlConnection上传文件,当然很多Http框架已经帮我们实现了文件上传,比如

Okhttp、HttpClient等。

如何使用HttpUrlConnection实现文件上传,可以参考我的另一篇文章如何使用 HttpURLConnection上传文件



要使用form表单请求servlet绘制图形,需要在HTML页面上创建一个form表单,并在该表单中设置action属性为servlet的URL,并设置method属性为POST或GET。 例如,以下是一个简单的HTML页面,它包含一个form表单和一个提交按钮: ```html <!DOCTYPE html> <html> <head> <title>绘制图形</title> </head> <body> <form action="MyServlet" method="post"> <label for="shape">选择图形:</label> <select name="shape" id="shape"> <option value="circle">圆形</option> <option value="rectangle">矩形</option> <option value="triangle">三角形</option> </select> <br/><br/> <input type="submit" value="绘制图形"> </form> </body> </html> ``` 在此示例中,我们创建了一个form表单,它包含一个选择框,用户可以从中选择要绘制的图形类型。当用户单击“绘制图形”按钮时,提交表单将触发名为“MyServlet”的servlet的POST请求。 然后,我们可以在servlet中获取表单参数,并使用Java绘图库(如Java 2D)绘制所选图形。下面是一个简单的示例servlet,它将根据用户选择绘制圆形、矩形或三角形: ```java import java.io.IOException; import java.io.PrintWriter; import java.awt.*; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class MyServlet extends HttpServlet { private static final long serialVersionUID = 1L; public MyServlet() { super(); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); String shape = request.getParameter("shape"); out.println("<html><head><title>绘制图形</title></head><body>"); if(shape.equals("circle")) { out.println("<h1>圆形</h1>"); drawCircle(out); } else if(shape.equals("rectangle")) { out.println("<h1>矩形</h1>"); drawRectangle(out); } else if(shape.equals("triangle")) { out.println("<h1>三角形</h1>"); drawTriangle(out); } out.println("</body></html>"); out.close(); } private void drawCircle(PrintWriter out) { // 使用Java 2D绘制一个圆形 } private void drawRectangle(PrintWriter out) { // 使用Java 2D绘制一个矩形 } private void drawTriangle(PrintWriter out) { // 使用Java 2D绘制一个三角形 } } ``` 在此示例中,我们在servlet的doPost方法中获取表单参数,并根据用户选择调用适当的绘图方法。这些方法使用Java 2D库绘制所选图形,并将结果写入PrintWriter对象以在HTML页面上显示。 注意,这只是一个简单的示例,你可能需要根据自己的需求进行修改和扩展。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值