Servlet学习笔记

   [Servlet]

●  Servlet(Java服务器小程序),是用Java编写的服务器端程序。可以看成是用Java编写的CGI,但是功能和性能比CGI强多了。

●  为了简化开发,我们编写的Servlet一般直接继承自HttpServlet,HttpServlet类封装了编写Http协议Servlet的大部分功能。

    HttpServlet类继承自javax.servlet.GenericServlet,间接实现了Servlet, ServletConfig 接口。

    A subclass of HttpServlet must override at least one method, usually one of these:

 

    * doGet, if the servlet supports HTTP GET requests 
    * doPost, for HTTP POST requests 
    * doPut, for HTTP PUT requests 
    * doDelete, for HTTP DELETE requests 
    * init and destroy, to manage resources that are held for the life of the servlet 
    * getServletInfo, which the servlet uses to provide information about itself

 

●  HTTP 1.1 协议支持7种请求方法:GETPOStHEADOPTIONSPUTDELETETRACE。在Internet应用中,最常用的请求方法是GETPOST

●  GET方法是通过URL将数据传送给服务器端,可以直接在url中注明参数,也可以通过表单的方式<form action="xxx" method="get">。存在url的明文传送和数据大小限制的问题。这是默认调用的方式。

●  POST方法则可以隐藏发送给服务器端的数据,而不是url的明文传送。所以安全性好些,适合发送大量数据。它是通过表单的方式<form action="xxx" method="post">来发送参数。

●  GET方法、POST方法都是通过request.getParameter("xxx")来获取对应参数数据。

●  Servlet规范规定,所有的Servlet都必须在Web配置文件web.xml中声明。部署Servlet时,必须在相应web项目的web.xml文件中指定这个servlet的名字和类,同时做servlet的映射。

●  Servlet规范规定,在WEB-INF目录下的内容是私有的,对Web客户端来说不可访问,当然Web应用本身则可以完全访问。

●  Servlet规范规定,首先加载WEB-INF/classes目录中的资源,然后才是WEB-INF/lib目录。

●  有关Servlet的官方DTD描述:(DTD可以看做是标记语言的语言文件,它是一套定义XML标记如何使用的规则。)

    (摘自 http://java.sun.com/dtd/web-app_2_3.dtd )

 

<!--

The servlet element contains the declarative data of a servlet. If a jsp-file is specified and the load-on-startup element is present, then the JSP should be precompiled and loaded.

Used in: web-app

-->

<!ELEMENT servlet (icon?, servlet-name, display-name?, description?,
(servlet-class|jsp-file), init-param*, load-on-startup?, run-as?, security-role-ref*)>

<!--

The servlet-class element contains the fully qualified class name of the servlet.

Used in: servlet

-->

<!ELEMENT servlet-class (#PCDATA)>

<!--

The servlet-mapping element defines a mapping between a servlet and a url pattern

Used in: web-app

-->

<!ELEMENT servlet-mapping (servlet-name, url-pattern)>

<!--

The servlet-name element contains the canonical name of the servlet. Each servlet name is unique within the web application.

Used in: filter-mapping, servlet, servlet-mapping

-->

<!ELEMENT servlet-name (#PCDATA)>

 

●  所有的JSP都必须编译成Servlet,并且在Servlet容器中执行。但Servlet必须手动编译成类,而修改JSP时只要修改它的源程序,容器会对发生改变的JSp进行自动编译。

    JSP会被web服务器编译成Servlet(tomcat中生成的.java文件和.class文件是存放在 %CATALINA_HOME%\work\Catalina目录下)。如果JSP页面中没有使用Page指令特别指定method属性,则JSP中所有的Scriptlet会被合并包含在该ServletService方法(_jspService()方法)中。所以在Scriptlet中可以包含任何合法的java注释,可以调用其他类(只需在page指令中import);任一小段Scriptlet中定义的变量或方法都可以再另一小段Scriptlet中调用。

●  JSP可以把显示和内容分离,实现的方法就是借助JavaBean。重新编译JavaBean时,tmd还得重启Tomcat服务器?

●  一般的JSP项目,可以采用JSP+Servlet+JavaBean的模式,此模式遵循视图控制器(MVC)模式,在此模型中,javaBean作为模型的角色,封装数据;Servlet作为控制器,处理业务逻辑;最后由JSP进行显示。

 

●  Java Servlet API中有几个比较重要的类,它们决定了Web应用的请求/响应方式及各种共享数据的存放地点

    * HttpServletRequest,Servlet组件从HttpServletRequest对象中读取用户的请求数据;此外HttpServletRequest可以存放request范围内的共享数据。
    * HttpServletResponse
,用于生成Http响应结果。 
    * HttpSession
,存放session范围的共享数据 

    * ServletContext
,存放application范围的共享数据。

●  Servlet类使用javax.servlet.RequestDispatcher.forward()方法来转发它所收到的Http请求。


● 
清楚 session,attribute,cookies,querystring等的区别。
   A:
客户端一关闭,session就失效了。
● 
清楚 request,response的作用,构成元素。
   A: request
header,response也有header

 

●  以下是《More Servlet and JSP》的读书笔记。

1. HTML文档的 DOCTYPE行的好处是告诉HTML验证程序使用的是何种版本的HTML,以便验证程序知道依据何种规范检查HTML文档。
2. Servlet
service方法检查HTTP请求类型(GET,POST,PUT,DELETE),并适当地调用doGet,doPost等方法。其他方法(put,delete)是有客户机产生的。
3.
如果希望你的servlet阻止多线程地访问,可以使servlet继承自SingleThreadModel接口。
  
jsp中,则可以通过<@ page isThreadSafe>属性来指定。
4. HTTP
的请求头是直接由浏览器设置并跟在开始的GETPOST请求行之后立即发送的。
5. HTTPSession
对象位于服务器上,它们只是通过某种后台机制,如cookieURL重写与客户机自动关联。
6.
什么时候需要synchronized代码块。线程跟进程的区别?
7. ServletContext
是全部Servlet共享的上下文,

   ServletConfig
是全部Servlet共享的配置对象(web.xml信息)
  
PageContext仅仅是单个JSP文件的上下文;Servlet是没有PageContext对象的。

8. servlet
可以发送请求到同一服务器的任意位置。
9.
网页中的image,css等如果使用了相对路径,则最好是相对于服务器的根,而不是相对于目的页的实际位置。
  
否则程序如果使用了servlet.forward(),则可能出现路径错误的bug.

 

10. Web应用的简单验证包括用户再HTML表单或对话框中输入用户名和口令,更强的验证包括使用由客户机发送到服务器的X509证书。
11.
为防范攻击者在网络数据传输中窃取数据;此过程涉及使用SSL(Secure Sockets Layer安全套接层),对浏览器及服务器之间的通信进行加密。

 

12. 利用声明性的安全性(例如在web.xml中指定),就不用单个servletjsp去处理安全方面的代码。而可以在web.xml中声明某些
URL
需要保护,某些URL只能利用SSL来访问。

 

13. ServletRequestgetScheme()方法对常规请求返回"http",SSL请求返回"https"。同时,isSecure()方法对常规请求返回false,
SSL
请求返回true

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值