一、 J2EE WEB应用文件目录结构

Java Web应用由一组静态HTML页、Servlet、JSP和其他相关的class组成,它们一起构成一个大的工程项目。每种组件在Web应用中都有固定的存放目录。Web应用的配置信息存放在web.xml文件中。在发布某些组件(如Servlet)时,必须在web.xml文件中添加相应的配置信息 
Java Web应用程序必须使用规范的目录结构

1. 应用程序根目录,可以取任意的名字,所有的HTML、JSP文件都放在这个目录下
  1.1 WEB-INF目录: 必须目录 
    1.1.1 web.xml: Web应用部署描述文件,必须文件
    1.1.2 classes目录: 
      1) 用于存放单个*.classes字节码文件,Servlet类文件也存放在这个目录下
    1.1.3 lib目录: 
      1) 存放第三方类库文件,即打包后的JAR文件
    1.1.4 TLD文件: 标签库描述文件 
  1.2 其他静态文件:
    1.2.1 HTML
    1.2.2 CSS
    1.2.3 JavaScript
    1.2.4 图片等
  1.3 *.jsp: 存放任意多个JSP页面

很多情况下,需要传递一些信息,从浏览器到 Web 服务器,最终到后台程序。浏览器使用两种方法可将这些信息传递到 Web 服务器,分别为 GET 方法和 POST 方法。

二、GET 方法

GET 方法向页面请求发送已编码的用户信息。页面和已编码的信息中间用 ? 字符分隔,如下所示:

http://www.test.com/hello?key1=value1&key2=value2

GET 方法是默认的从浏览器向 Web 服务器传递信息的方法,它会产生一个很长的字符串,出现在浏览器的地址栏中。如果您要向服务器传递的是密码或其他的敏感信息,请不要使用 GET 方法。GET 方法有大小限制:请求字符串中最多只能有 1024 个字符。

这些信息使用 QUERY_STRING 头传递,并可以通过 QUERY_STRING 环境变量访问,Servlet 使用 doGet() 方法处理这种类型的请求。

三、POST 方法

另一个向后台程序传递信息的比较可靠的方法是 POST 方法。POST 方法打包信息的方式与 GET 方法基本相同,但是 POST 方法不是把信息作为 URL 中 ? 字符后的文本字符串进行发送,而是把这些信息作为一个单独的消息。消息以标准输出的形式传到后台程序,您可以解析和使用这些标准输出。Servlet 使用 doPost() 方法处理这种类型的请求。

四、使用 Servlet 读取表单数据

Servlet 处理表单数据,这些数据会根据不同的情况使用不同的方法自动解析:

  • getParameter():您可以调用 request.getParameter() 方法来获取表单参数的值。
  • getParameterValues():如果参数出现一次以上,则调用该方法,并返回多个值,例如复选框。
  • getParameterNames():如果您想要得到当前请求中的所有参数的完整列表,则调用该方法。

五、二者区别

首先:Post传输数据时,不需要在URL中显示出来,而Get方法要在URL中显示。 
    其次:Post传输的数据量大,可以达到2M,而Get方法由于受到URL长度限制,只能传递大约1024字节. 
    再次:Post就是为了将数据传送到服务器段,Get就是为了从服务器段取得数据.而Get之所以也能传送数据,只是用来设计告诉服务器,你到底需要什么样的数据.Post的信息作为http请求的内容,而Get是在Http头部传输的。

六、再说Servlet中的GET和POST之间的区别

get和post这是http协议的两种方法,另外还有head, delete等 。这两种方法有本质的区别,get只有一个流,参数附加在url后,大小个数有严格限制且只能是字符串。post的参数是通过另外的流传递的,不通过url,所以可以很大,也可以传递二进制数据,如文件的上传。

在servlet开发中,以doGet()和doPost()分别处理get和post方法。 另外还有一个doService(), 它是一个调度方法,当一个请求发生时,首先执行doService(),不管是get还是post。在HttpServlet这个基类中实现了一个角度,首先判断是请求时get还是post,如果是get就调用doGet(), 如果是post就调用doPost()。你也可以直接过载doService()方法,这样你可以不管是get还是post。都会执行这个方法。

GET和POST的本质区别是什么?
        使用GET,form中的数据将编码到url中,而使用POST的form中的数据则在http协议的header中传输。在使用上,当且仅当请求幂等(字面意思是请求任意次返回同样的结果,本质是请求本身不会改变服务器数据和状态)时使用GET,当请求会改变服务器数据或状态时(更新数据,上传文件),应该使用POST。
区别使用GET,POST意义何在?
重复访问使用GET方法请求的页面,浏览器会使用缓存处理后续请求。使用POST方法的form提交时,浏览器基于POST将产生永久改变的假设,将让用户进行提交确认。当编成人员正确的使用GET,POST后,浏览器会给出很好的缓存配合,时响应速度更快。
在form提交阶段的差别
form提交的第一步是创建数据集,并根据ENCTYPE对数据集进行编码。ENCTYPE有两个值:multipart/form-data,application/x-www-form-urlencoded(默认值),前者可同时用于GET,POST,后者只用于POST。然后进行数据传输--对于GET方法,数据集使用content type application/x-www-form-urlencoded编码并附在url后面,在这种模式下,数据严格限制为ASCII码;对于POST,使用content type编码字符集并将其构造成消息发送。
在服务器处理部分的差别
原则上,除理GET和POST请求是没有分别的。但由于数据通过不同的方法编码,需要有不同的解码机制。所以,方法变化将导致处理请求的代码变化。比如对于cgi,处理GET时通过环境变量获得参数,处理POST请求时则通过标准输入(stdin) 获得数据。

从使用经验,我们有如下总结:
1、get是把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内各个字段一一对应,在URL中可以看到。post是通过HTTP post机制,将表单内各个字段与其内容放置在HTML HEADER内一起传送到ACTION属性所指的URL地址。用户看不到这个过程。
2、对于get方式,服务器端用Request.QueryString获取变量的值,对于post方式,服务器端用Request.Form获取提交的数据。两种方式的参数都可以用Request来获得。
3、get传送的数据量较小,不能大于2KB。post传送的数据量较大,一般被默认为不受限制。但理论上,IIS4中最大量为80KB,IIS5中为100KB。
4、get安全性非常低,post安全性较高。
5、<form method="get" action="a.asp?b=b">跟<form method="get" action="a.asp">是一样的,也就是说,action页面后边带的参数列表会被忽视;而<form method="post" action="a.asp?b=b">跟<form method="post" action="a.asp">是不一样的。

七、使用范例

在eclipse新建一个web工程,取名随便,然后添加web.xml   index.jsp、还有servlet..结构如下:

本文工程免费下载

GetServlet.java代码如下:

doGet

[java] view plaincopy
  1. protected void doGet(HttpServletRequest request,
  2. HttpServletResponse response) throws ServletException, IOException {
  3. response.setContentType("text/html;charset=UTF-8");
  4. PrintWriter out = response.getWriter();
  5. String name1 = request.getParameter("name1");
  6. String price1 = request.getParameter("price1");
  7. out.println("<HTML>");
  8. out.println("  <HEAD><TITLE>A Servlet</TITLE></HEAD>");
  9. out.println("  <BODY>");
  10. out.print("    This is ");
  11. out.print(this.getClass());
  12. out.println(", using the POST method");
  13. out.println("<br></br>");
  14. out.println("名称:"+name1);
  15. out.println("<br></br>");
  16. out.println("价格:"+price1);
  17. out.println("  </BODY>");
  18. out.println("</HTML>");
  19. out.flush();
  20. out.close();
  21. }

doPost

[java] view plaincopy
  1. protected void doPost(HttpServletRequest request,
  2. HttpServletResponse response) throws ServletException, IOException {
  3. response.setContentType("text/html;charset=UTF-8");
  4. PrintWriter out = response.getWriter();
  5. String name2 = request.getParameter("name2");
  6. String price2 = request.getParameter("price2");
  7. out.println("<HTML>");
  8. out.println("  <HEAD><TITLE>A Servlet</TITLE></HEAD>");
  9. out.println("  <BODY>");
  10. out.print("    This is ");
  11. out.print(this.getClass());
  12. out.println(", using the POST method");
  13. out.println("<br></br>");
  14. out.println("名称:"+name2);
  15. out.println("<br></br>");
  16. out.println("价格:"+price2);
  17. out.println("  </BODY>");
  18. out.println("</HTML>");
  19. out.flush();
  20. out.close();
  21. }

index.jsp:

[html] view plaincopy
  1. <%@ page language="java" contentType="text/html" pageEncoding="UTF-8"%>
  2. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  3. <html>
  4. <head>
  5. <title>Insert title here</title>
  6. </head>
  7. <body>
  8. <form action="servlet/GetServlet" method="GET">
  9. 名称: <input type=text name=name1 value="">
  10. 价格: <input type=text name=price1 value=""><br>
  11. <input type="submit" value="您采用了GET方式提交"> <br>
  12. </form>
  13. --------------------------------这是分割线-------------------------------------
  14. <br></br>
  15. <form action="servlet/GetServlet" method="POST">
  16. 名称: <input type=text name=name2 value="">
  17. 价格: <input type=text name=price2 value=""><br>
  18. <input type="submit" value="您采用了POST方式提交">
  19. </form>
  20. </body>
  21. </html>

web.xml:

[html] view plaincopy
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <web-app version="2.5"
  3. xmlns="http://java.sun.com/xml/ns/javaee"
  4. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  5. xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
  6. http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
  7. <!-- 配置初始打开的页面 -->
  8. <welcome-file-list>
  9. <welcome-file>index.html</welcome-file>
  10. <welcome-file>index.htm</welcome-file>
  11. <welcome-file>index.jsp</welcome-file>
  12. </welcome-file-list>
  13. <servlet>
  14. <!-- 类名 -->
  15. <servlet-name>GetServlet</servlet-name>
  16. <!-- 所在的包 -->
  17. <servlet-class>com.mucfc.chapter0.GetServlet</servlet-class>
  18. </servlet>
  19. <servlet-mapping>
  20. <servlet-name>GetServlet</servlet-name>
  21. <!-- 访问的网址 -->
  22. <url-pattern>/servlet/GetServlet</url-pattern>
  23. </servlet-mapping>
  24. </web-app>

然后就是运行了:

用get提交

用post提交

本文工程免费下载

Get与Post区别与范例讲解相关推荐

  1. 苏宁使用API接口范例讲解

    下面就为大家分享一篇苏宁使用API接口范例讲解(接口开发),具有很好的参考价值,希望对大家有所帮助. API的使用步骤: 打开接口地址 选定对应的接口 输入key和secret 点击测试 API接口 ...

  2. 毕业论文格式范例讲解

    对于许多毕业生而言,写毕业论文是一件很重要的事.那么,毕业论文的格式是怎样的呢?以下提供毕业论文格式范例讲解,各位毕业生不妨适当予以参考. 第一.构成项目 毕业论文包括以下内容: 封面.内容提要与关键 ...

  3. python isdigit和isnumeric区别_isdigit()、isdecimal()和isnumeric python中区别【详细讲解】...

    今天爱分享给大家带来isdigit().isdecimal()和isnumeric python中区别[详细讲解],希望能够帮助到大家. 1.函数介绍 isdecimal(...) | S.isdec ...

  4. isnumeric用法python_isdigit()、isdecimal()和isnumeric python中区别【详细讲解】

    今天爱分享给大家带来isdigit().isdecimal()和isnumeric python中区别[详细讲解],希望能够帮助到大家. 1.函数介绍 isdecimal(...) | S.isdec ...

  5. 守护线程和用户线程的真正区别(实例讲解)

    java 中的线程分为两种:守护线程(Daemon)和用户线程(User). 用户线程:我们平时所创建的都是用户线程. 守护线程:为用户线程提供服务. 任何线程都可以设置为守护线程和用户线程,通过方法 ...

  6. HTTP和HTTPS的区别以及介绍讲解

    文章目录 1.http与https的介绍 2.HTTP与HTTPS的原理 HTTPS连接的一个过程 1.http与https的介绍 http:超文本传输协议,是互联网应用最广泛的一种网络协议.设计的最 ...

  7. 集线器、网桥、交换机、路由器区别的简单讲解

    看了下网上的讲解,发现讲解不是很直观易懂.现在我来总结下. 这个问题我们得回到互联网的发展来看: 很久很久以前,有一对好基友,他们用一根网线直接连接着他们两个人的电脑.不存在互联网,只有两个人孤独的分 ...

  8. mysql全局变量和局部变量的区别_详细讲解mysql全局变量与局部变量

    通常在服务器启动时,会将每个全局变量初始化为其默认值(我们可以通过命令行或选项文件中指定的选项更改这些默认值),然后服务器还为每个连接的客户端维护一组会话变量,客户端的会话变量在连接时使用相应全局变量 ...

  9. get请求和post请求的区别(全面讲解)

    1.get请求一般是去取获取数据(其实也可以提交,但常见的是获取数据): post请求一般是去提交数据. 2.get因为参数会放在url中,所以隐私性,安全性较差,请求的数据长度是有限制的, 不同的浏 ...

  10. Overlay和Underlay网络协议区别及概述讲解

    目录 (一) Overlay网络模型 (二)Underlay网络模型 本文分别介绍Overlay网络模型和Underlay网络模型. (一) Overlay网络模型 跨主机网络意味着将不同主机上的容器 ...

最新文章

  1. 解决TCP网络传输“粘包”问题
  2. 人脸识别损失函数笔记
  3. iOS开发之AFNetworking 3.0.4使用
  4. 如何独立实现一个基于知识图谱的问答系统
  5. 教大家白嫖图床,有的小伙伴跟我说图床不好整,太麻烦
  6. 利用python自定义完整版迭代器
  7. 计算机excel表格相关考试视频,1189.5天通过职称计算机考试:Excel 2003中文电子表格(考点视频串讲+全真模拟).pdf...
  8. ADO.NET Entity Framework 学习
  9. Aqara 2021发布会:万物互联的家庭智慧全景
  10. linux5.5 dev null,NULL TTY驱动程序将出现在Linux 5.2内核中
  11. JConsole使用教程
  12. 在自己的项目中调用别人的库的方法(static lib库,dynamic lib库以及dll动态库)
  13. Jetpack Compose 从入门到入门(七)
  14. html图片铺底代码,梦幻西游底部师徒四人动态图
  15. [大话设计模式] 第7章: 代理模式
  16. Silicon EFR32BG22(5)ADC读取电池电压功能
  17. 服务器操作系统查询命令,服务器操作系统查询命令
  18. PMBOK泛读(第十一章) - 项目风险管理
  19. 雷军把小米发布会开到华为门口,发布了安卓版iPhone X
  20. 我们该给世界留下些什么?——兼谈文艺复兴

热门文章

  1. Babel 入门教程
  2. 自动化瓦力多渠道打包python脚本
  3. Android MVP+Retrofit(封装)+RxJava实例
  4. 中国超算世界第一 日本拟造最快超级计算机反超
  5. 基于Cocos2d-x的手机游戏性能监控
  6. 第九周项目3-输出星号图
  7. 为什么要用非关系型数据库nosql
  8. Tencent笔试题收集
  9. 如何在Mac上使用“预览”应用抠图?
  10. 如何从Mac桌面隐藏各种标准图标?