JSP Servlet基础知识(一)

系统 1533 0

下一页»

1.     HTML 是静态的, JSP 是动态的,交互式的,而且可由用户定制。

 

2.     服务器: 可能是物理主机(硬件),也可能是 Web 服务器应用(软件)。

客户: 指人类用户,或浏览器应用。

Web 客户允许用户请求服务器上的某个资源,并且向用户显示请求结果。

 

3.     服务器和客户的通信

服务器和客户之间对话的共同的语言是 HTTP

服务器使用 HTTP 向客户发送信息。

4.     HTTP

请求: HTTP 方法( Get Post ),要访问的页面,表单参数。

响应:状态码,内容类型(文本、图片、 HTML 等),内容(具体的 HTML 、图片等)。

 

5.     HTTP 请求: Get 请求和 Post 请求

Get 请求: 资源的路径 URL 以及所有参数都会包括在 请求行 中。

    请求行:   GET /select/selectBeer.jsp?color=dark&taste=malty HTTP/1.1

    请求首部: Host: www.wickedlysmart.com

             User-Agent: Mozilla/5.0 ……

             Accept: text/html application/xml application./xhtml+xml

text/html;q=0.9

             Accept-Language: en-us en;q=0.5

             Accept-Encoding: gizp deflate

               Accept-Charset: ISO-8859-1 utf;q=0.7 *;q=0.7

              Keep-Alive:300

             Connection: keep-alive

    GET 请求,没有体,参数只能放在请求行中,并且会显示在浏览器的输入地址中,不够安全。

POST 请求: 又称为“消息体”或“有效负载”,放在消息体中,长度不受限制。

    请求行: POST /advisor/selectBeer.do HTTP/1.1

     请求首部:同上

     消息体:(空行) color=dark & taste=malty

    简单的超链接默认是 GET 方法,如: <a href=”http://www.baidu.com”>link</a>

    Form 表单默认也是 GET 方法。

    GET HEAD PUT 是幂等的 ( 注: GET doGet() 不同, GET 方法是 HTTP 的, doGet() Servlet ) POST 不是幂等的。

 

6.     HTTP 响应

包括响应首部和体

首部告诉浏览器使用的协议,请求是否成功,以及体中放入内容是什么类型

    HTTP/1.1 200 OK

    Set-Cookie: jsessionID=adfiifeeni23499v99wernnwerr; Pat=/testEL

    Content-Type: text/html (内容类型响应首部的值称为 MIME 类型, MIME 类型告诉浏览器要接受的数据是什么类型,其值与 HTTP 请求首部中的 Accept 所列的值相关)

    Content-Length:397

    Date: Wed 19 Nov 2003 03:25:40 GMT

    Server: Apache-Coyote/1.1

    Connection: close

体中包含了让浏览器显示的具体内容:

    (空行)

      <html> …… </html>

 

7.     URL(Uniform Resource Locators)

http://www.smart.com:80/beeradvice/select/beer1.html

协议         服务器      端口           路径           资源

FTP 的端口是 31 Telnet 23 SMTP 25 Time 37 POP3 110 HTTPS 443

 

8.     Web 服务器不做的两件事情

a)       动态内容。 Web 服务器应用只提供静态页面,动态内容由 Web 服务器辅助应用( CGI )来完成。

b)       在服务器上保存数据。 Web 服务器把这些功能转给辅助应用进行处理。

 

9.     Web 容器

JSP Servlet基础知识(一)

 

Web 服务器 (Apache) 得到一个指向 servlet 的请求,服务器不是把这个请求直接交给 servlet 本身,而是交给 Web 容器 (Tomcat) ,由 Web 容器调用 servlet

Web 容器管理和运行 servlet ,容器知道自己与 Web 服务器之间的协议, Web 容器控制者 servlet 的生命周期,容器会自动地为它接收每个 servlet 请求并创建一个新的线程, Web 容器负责把 JSP 代发翻译成真正的 Java 代码。

利用配置文件( web.xml )将 servlet 部署到容器

一个完全兼容的 J2EE 应用服务器必须有一个 Web 容器和一个 EJB 容器

JSP Servlet基础知识(一)

 

Tomcat 是一个 Web 容器,而不是一个完整的 j2ee 应用服务器,因为 Tomcat 没有 EJB 容器。

 

 

 

10.     JSP-Servlet 执行流程

    1) 浏览器把请求数据发送给容器

    2) 容器根据 URL 找到正确的 Servlet ,并把请求传递给这个 Servlet

    3) Servlet 调用辅助应用寻求帮助

    4) 这个辅助应用返回一个回答, Servlet 把这个回答增加到请求对象

    5) Servlet 把请求转发给 JSP

    6) JSP 从请求对象得到回答

    7) JSP 为容器生成一个页面

    8) 容器把这个页面返回给客户

 

 

JSP Servlet基础知识(一)

 

 

11.     Servlet 的生命周期

 

JSP Servlet基础知识(一)

12.     Servlet 的属性和参数

a)       属性

有三种类型的属性,应用上下文 (ServletContext) 、请求 (HttpRequest) 和会话 (HttpSession)

设置方法: setAttribute(String name,Object value)

获取方法: getAttribute(String name), 返回类型是 Object

上下文 (ServletContext) 属性 不是线程安全的,因为每个 Servlet 都可以访问。让上下文属性线程安全的做法:

同步服务器方法 ( 即对 doGet() doPost() 方法添加 synchronized)

同步服务器方法意味着 servlet 中一次只能运行一个线程,但是并不能阻止其它 servlet JSP 访问这个属性。

同步上下文 ( synchronized(getServletContext()))

synchronized (getServletContext()){

               getServletContext().setAttribute( "foo" , "22" );

               getServletContext().setAttribute( "bar" , "42" );

}

会话属性: 通常,一个客户同时只有一个请求,就算多个 servlet 能在单独的线程中访问会话属性,每个线程都是单独的请求,所以,这时会话属性是线程安全的。但是一个用户同时有多个请求时 ( 用户同时打开多个浏览器去访问 ) ,会话属性是非线程安全的,通过同步 HttpSession 来达到线程安全。代码如下:

           HttpSession session=request.getSession();

           synchronized (session){

               session.setAttribute( "foo" , "22" );

               session.setAttribute( "bar" , "42" );

    }

b)       参数

应用上下文初始化参数、请求参数、 servlet 初始化参数

设置方法: servlet 初始化参数只能在 DD 中设置

获取方法: getInitParameter(String name)

 

13.     Servlet 接受提交的参数

a)       接受单个参数

String username=request.getParameter(“username”);

b)       接受多个参数

String [] parameters=request.getParameterValues(“sizes”);//sizes 可以看做是表单中的复选框,如:

            < form action = ”**.do” >

< intput type = checkbox name = sizes value = ”1” > 1

< intput type = checkbox name = sizes value = ”2” > 2

< intput type = checkbox name = sizes value = ”3” > 3

< input type = ”submit” >

</ from >

 

14.     ServletConfig ServletContext

a)       ServletConfig 对象

每个 servlet 都有一个 ServletConfig 对象,用于向 servlet 传递部署信息。

servlet 初始化之前不能使用 servlet 初始化参数。

ServletConfig 构建过程如下:

1)       容器读取当前 servlet DD(web.xml) ,包括 servlet 初始化参数 (<init-param>)

2)       容器为这个 servlet 创建 (new) 一个新的 ServletConfig 实例

3)       容器为这个 servlet 初始化参数创建一个 String / 值对

4)       容器向 ServletConfig 提供名 / 值初始化参数的引用

5)       容器创建 (new)serlvet 类的实例

6)       容器调用 servlet init() 方法,传入 ServletConfig 的引用

容器初始化一个 servlet 时,会为这个 servlet 创建一个唯一的 ServletConfig ,容器从 DD 中读出 servlet 初始化参数,并把这些参数交给 ServletConfig ,然后把 ServletConfig 传递给 servlet init() 方法。

初始化参数:在 web.xml 配置文件中的 <servlet> 标签中

                   < init-param >

                      < param-name > adminEmail </ param-name >

                      < param-value > zzq_rj@163.com </ param-value >

        </ init-param >

       servlet 中调用: getServletConfig().getInitParameter(“adminEmail”);

b)       ServletContext 对象

每个 Web 应用才有一个 ServletContext ,用于访问 Web 应用参数。 Web 应用中的各个 servlet JSP 都能访问 ServletContext

初始化参数:在 web.xml 配置文件中的 <web-app> 标签中 <servlet> 标签外

                  < context-param >

                      < param-name > contextname1 </ param-name >

                      < param-value > contextvalue1 </ param-value >

            </ context-param >

servlet 中调用: getServletContext().getInitParameter(“adminEmail”);

           或者   ServletContext context=getServletContext();

                context.getInitParameter(“adminEmail”);

JSP 中调用:

 

15.     使用响应

通常,使用响应只是向客户发回数据,会调用两个方法: setContentType() getWriter() 。当然,还可以使用响应设置其它首部、发送错误以及增加 cookie

response.setContentType(“application/jar”);

完成 I/O

ServletContext ctx=getServletContext();

InputStream is=ctx.getResourceAsStream(“/book.jar”);// 必须以“ / ”开头,表示 Web 应用的根。

两种输出方式

字符形式: PrintWriter writer=response.getWriter();

         writer.println(“some text and HTML”);

字节流形式: ServletOutputStream out=response.getOutputStream();

             out.write(aByteArray);

下一页>>  

JSP Servlet基础知识(一)


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论