表单一般是浏览器实现的,当然也有编程语言,比如python的post方法,然后配合任意一门后台语言比如javaweb来获取post数据。
在此声明,post不安全。post和get的详细区别请先研究http协议详细的规格再结合浏览器F12抓个包详细看。(或者wireshark,如果你用的https的包还是用浏览器方便)
因为是浏览器实现的,所以post也是明文的!!!
从wireshark抓包看到是明文的。
表单的几个属性非常重要。
name属性如果写,则提交表单时才会带上这个数据。
且Post是由&分割的。
也就是说你这样:
URL?a=1&b=2
post也是这样,只不过post跟在了request body里面。
关于请求和响应,一句话概括:
请求:请求行,请求头,请求体(简单的参数传递)
响应:响应行,响应头,响应体(html/css/js/image/mp3/m3u8/...)
然后跟在一堆请求包里面。
响应表单中有name属性的则是:
请求行…
请求头…
请求体:
a=1&b=2

<form action=”URL”></form>

这个URL非常的坑。故且可以理解为绝对URL和相对URL。
知道参数是URL。
那么,什么是URL?
我讲个故事。
以前的一群科学家们在用美国二战时留下的网络时,想搞1个分布式系统。当时想的是制造这样一种网络,可以让人点一下,就可以访问位于某个Ip的机器的资源。由于这种点一下点一下的方式,(你可以把鼠标放到1个超链接上,看到鼠标变成了抓手模样)实在是太棒了。于是好多不搞计算机的也加入近来,他们也让自己的及其变成服务器,这样他们就组成了一个巨大的分布式系统。而这个系统就是www,简称web。

围绕着web,就有好多事情。最重要的就是关于浏览器和服务器。这两个都是建立在操作系统之上的应用层软件。前前后后美国的几个大公司都参和了不止一脚,每参和一脚就会让前段程序员气到骂娘。
总之,有一群无聊的人让http协议成了www明面上使用最广的协议,围绕着http,聚集着一堆增值服务,因为http太简陋,没啥玩的。这就好比我买了个树霉派结果没买配套硬件一样。。。
总之呢,怎么确定这个大的分布式系统中我,要到哪里,去抓某个资源呢?也就是<a href=""写什么呢?如果中国银行写了www.bank.com,美国银行也写了www.bank.com,那不就乱了么?这个时候,就需要唯一的确定某个地址。所以啊,用wireshark抓一下包就会发现一堆DNS流量,其实就是去干这个事情了。那其中肯定会牵扯到金钱交易,毕竟域名服务器帮你解析了麻,虽然干的活简单,可是架不住这么多人用,你也没办法。这就是标准的重要性。
再来看看URL的格式就会发现一些有趣的事情。
协议名://主机名:端口/路径,我们写form表单,让浏览器去请求的时候,其实我们只需要写baidu.com,但是浏览器在拿到这个字符串后立刻变成了http://www.baidu.com,然后去取资源。
www.baidu.com这台主机,然后返回一个index.html这个页面。这样就ok了。

所以我们form表单在写的时候写的/代表什么呢?
根路径,到底是相对于谁的根呢?
是后台代码的根呢?还是什么?
我们需要深入理解服务器程序的设计。
早期的html也就是静态页面,没什么好纠结的。服务器也就是看客户端要取这个资源,然后就返回对应的html页面。在这种情况下,服务器不需要跟客户端保持一个连接,注意,http是无连接的。它虽然是基于tcp协议,tcp协议保证了可靠连接,但是http并不会建立连接,就是一个简单的请求(get/post/head/…),响应。这种情况下服务器是不需要跟你保持1个连接的。你上web也很无聊啊,就是看看这个站点发布了什么,连个交互都没有。可是你要知道,今天web遍布全球,所以这种情况是不会持续很长时间的。于是,http马上升级到了1.1,但其实是优化了客户端的上网速度而已。这中间有些技术出来搅混这谭水,比如java applet。这是什么呢?就是服务器有个小程序,叫做applet,然后发给你的浏览器,你的浏览器就可以动态的给你展示一些内容,就像服务器给你提供的服务一样,不过这时是缓解了服务器的压力。想象一下,当时可能有个人发了个有趣的小游戏,然后放到一个大论坛,这时很多人都下载然后去玩。是不是好快乐?但是这就暴露了安全问题。导致后来哪怕是cookie那个RFC草案的提出,都会被无限放大为侵入计算机系统的病毒,估计就是这个时候人们变得草木皆惊了。然后出现了像php这样的脚本语言。所谓脚本是什么呢?就是浏览器不是传过来1个请求麻,然后解析一下,毕竟是html页面而已,服务器抓去到事实上的请求地址,就开始去解析,然后可能还经过了各种库的处理,ok,服务器处理完了,就把处理好的数据再塞到html页面发给浏览器里面。
所以,form的action属性其实是说,我这里有post的数据(一般form也都是post请求),我要发送到这个action这个url下面。通过url可以唯一的确定服务器的地址。–服务器默认端口是80,协议是http。所以,
协议名://主机名:端口/路径已经知道了协议名://主机名:端口,就剩路径了。你要知道,现在的服务器你给的路径都不是某个具体的脚本文件了,而是服务器的内部路径,也就是一串字符串,你看不出规律的,这即方便也安全。不然我抓个图看看:

可以看到,支付宝的action地址是详细的URL,虽然指向的是本页面。
所以,action作了把数据送到这个URL定位的资源上面。资源可以是超文本,视频,音频,甚至动态处理的脚本语言,服务器的某个处理路径…
顺便说一下,想实施发送一个post,需要在form中写<input type="submit"<button onclick="函数"来发送post或触发js发送post请求。
但如果post到的地址它不接受,服务器找不到等,那这个数据就发送不了。
那么,<form action='#'干了什么呢?
#简单的来说是把数据送到了当前页面进行处理,action什么都不加或者干脆不写action都是把数据送到当前页处理,#是比较老的写法了。
再说说后段怎么办。
action可以是绝对URL,和相对URL。绝对的就参考支付宝的写法,是https就写443,否则写80。因为考虑是绝对的就写全为好。
回想一起那我写的这几篇文章:
https://blog.csdn.net/u010563350/article/details/81147457
https://blog.csdn.net/u010563350/article/details/81351274
https://blog.csdn.net/u010563350/article/details/81351280
,
所以,写绝对路径绝对是无可争议,而且不容易出错。而写绝对路径比较省力的写法,(也是避免把页面写死的办法)就是后两种。
当然也可以看看这篇文章:https://blog.csdn.net/lutinghuan/article/details/6450174?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-1.channel_param&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-1.channel_param
,所以,就是找到了项目的主页嘛。其中的get什么的都是tomcat提供的方法而已。
然后就是tomcat在运行时在response时会把其中的替换掉。
然后就是相对路径了。
相对路径会写/开头,/项目名/才到改项目的根。有几点非常不友好,1.Linux中的绝对路径是以/开头,这就容易让人先入为主而混淆。
2.在服务器,例如tomcat中,生成html页面发送给客户端的时候会先看自身的配置。这个时候如果需求变了,想要把路径改改,会造成非常大的困扰。
为了让你们再少走点坑,我所幸把路径这个坑给你们将清除了。
在linux中,目录以/分割,
在windows中,目录以’‘分割。
但是Java它处理’'是有点毛病,必须得\\代表1个\。也就是你想要D盘的这个路径D:\MySite\WebContent\WEB-INF的文件,你必须这样写:D:\\MySite\\WebContent\\WEB-INF。其他编程语言是没这个坑的。\一般用来指逃避字符,也就是把1个正常的字符转化为特殊的含义,有人也称为转移字符。
这也就是Java文件时必须这样:File f = new File("D:\\MySite\\WebContent\\WEB-INF");的原因。而且Java还不支持多行字符,类似于python和go中这样的写法:

#python
str='''bala1
bala2
bala3'''
//go
str :=  ```
bala1
bala2
bala3
`` `

这些说到底是文件系统的路径问题了。Linux沿用的Unix文件系统的路径,而Windows沿用的是Dos系统的文件路径。Linux最初是找着Unix抄的操作系统,Windows最初是照着Dos改的MsDos系统加的外皮。
而相对路径我认为最简单的方式是看浏览器的地址栏,查找当前所在路径,然后再根据这个文件(jsp)找到对应的路径。

这个说的很清除,但是不建议使用相对路径。后面的框架会自己处理类似的路径,而不依赖与具体的服务器。如spring框架,甚至隐藏自己的路径。
https://blog.csdn.net/bbb695480667/article/details/53838321#commentBox
这篇写的也不错。

建议

都写成绝对路径(某些情况下使用相对路径更监简单,不用用代码获取路径),绝对路径的URL的协议名,主机域名,端口,这些靠代码来动态获取。(代码规范由JavaEE提供,因此具有通用性)

前端的form表单怎么写?

1.现在当前jsp页面中写:<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%><head><%String path = request.getContextPath();// 获得项目完全路径(假设你的项目叫MyApp,那么获得到的地址就是http://localhost:8080/MyApp/):String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort()+ path + "/";%></head>
2.然后在form表单中这样写:
<form action="<%=bashPath%>login.jsp" method="post">username:<input type="text" value="" name="username" id="username"/>   <br>password:<input type="password" value="" name="password" id=""/><br><input type="submit" value="submit" name="" id=""/>
</form>
3.这样服务器端:http://localhost:8080/MyApp/login.jsp就收到了用户名和密码。
如果是sevlet则把login.jsp换成loginServlet
http://localhost:8080/MyApp/loginServlet

后端的转发和重定向方法怎么写?

重定向是给浏览器地址让浏览器去找自己的资源,因此这种情况下必须给全部的URL。即完全URL
这个时候的/代表了外部路径http:localhost:8080,因此需要给出项目名,写成:/MyApp/login.jsp的样子。


/** 重定向有三种路径书写方式*       1.绝对路径*         2.以"/"开头的相对路径*        3.不以"/"开头的相对路径*/
public class RedirectServlet extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {response.sendRedirect("http://localhost:8080/javaee/jsp/b.jsp");/** 2.以"/"开头的相对路径*       此时,/代表整个web工程的路径,即http://localhost:8080/*/
//      response.sendRedirect("/javaee/jsp/b.jsp");/** 3.不以"/"开头的相对路径*      此时是相对于当前资源的相对路径*        当前资源路径为:http://localhost:8080/javaee/RedirectServlet*       即表示:RedirectServlet在路径http://localhost:8080/javaee之下*       而b.jsp在http://localhost:8080/javaee/jsp/b.jsp*      所以最终地址写为:jsp/b.jsp*/
//      response.sendRedirect("jsp/b.jsp");}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doGet(request, response);}}

转发不同,转发是内部找内部的资源,因此使用绝对的URL服务器是不认识的。因此使用相对路径。
因为这个时候是在项目内部,因此/的含义是当前项目内部的资源根路径(不是文件系统根路径),也就是从外部看http://localhost:8080/MyApp/这个地址。

/** 服务器端的路径不能是绝对路径,只能是相对路径,也分为以/开头和不以/开头两种*        1.以"/"开头的相对路径*        2.不以"/"开头的相对路径*/
public class DispatcherServlet extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {/** 1.以"/"开头的相对路径*       此时,/代表当前web项目,即:http://localhost:8080/javaee*/
//      request.getRequestDispatcher("/jsp/b.jsp").forward(request, response);/** 2.不以"/"开头的相对路径*       相对于当前资源的相对路径*   此时,当前资源的路径为:http://localhost:8080/javaee/DispatcherServlet*  所以要转发去的资源的路径以:http://localhost:8080/javaee开头*/request.getRequestDispatcher("jsp/b.jsp").forward(request, response);}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doGet(request, response);}

改进,转发用ServletContext获取路径


/** ServletContext获取资源必须是相对路径,不能是绝对路径,但不管是以/开头,还是不以/开头,* 都是相对于当前资源的相对路径* */
public class ServletContextServlet extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {String path1 = this.getServletContext().getRealPath("/a.properties");String path2 = this.getServletContext().getRealPath("a.properties");System.out.println(path1);System.out.println(path2);//输出的地址一样}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doGet(request, response);}}
//上面是规则,下面是代码:

下面以一个管理系统为例进行说明:
该管理系统没有注册功能,就是管理员进行操作添加管理员从而得到用户名和密码。
sc为学生选课管理系统的缩写。

//1.访问http://localhost:8080/sc页面
//默认的,web.xml设置的欢迎页面是http://localhost:8080/sc/login.jsp
//2.用户输入用户名和密码,然后发送到
//http://localhost:8080/sc/LoginController
//3.Controller进行后端的用户名和密码校验,
//如果成功则重定向用户到http://localhost:8080/sc/index.jsp
//失败则重定向到http://localhost:8080/sc/login.jsp。
public class ServletContextServlet extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doGet(request, response);//此时的index.jsp和login.jsp都在}}

html中表单的action属性作了什么?相关推荐

  1. js 提交form表单,js更改form表单的action属性

    2019独角兽企业重金招聘Python工程师标准>>> js 提交form表单 <s:form id="formID1" action="favo ...

  2. html表单的常用属性有哪些,整理HTML5中表单的常用属性及新属性

    这篇文章主要介绍了使用HTML5进行SVG矢量图形绘制的入门教程,包括基本图形的绘制和简单的渐变效果等介绍,注意旧版本IE对其的支持并不好,需要的朋友可以参考下 HTML5 新的表单属性 HTML5 ...

  3. html5中有哪些新属性,整理HTML5中表单的常用属性及新属性

    HTML5 新的表单属性HTML5 的 和 标签添加了几个新属性.新属性: autocomplete novalidate 新属性: autocomplete autofocus form forma ...

  4. 关于CSS中表单的一些属性和使用

    表单标签:收集用户的信息 表单的组成:表单域,表单控件(或表单元素),提示信息三个部分. 表单域:包含表单元素的区域->实现用户信息的收集和传递->将表单范围内的信息提交给服务器 语法格式 ...

  5. Struts2中表单与Action传递数据三种方式

    1. Action中的属性与表单中的属性一致就可以JSP中的表单<formaction="login.action"method="post">用户 ...

  6. form表单的action属性设置相对路径

    代码如下,当form表单中的action值为savebyform.do时,该表单提交的路径会是什么呢? <form name="form1" action="sav ...

  7. 判断form表单里面的元素属性是否有数据_html form标签的action属性是什么意思?又有哪些用法?(附实例)...

    本篇文章主要的介绍HTML form表单标签的action属性的用法,用法介绍和实例等都在里面,现在让我们一起来看吧 程序猿的生活:打造全网web前端全栈资料库(总目录)看完学的更快,掌握的更加牢固, ...

  8. a jquery 标签点击不跳转_form标签的action属性怎么用?form标签action属性的用法介绍(附实例)...

    本篇文章主要的介绍了关于HTML中form标签action属性的用法介绍和实例,还有关于form标签的action属性的定义和语法介绍,最后徐还有关于form标签的action属性的作用解释.现在让我 ...

  9. action请求是什么意思_html form标签的action属性是什么意思?又有哪些用法?(附实例)

    本篇文章主要的介绍HTML form表单标签的action属性的用法,用法介绍和实例等都在里面,现在让我们一起来看吧 首先我们先来介绍一下关于HTML form标签的action属性的意思: form ...

最新文章

  1. android 图片缓存
  2. 轴只显示5个刻度_组团投资5亿元!武平集中签约5个新型显示产业链投资项目
  3. Allegro光绘的导出
  4. Vue 响应式原理(双向数据绑定) 怎样实现 响应式原理?
  5. 多态(继承父类的非静态重写方法)
  6. mysql设置success信息_【原创】MySQL Cluster安装部署(Success)
  7. 从零开始造一个“智障”聊天机器人
  8. 从些知道公钥密钥了,呜呜,激动ing~
  9. javamail发送html正文文件_自动发送邮件
  10. cad截图软件_AutoCAD电气制图协会线上CAD学习打卡活动结束
  11. AndroMDA 4.x架构(2)
  12. 关于使用FMDB往数据库里插入空字符串@后,再读出来是什么东西的问题
  13. Chapter第六章
  14. .Net 内存溢出(System.OutOfMemoryException)的常见情况和处理方式总结
  15. CSDN很火的汤小洋老师全部课程总共有哪些(问号问号问号)
  16. 计算机在线作业office,全国计算机一级office题库与答案
  17. Linux进阶_加密和安全
  18. 懂的android基础如何面试月薪过万
  19. Hutool做excel的解析
  20. svn下载安装与使用教程/方法

热门文章

  1. PS 图像特效-非线性滤波器
  2. 微信小游戏----HTML学习脚本(1)
  3. 找到了!2个在线版本的网页版 PS !
  4. Qt基于Qml超链接使用
  5. 如何使用Python优雅地去除HTML中的换行回车等控制字符
  6. ccxprocess用不用自启_面向电脑小白:被误会的360安全卫士,用着真香
  7. Tomcat 基于APR的本地库加载失败
  8. win常见的电脑cmd命令大全
  9. 地铁杂记 - 有一个坑
  10. 从信任的进化到遗传算法