Java-Servlet中get请求和post请求的区别

在学习JavaWeb最初的开始阶段,大家都会遇到HttpServlet中的doGet和doPost方法。前两天看《Head First Servlets & JSP》看到其中讲关于Servlet中get请求和post请求的区别,现总结如下:

1:请求数据的大小不同。

因为get请求的数据是要追加到URL中,而URL的数据量一般不能超过2K,所以用get请求的方法对数据的大小有限制。而post请求方法是把数据放在消息体中,所以理论上对数据量没有限制。(但是实际操作中也不能能太大)

2:安全性不一样

因为get请求的数据是追加在URL中,外部用户能很方便的看到,从这个角度上来讲不安全。而post方法因为是讲请求放在消息体中,不会直接在URL中显示所以从这个角度来说数据会比较安全。

3:书签建立

get请求可以建立书签;post请求则不能。例如:假设你有一个页面允许用户指定搜索规则。用户可能一个星期之后才回来,想要得到原来的数据,但此时服务器上已经有新的数据了。

4:方法的使用

get用于得到某些东西,只是简单的获取,不会对服务器做任何的改变。post则用户发送数据来进行处理,可以修改服务器上的数据。

5:请求是否幂等

get请求是幂等的,它只是要得到一些东西,不会修改服务器上的内容。它能执行多次,而且不会产生任何不好的副作用。而post不是幂等的,post体中的提交的数据可能用于不可逆转的事务。所以从这个角度上来看的话要慎重使用doPost()功能。

若表单中未指出method=“POST”,就会默认为HTTPGET请求。即缺省状态是调用get请求。

 

在学习JavaWeb最初的开始阶段,大家都会遇到HttpServlet中的doGet和doPost方法。
(1)doGet方法:主要是处理Http中的Get请求
(2)doPost方法:主要是处理Http中的Post请求
那么Get请求和Post请求到底有什么样的区别
(1)get只有一个流,参数附加在url后,大小个数有严格限制且只能是字符串
例如,http://localhost:8888/javaweb/getServlet?name=123
(2)post的参数是通过另外的流传递的,不通过url,所以可以很大,也可以传递二进制数据,如文件的上传
什么时候使用doGet和doPost方法
1.通过表单提交到的servlet,看form的method是get还是post  
2.通过链接<a  href…>访问的servlet,doGet  
3.直接在ie地址栏中键入的servlet地址,doGet

菠萝菠萝蜜 – 坑爹的作业从大一到大三一直TM是这个

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class Calculator implements ActionListener{

TextField CalculatorTextField = new TextField(30);
public static Frame Calculator = new Frame(“Calculator Test Windows”);
String[] NumButtonArrays = new String[12];
Panel PanelTop = new Panel();
Panel PanelButtom = new Panel();
Panel PanelOperation = new Panel();
GridLayout NumButtonLayout = new GridLayout(4,4);
GridLayout OperButtonLayout = new GridLayout(1,4);
Button[] NumButtonObjArrays = new Button[12];
Button[] OperObjButtonArrays = new Button[4];
String pre = “0”;
String tmp = “0”;
String next = “0”;

public Calculator()
{

PanelButtom.setLayout(NumButtonLayout);
PanelOperation.setLayout(OperButtonLayout);

PanelTop.add(CalculatorTextField);

for(int i = 0;i < 10;i ++)
{
NumButtonArrays[i] =String.valueOf(i);
}

NumButtonArrays[10] = “.”;
NumButtonArrays[11] = “=”;

String[] OperButtonArrays = {“+”,”-“,”*”,”/”};

for(int i = 0;i < 12;i ++)
{
NumButtonObjArrays[i] = new Button(NumButtonArrays[i]);
PanelButtom.add(NumButtonObjArrays[i]);
NumButtonObjArrays[i].addActionListener(this);
}

for(int i = 0;i < 4;i ++)
{
OperObjButtonArrays[i] = new Button(OperButtonArrays[i]);
PanelOperation.add(OperObjButtonArrays[i]);
OperObjButtonArrays[i].addActionListener(this);
}

Calculator.add(PanelTop,BorderLayout.NORTH);
Calculator.add(PanelButtom,BorderLayout.CENTER);
Calculator.add(PanelOperation,BorderLayout.SOUTH);

Calculator.pack();
Calculator.setVisible(true);

}

public void actionPerformed(ActionEvent e) {

String cmd = e.getActionCommand();
if(cmd.equals(“.”))
{
if(“.”.indexOf(pre) == -1)
pre = pre + “.”;
else pre = “Fuck You”;
}
else
{
if(cmd.equals(“+”) || cmd.equals(“-“) || cmd.equals(“*”) || cmd.equals(“/”))
{
next = pre;
OperatorAchtion(cmd);
pre = cmd;
next = cmd;
}
else
{
if(cmd.equals(“=”))
{
OperatorAchtion(next);
pre = tmp;
next = cmd;
}
else
{
if(pre.equals(“+”) || pre.equals(“-“) || pre.equals(“*”) || pre.equals(“/”) || pre.equals(“0”))
{
pre = cmd;
}
else pre = pre + cmd;
}
}
}

this.CalculatorTextField.setText(pre);
}

public void OperatorAchtion(String Operator)
{
if(“+”.equals(Operator))
tmp = String.valueOf(Double.parseDouble(tmp) + Double.parseDouble(pre));
else if(“-“.equals(Operator))
tmp = String.valueOf(Double.parseDouble(tmp) – Double.parseDouble(pre));
else if(“*”.equals(Operator))
tmp = String.valueOf(Double.parseDouble(tmp) * Double.parseDouble(pre));
else if(“/”.equals(Operator))
tmp = String.valueOf(Double.parseDouble(tmp) / Double.parseDouble(pre));
else;

}

public static void main(String args[]){
new Calculator();
}
}

学Java最需要的就是项目经验

Java就是用来做项目的!Java的主要应用领域就是企业级的项目开发!要想从事企业级的项目开发,你必须掌握如下要点:

1、掌握项目开发的基本步骤

2、具备极强的面向对象的分析与设计技巧

3、掌握用例驱动、以架构为核心的主流开发方法

没有人愿意自己一辈子就满足于掌握了一些代码实现的技巧,别人告诉你要实现什么,你就用代码堆砌来实现别人的要求!你必须学会从整个项目的角度去思考!你必须学会假如你是项目经理,你该如何思考!你必须学会假如你是架构师,你该如何思考!你必须掌握针对某个特定问题领域的分析方法!

关于基础tb知识:你可以看看这些名词或知识点,看是否能说出个一二三四来。

JavaSE

—-基本语法、数据类型、操作符等:int、long、Integer、Long、if、else、for、while

—-面向对象:class(类)、Object(对象)、instance(实例)、state(状态)、behavior(行为)、field、method、new、可见性(访问控制)、attribute、property、package、import、static variable、class variable、instance variable、heap、method area、stack、GC(垃圾回收)、override、overload、对象转型(casting)、多态、this、super

—-异常处理:理解编译期错误和运行期错误的区别、Exception、RuntimeException、checked exception、unchecked exception、try、catch、finally、throw new XXXException、throws XXXException、异常处理的基本原则

—-数组与集合:数组的定义和使用方法、Collection、List、Set、Map、ArrayList、HashSet、HashMap、Iterator、equals、hashCode、Comparable、Comparator

—-常用类:String、intern、常量池、StringBuffer、java.util.Date、SimpleDateFormat、Regex(正则表达式)

—-反射机制:Class、Method、Field、invoke、newInstance、BeanUtils(apache-commons)、PropertyUtils(apache-commons)

—-输入输出流:InputStream、OutputStream、Reader、Writer、Adapter设计模式与原始流类、Decorator设计模式与包装流类、对象序列化和反序列化

—-多线程:Thread、Runnable、sleep、wait、notify、synchronized、lock

Servlet和JSP

—-HttpServlet、doGet、doPost、HttpServletRequest、HttpServletResponse、request.getParameter()、request.setAttribute()、request.getAttribute()、request.getSession()、ServletContext、Filter、web.xml、tomcat、forward与redirect、http协议的无状态性、cookie、JSP Scope Object、<c:out …/>、<c:forEach …>

HTML与JavaScript

—-你需要能够理解常见的网页标签、理解在网页中引入JavaScript的方法、以及JavaScript的基本语法与使用方法

以上,就是你进一步学习Java所必备的基本知识。特别是一些个专业术语和名词,看到这些名词,如果你像看到亲爹一样亲切,那么说明你对Java的基础知识就很熟悉了。

接下来是SSH:

对于初学者来说,这三大框架被赋予了太多神秘的色彩,似乎它们是重中之重的知识!但是对于拥有多年Java开发经验的专业技术人员来说,对于那些Java牛人来说,却对这三大框架不太感冒!难道它们不重要吗?

现在很多企业都在用这三大框架,所以很多企业也把掌握这三大框架作为招聘的必备条件。不可否认的是,也有很多大型企业没有用这三大框架,这些企业经过多年发展,自身已经有一定的技术积累,也形成了自己独特的技术框架体系。这三大框架既可以说很重要,也可以说不重要。

说重要的原因在于:这三大框架对JavaEE开发中所存在的普遍的问题,提供了优美的解决方案,它们蕴含了这个行业中最NB的开发人员的努力和想法,所以,学习这三大框架,你就可以窥探到这些处于技术巅峰的牛人们究竟对一个问题是怎么想的,通过一种什么样的设计思路去解决问题的。所以,对于你来说,你没有太多项目开发的经验,经验是什么?经验就是你知道可能会遇到哪些问题,针对哪个问题可以有哪些解决方法,在某个情景下,哪种解决方法是较好的,哪种方法不太好等等!如果你没做过什么项目,你根本就不会去意识到你可能会遇到哪些问题,而这些问题往往又是非常关键的!解决得不好,会影响到你的程序的稳定性、可扩展性等等!三大框架就给初学者提供了了解你以后可能会遇到哪些问题,以及针对这些问题的解决方案!

当你了解了这三大框架为什么是重要的,那么你也就能理解,为什么这三大框架也可以说是不重要的。如果你曾经开发过很多项目,你碰到了各种各样的问题,凭着你的技术功底,逐个击破了这些问题,在这些人眼里,三大框架(是不是还有N个框架?呵呵)都是浮云!

你属于哪一种人呢?如果你没有太多项目开发经验,那么三大框架对于你来说就是非常重要的!而且,由此你也知道了该怎么去学这三大框架。对于三大框架的学习而言,着力点在于给你展示问题,并触发你自己主动的思考,我们鼓励你提出自己的想法,也许你的想法很白痴,但那毕竟是你自己的想法,如果你不知道牛人的想法,那你怎么知道自己的想法是很白痴的呢?在这种思想的碰撞过程中,你就会逐渐提高自己!所以,三大框架学完之后,你不应该只是看到一大堆配置文件,你不应该只是看到了一些Action,一些Service,一些映射文件,你不应该只知道session.save/update/delete,你不应该只是知道struts2中有一堆interceptor,你不应该只是看到一堆jar包……

如果你只是知道拷贝一堆jar包,定义一系列配置文件之后,SSH三大框架就能够运行起来了,也可以给你干活了,那么,很悲哀的是,你仍然没有掌握三大框架的精粹!请你回答以下问题:

Struts2:

为什么每次请求都要创建一个Action对象?

ModelDriven拦截器的配置中refreshModelBeforeResult解决了什么问题?

为什么在web.xml中配置的StrutsPrepareAndExecuteFilter要过滤所有的请求?

请你给我谈谈ValueStack?

Struts2是如何实现MVC设计模式的?

Spring:

你为什么要用Spring?

请你聊一聊IOC/DI?

什么是声明式的事务管理?为什么要使用声明式的事务管理?Spring如何实现声明式的事务管理?

把spring和hibernate集成,定义事务管理特性的时候,为何要将除了添加、删除、更新操作之外的方法,即主要执行查询任务的方法定义为read-only?

Hibernate:

请你谈谈你对OR映射的理解?

很多人说Hibernate不适合大项目,性能有问题,你是如何理解的?

Hibernate为什么一定要定义一个数据库标识?

为什么Hibernate建议你的实体类实现hashCode和equals方法?

谈谈你对Hibernate实体类中的数据库标识与数据库主键之间关系的认识?

谈谈你对Hibernate关联映射与数据库外键之间关系的认识?

调用session.save()方法,hibernate一定会发出insert语句吗?谈谈你的理解

调用session.update()方法,hibernate一定会发出update语句吗?谈谈你的理解

请你聊一下以下名词、概念或用法:lazy、lazy=”extra”、inverse、fetch、fetch=”join”、fetch=”subselect”、batch-size

配置了lazy=”true”一定会实现懒加载吗?

请你谈谈Hibernate中的“N+1”问题

请你谈谈Hibernate有哪些最佳实践?

以上并非SSH中全部重点的问题,但它们能考察你能否灵活运用SSH框架!如果你能深刻理解这些问题,再配以合适的实战项目训练,你也会逐渐成为牛人!

最后是项目开发能力:

不管你是学Java还是别的技术,你的根本目的在于给客户创造价值!否则,你下大力气学习的东西,随着技术的进步和更新,很快就会过时!所以,技术的核心在于用技术创造有价值的成果!也就是说,客户需要什么,你就要用技术把客户需要的东西给他造出来!一个公司之所以要用各种福利条件极力挽留你,是因为你能够给公司带来极高的利益!那么,你有什么可以给公司利用的呢?公司最看重你的哪方面的能力呢?

做项目需要的能力很多,其中最核心最基础的就是建模能力(现在最主流的就是面向对象建模!)。什么是建模能力呢?

我给大家一个面试题:

一个保险公司的保险卡管理模块:销售人员领取保险卡信息(保险卡数量、卡号、领取日期),然后直接销售给客户,销售完毕后,将保险卡信息录入保险公司系统内部(销售人员信息、购买人信息、购买的保险卡数量、卡号等),客户登录保险公司网站激活保险卡,需要填写(保险卡卡号、激活密码、被保险人信息、受益人信息)

要求就是:如果这个模块交给你来做,你要怎么做?你要解决哪些问题?你可否画个图,给我描述一下你的想法是什么吗?

这只是一个面试题而已,因为只有简单几句话,所以我把它放到这里,让大家感受一下所谓建模要解决什么问题。而业务领域的问题实在是太多了!也许一个几十上百页的需求文档才能把某个业务领域的问题描述清楚,而你的职责就是要把它们实现出来!

某个公司要开发一个考勤管理系统,要求与现有的人力资源系统对接,你是主要的技术负责人,那么,你要做哪些工作呢?

某ERP项目要实现一个排班管理模块,交给你去完成,你如何去完成呢?

不要抱怨项目经理给你的信息太少(只有几句话),不要抱怨客户没有描述清楚他们的需求……你的价值就在于理顺所有的问题tb,用各种手段获得你想要的信息,按照一定的思路汇总,并在特定的时间里逐个解决它!

你应该意识到学Java不是一个坦克大战、一个网络飞车、一个CMS、一个DRP、一个OA那么简单,你不要沉迷于那些技术细节(虽然也是有必要的,但不要转牛角尖),不要满足于实现了CRUD式的项目需求(虽然这是基础中的基础),在你的前方,永远有一个目标在那里,需要你去努力追赶! 

今后你将面对更加繁杂的需求,你学习项目的唯一目的,就是:学习如何将需求转化为实现,如何对需求进行分析,如何建立概念模型,如何理顺各种概念之间的关系,如何进行设计,如何选择合适的技术来实现你的设计方案,如何对你的实现进行测试,如何解决你所遇到的形形色色的问题(性能、需求变更等)。当你真正到公司里面从事了几年开发之后,你就会同意我的说法!

利用Java找工作,需要的就是项目经验,项目经验就是理解项目开发的基本过程,理解项目的分析方法,理解项目的设计思路,理解项目的实现技巧,理解项目的测试方法,理解项目中各种问题的解决方案!!!

所以,你该清楚你的目标了!

Backtrack等基于Ubuntu的衍生Linux版本安装Java与Eclipse进行程序开发的步骤

Ubuntu 在安装时,如同大部分 Linux 发行版一样,都会同时安装 GNU 版本的 Java。这个 Java 的实用程度太低,尤其对于开发人员来说,是没有太多用处的。在 Ubuntu 下,安装 SUN Java 是一件很容易的事情。第一步:

sudo apt-get install sun-java6-jdk

安装完毕之后,选择默认 java:

sudo update-alternatives –config java

输入 有包含 "sun" 的行的前面的数字。如上面显示,则输入2,然后回车确定。

然后配置环境变量:

sudo vim /etc/environment

在其中添加如下两行:

CLASSPATH=.:/usr/lib/jvm/java-6-sun/lib

JAVA_HOME=/usr/lib/jvm/java-6-sun

保存退出。

sudo gedit /etc/jvm

将文件中的

/usr/lib/jvm/java-6-sun

这一行填入到配置块的顶部

安装浏览器的JAVA Plugin(可选):

sudo apt-get install sun-java6-plugin

之后安装配置 Eclipse。安装很简单:

sudo apt-get install eclipse

虽 然已经这时新安装的 java 已经成为系统默认的 jvm,但是 Eclipse 并不会用 update-alternative 设置的 jvm 来启动自身,而使用的是以前的 GNU Java。GNU Java 是 1.4.2 的实现,而且在性能上远不如 SUN 的实现。为了让 Eclipse 利用 SUN Java 启动,我们还需要继续配置。首先将 SUN Java 完完全全的设置为系统的默认 JDK:

sudo update-java-alternatives -s java-6-sun

然后编辑 JVM 配置文件:

sudo vim /etc/jvm

将文件中的

/usr/lib/jvm/java-6-sun

这一行填入到配置块的顶部。由于 Eclipse 会忽略 Ubuntu 的通用 Java 设置(貌似一个 bug),我们需要继续编辑 Eclipse 的 java_home 文件:

sudo vim /etc/eclipse/java_home

如同上面一样,将

/usr/lib/jvm/java-6-sun

这一行填入到文件的顶部。

手动安装:

进入下载目录:

cd /home/kubuntu/Downloads

下载软件Eclipse3.2RC7:

wget http://ftp-stud.fht-esslingen.de/pub/Mirrors/eclipse/eclipse/downloads/drops/S-3.2RC7-200606021317/eclipse-SDK-3.2RC7-linux-gtk.tar.gz

进入软件安装目录:

cd /opt

创建软件Eclipse安装目录:

mkdir ee-eclipse

进入软件Eclipse安装目录:

cd ee-eclipse

创建软件Eclipse3.2RC7安装目录:

mkdir eclipse3.2RC7

复制软件Eclipse3.2RC7到当前目录:

cp /home/kubuntu/Downloads/eclipse-SDK-3.2RC7-linux-gtk.tar.gz .

解压软件Eclipse3.2RC7:

tar zxvf eclipse-SDK-3.2RC7-linux-gtk.tar.gz

删除压缩软件包:

rm eclipse-SDK-3.2RC7-linux-gtk.tar.gz

给予文件eclipse执行权:

chown -R root:kubuntu eclipse/eclipse

创建桌面连接:

进 入Desktop -> 右击鼠标 -> Create New -> Link too Application… -> Tab "Application" -> Command -> ‘/opt/ee-eclipse/eclipse3.2RC7/eclipse/eclipse’ -data /home/kubuntu/ews-eclipse3.2RC7 -> Tab "General -> "Icon" -> /opt/ee-eclipse/eclipse3.2RC7/eclipse/icon.xpm -> OK

相关资料:

http://www.docuverse.com/blog/donpark/EntryViewPage.aspx?guid=f171bafc-abce-4d2e-a18b-3aba4ad32c52

http://homes.esat.kuleuven.be/~decockd/wiki/bin/view.cgi/Main/ProgrammingEnvironmentsTOC

所有的安装配置完成之后,Ubuntu 的 Java 开发平台就基本完备了。

Codename One-了断IOS无法运行Java程序的终结者

传统观点认为,我们无法在Xcode里面用Java开发iOS应用,同理在Mac上也是不可能的。但是Codename One,它向传统观点发出了挑战,并向世人证明:在Geek的词典里,“不可能”和“迟早变成可能”是同义词。

Java是Sun公司为这个世界贡献的一块瑰宝,看看手机里有多少Java程序吧!但是乔布斯在iOS上否决了Java,于是Java的跨平台能力在苹果面前被封印了。几年过去了,不甘心的开发者终于有所突破,前Sun员工开发了Codename One,开发者可以利用此SDK开发任何平台下的本地应用,包括iOS。

可以说最近在开发语言方面,开发者至少得到了两个好消息:Haxe支持编译到其他语言包括Java和C++;Codename One支持用Java开发跨平台应用,包括iOS和WP。从有一群人在让这个世界变的更加混乱,但从另一个角度来看,却同时也在使这个世界变的更加美好。