`
whp0731
  • 浏览: 171072 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

java web 编程注意点

阅读更多

1、get和post的区别
表面上区别:get地址栏会显示参数内容。Servlet中doGet来处理。
本质区别:

http协议是基于(tcp的建立连接后),
http1.1可持续连接。(当过一段时间不再请求,会自动关闭)
http1.1可流水线请求。

http请求由三部分组成:请求行、消息报头、请求正文。

若上面用get方法的话,底层通过以下方式(表单直接附着在请求的资源的后面)
GET /test.html ?username=hello&word=123456 HTTP/1.1 (CRLF)

若通过POST,底层通过以下方式:
POST/login.jsp HTTP/1.1(CRLF)
Accept :Image/gif(CRLF)(...)
Host:www.sample.com(CRLF)
...
Cache-Control:no=cache(CRLF)
(CRLF)
username=hello&word=123456
所以它的表单信息附着在请求头最后的
的下一行的下一行。

http相应由三部分组成:状态行、消息报头、相应正文。

当你发生一个请求,开始行为请求行,当你发生一个相应,开始行为状态行

连接sohu
cmd输入命令行 telnet www.sohu.com 80
再将以下两命令复制到cmd命令行,两次回车
HEAD /index.html HTTP/1.1
Host: www.sohu.com

访问本地的一个测试的页面。
GET /web/result.jsp?username=hello&word=123456 HTTP/1.1
Host: localhost

2、关于HttpServlet中的Service,doGet,doPost方法的关系。
首先客户端提交一个请求,该请求首先到达了Service,然后由Service决定调用哪个do方法。

3、forward与redirect的区别
请求重定向request.sendRedirect(*.jsp)(地址栏改变,而且需要获得值丢失)(总体2个请求,2个响应)

请求转发(地址栏不变,对于客户端不知道后端处理过程)(总体一个请求,一个响应)Crequest.getRequestDispath(“/*.jsp”).forward(request,response)

4、关于servlet的生命周期
初始化阶段(init方法被调用),某一个客户端第一次访问该servlet,那么该servlet将被实例化,紧接着init方法被调用,注意:该init方法在servlet的整个生命周期仅执行一次。

服务阶段:(service方法被调用),客户端每发来一次请求,该service方法都要被调用一次。

销毁阶段:(tomcat关闭时,destroy方法被调用。)

5、关于初始化有两种方式:
1)如上,某一个客户端访问时。
2)可以在web.xml文件中,配置servlet,让服务器启动时就去初始化。
<load-on-startup>1</load-on-startup>
中间整数表示优先,1最先。

6、servlet的多线程

servlet默认是支持多线程的,而且servlet是单实例的(为了效率高,不用每次去生产实例)。(从上面的生命周期上仅实例化了一次也可以看出。)
所以当一个servlet中有一个成员变量name时,如果通过
http://localhost:8080/web/servletTest?name=zhangsan
http://localhost:8080/web/servletTest?name=lishi
他们有可能同时返回lishi

避免方法:将成员变量改成局部变量,如将变量放在doGet中,这样两个线程都有各自的name变量。可以参见我的另一篇博客:
http://whp0731.iteye.com/admin/blogs/358583


以上问题在struts1.0中也是存在的,如果我们一个action,也是要把变量放在excute里面,不要直接放在自己的action下,来避免上面的线程安全问题。
Struts2.0则没有这个问题,因为它对每次请求生产一个实例。

7、getParameter与getAttribute区别
getParameter()描述了服务器与客户端的关系。
getAttribute,在服务器中进行对象保存后取出的操作。返回一个对象。
setAttribute,与之对应。

getParameter,服务器从客户端得到信息,因此没有与之应的setParameter方法。

getParameter返回一个字符串

8、jsp--->servlet,而且只转化一次(单实例),所以第一次访问较慢。
<% ! int a=0;>会在servlet中转化为类的成员变量,
<%  int a=0;>会在servlet中转化为方法的局部变量。

9、session
session会有一个对应一个会话cookie(又叫session cookie)。是保持在浏览器进程里的。
所以你客户端如果关闭浏览器,客户端失去和服务sessionID联系,但是服务器端的sessionID还是存在的,若服务器端如tomcat的session生命设置30分钟,那么30分钟后才会自己销毁

还有一种方法,若会话cookie被用户禁用,系统会通过url重写来跟踪session。

http是无状态的,所以需要session,cookie来帮忙跟踪,才能更好实现网上购物等。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics