分享一个老掉牙的学校课程项目,基于Jsp+Servlet+JavaBean的个人信息管理系统

Monday,October the twenty-fourth,Twenty sixteen

(Mon.,Oct. 24,2016)

项目使用到的工具有Eclipse、Tomcat、Mysql

学习Jsp,首先要明白Jsp的原理和运作过程,参考:http://blog.csdn.net/hanxuemin12345/article/details/23831645

给一篇个人觉得写得较为严谨的J2EE相关的见解:http://blog.sina.com.cn/s/blog_93b45b0f01019p1t.html

(为了表述清晰具有严谨性,查阅了有关Web容器、Web服务器、Jsp容器、Servlet容器,网络上众说纷纭,越了解,搞得自己越迷茫)

这里简单总结一下Jsp运作过程:

客户端--[发出请求(request),请求访问JSP]-->Tomcat容器--[将.jsp翻译成Servlet源代码.java,经编译成.class,加载到内存执行,响应结果(response)]-->客户端

(个人认为,客户端收到的响应结果,实质上是由JSP转化成的Servlet中out.write输出的HTML代码)


个人觉得这个项目有几个知识点需要注意:

form中,属性methodgetpost区别

在使用表单提交数据到服务器的时候有两张方式可共选择,一个是post一个是get(默认)。可在

中的method属性中指定提交的方式。

在数据传输过程中分别对应了HTTP协议中的GET和POST方法,二者主要区别如下:

1、Get是用来从服务器上获得数据,而Post是用来向服务器上传递数据。

2、Get将表单中数据的按照variable=value的形式,添加到action所指向的URL后面,并且两者使用“?”连接,而各个变量之间使用“&”连接;Post是将表单中的数据放在form的数据体中,按照变量和值相对应的方式,(放在HTML表头header中)传递到action所指向URL。

3、Get传输的数据量小,这主要是因为受URL长度限制;而Post可以传输大量的数据,所以在上传文件只能使用Post。

4、Get限制Form表单的数据集的值必须为ASCII字符;而Post支持整个ISO10646字符集

(使用Post传输的数据,可以通过设置编码的方式正确转化中文;而Get传输的数据却没有变化。在以后的程序中,我们一定要注意这一点。

Get方法通过URL 请求来传递用户的数据,将表单内各字段名称与其内容,以成对的字符串连接,置于action 属性所指程序的url 后,如:http://www.mdm.com/test.asp?name=asd&password=sad,数据都会直接显示在 url 上,就像用户点击一个链接一样;Post 方法通过HTTPpost 机制,将表单内各字段名称与其内容放置在HTML 表头(header)内一起传送给服务器端交由action 属性所指的程序处理,该程序会通过标准输入(stdin)方式,将表单的数据读出并加以处理)


sendRedirectforward原理及区别

1forward(转发请求)

① 浏览器访问Servlet1。

② Servlet1想让Servlet2对客户端的请求进行响应,于是调用forward()方法,将请求转发给Servlet2进行处理。

③ Servlet2对请求做出响应。

2sendRedirect(重定向)

① 浏览器访问Servlet1。

② Servlet1想让Servlet2为客户端服务。

③ Servlet1调用sendRedirect()方法,将客户端的请求重定向到Servlet2。

④ 浏览器访问Servlet2。

⑤ Servlet2对客户端的请求做出响应。

两者的区别如下: 
1、请求次数不同,这是最本质的区别。在forward方式下,在执行当前JSP对象或者Servlet对象的过程中去调用目标文件对应的对象,相当于方法调用,把request和response对象作为参数传递到目标文件对应的对象,当前文件和目标文件的执行是在用户发送的一次请求中完成的。在redirect方式下,用于首先请求了当前文件,当前文件把目标文件的地址返回给了客户端,客户端再次发送请求,请求目标文件,实际上是发送了两次请求。 

2、传值方式不同。在forward方式下,当前文件和目标文件属于同一次请求,共享request对象,所以可以使用request对象传值。在redirect方式下,当前文件和目标文件属于不同的请求,每次请求会单独创建request和response对象,这样就不能使用request对象来传值。在MVC模式下,通常在控制器中调用模型得到数据,然后保存到request中,然后forward到目标文件,目标文件从request中获取需要的信息。如果使用sendRedirect方式在控制器和视图之间传递信息,需要使用在目标文件之后加上“?名字=值”的方式传递。

3、客户端在地址栏中看到的地址不一样,对于forward,在地址栏中看到的是第1个文件的名字,对于sendRedirect,在地址栏中看到的是第2个文件的地址。有时候会影响目标文件中的相对路径,例如当前文件是aa文件夹中的a.jsp,目标文件是bb文件夹中的b.jsp,在b.jsp中要访问一个图片,使用相对路径,直接写face.jpg,这个文件与b.jsp放在一起。如果采用forward方式,地址栏中是a.jsp,这样系统会在aa文件夹中找face.jpg,这时候就会出错。


关于Session的机制

服务器在接收到浏览器的第一次请求后,会分配一个 session id 编号(如果启用session的话)。以 cookie的形式 写回到浏览器端。
以后浏览器的每次请求,都会携带这个叫做“ JSESSIONID”的 cookie,里面的值是一串id号。 服务器端接受到这个cookie后, 解析,然后从内存中 取出 session 对象
所以不管你是 重定向还是 请求转发,实际上都是根据这个 JSESSIONID ,才能取得 session 对象的。根据规范。这个保存JSESSIONID的cookie将在用户 关闭浏览器时过期失效
此后的访问将作为新的请求。分配一个新的sessionID和 session 对象。之前的session对象将在服务器设置的时间段(如服务器设置30分钟没有对应的请求,session将过期)后被回收。


ps:本人上学期上Jsp课程时基本处于神游状态,最近用了几天时间,分析这个项目,基本上将Jsp的知识点捡了回来

源码下载:http://pan.baidu.com/s/1gfv6VVt



你可能感兴趣的:(Jsp,Java)