MyException - 我的异常网
当前位置:我的异常网» JavaScript » 第二章.JSP/Servlet及有关技术详解

第二章.JSP/Servlet及有关技术详解

www.MyException.Cn  网友分享于:2013-09-19  浏览:0次
第二章.JSP/Servlet及相关技术详解

JSP的4种基本语法:

  1.JSP注释:

    <%-- JSP注释部分 --%>

  2.JSP声明:

    <%! //声明一个整型变量

      public int count;

      //声明一个方法

      public String info(){

        return "hello";

      }

    %>

  3.输出JSP表达式:

    <%=count++%>

    这句话代替了Java中的out.print(count++);但是注意输出表达式后面不能有分号。

  4.JSP脚本:

 1 <%@ page contentType="text/html; charset=GBK" language="java" errorPage="" %>
 2 <html>
 3 <head>
 4     <title>欢迎</title>
 5 </head>
 6 <body>
 7 <table bgcolor="#9999dd" border="1" width="300px">
 8 <%
 9 for(int i = 0; i < 10; i++){
10 %>
11 <tr>
12     <td>循环值:</td>
13     <td><%=i%></td>
14     </tr>
15 <%
16 }
17 %>
18 </body>
19 </html>
View Code

JSP的3个编译指令:(这里只讲两个)

  1.page指令:位于JSP页面的顶端,一个JSP页面可以是用多条page指令。

  page语法格式:<%@page  contentType="text/html; charset=GBK" language="java" ... %>

contentType属性参考网页:http://developer.51cto.com/art/201106/270666.htm

  2.include指令:可以将一个外部文件嵌入到当前JSP文件中,同时解析这个页面中的JSP语句。

    include既可以包含静态的文本,也可以包含动态的JSP页面。静态的include编译指令会将被包含的页面加入本页面,融合成一个页面,因此被包含页面不需要是一个完整

     页面。

    静态include格式:<%@include file="relativeURLSpec"%>

JSP的7个动作指令:

  1.forward指令:用于将页面响应转发到另外的页面。既可以转发到静态的HTML页面,也可以转发到动态的JSP页面,或者转发到容器中的Servlet.

  2.include动态指令:用于包含某页面,被包含的页面不会导入包含页面,仅仅将被包含页面的body内容插入本页面。

  3.useBean指令:用于在JSP页面初始化一个Java实例

  4.setProperty指令:用于为JavaBean实例的属性设置值

  5.getProperty指令:用于输出JavaBean实例的属性

  若多个JSP页面需要重复使用某段代码,则可以把这段代码定义成Java类的方法,然后让多个JSP页面调用该方法,这样可以代码复用。

  6.plugin指令:主要用于下载服务器端的JavaBean或Applet到客户端执行。由于程序在客户端执行,所以客户端必须安装虚拟机

  7.param指令:用于设置参数值,该指令不能单独使用,可以与jsp:include、jsp:forward、jsp:plugin三个指令结合使用。

JSP脚本中的9个内置对象:

  这9个内置对象都是Servlet API接口的实例,只是JSP规范对它们进行了默认初始化(有JSP页面对应Servlet的_jspService()方法来创建这些实例)。即它们已经是对象,可直接

   使用。

  1.application:javax.servlet.ServletContext的实例,这个实例代表JSP所属的Web应用本身,可用于JSP页面,或者Servlet之间交换信息。

  2.config:javax.servlet.ServletConfig的实例,该实例代表该JSP的配置信息。

  3.exception:java.lang.Throwable的实例,用来代表其他页面中的异常和错误。只有当页面是错误处理页面,即编译指令page的isErrorPage属性为true时,该对象才可以使用

  4.out:javax.servlet.jsp.JspWriter的实例,该实例代表JSP页面的输出流,用于输出内容,形成HTML页面。

  5.page:代表该页面本身,也就是Servlet中的this,其类型就是生成的Servlet类,能用page的地方就可用this。

  6.pageContext:javax.servlet.jsp.PageContext的实例,该对象代表JSP页面上下文使用该对象可以访问页面中的共享数据。

  7.request:javax.servlet.http.HttpServletRequest的实例,该对象封装了一次请求,客户端的请求参数都被封装在该对象里,获取客户端请求参数必须使用该对象。

  8.response:javax.servlet.http.HttpSerletResponse的实例,代表服务器对客户端的响应。通常很少使用该对象直接响应,而是使用out对象,除非需要生成非字符响应。

    response对象常用于重定向。

  9.session:javax.servlet.http.HttpSession的实例,该对象代表一次会话。当客户端浏览器和站点建立连接时,会话开始;当客户端关闭浏览器时,会话结束。

Servlet介绍:

  JSP的本质就是Servlet,开发者把编写好的JSP页面部署在Web容器中之后,Web容器会将JSP编译成对应的Servlet。

  直接使用Servlet坏处:Servlet的开发效率非常低,特别是当使用Servlet生成表现层页面时,页面中的所有HTML标签,都采用Servlet的输出流来输出,极其繁琐。

  自MVC规范出现后,Servlet的责任开始明确下来,仅作为控制器使用,不在需要生成页面标签,也不再作为视图层角色使用。

Servlet的开发:

  Servlet被称为服务器端小程序,是运行在服务器端的程序,用于处理及响应客户端的请求。

  Servlet是个特殊的java类,继承自HTTPServlet。

  Servlet提供不同的方法用于响应客户端请求:

    1.doGet:响应客户端的GET请求

    2.doPost:响应客户端POST请求

    3.doPut:响应客户端PUT请求

    4.doDelete:响应客户端DELETE请求

  客户端的请求通常只有GET和POST两种,Servlet为了响应这两种请求,必须重写doGet()和doPost()两个方法。

  大部分时候Servlet对于所有请求的响应都是完全一样的。此时可以采用重写service(HttpServletRequest request, HttpServletResponse response)方法来代替上面的几个方法,

   即可响应客户端的所有请求。

  不用为Servlet类编写构造器,若要对Servlet执行初始化操作,应将初始化操作放在Servlet的init()方法中定义。若重写init(ServletConfig config)方法,则应该在重写该方法的

   第一行调用super.init(config)。这样该方法将调用HTTPServlet的init方法。

 1 package lee;
 2 
 3 import javax.servlet.*;
 4 import javax.servlet.http.*;
 5 import javax.servlet.annotation.*;
 6 
 7 import java.io.*;
 8 
 9 // Servlet必须继承HttpServlet类
10 @WebServlet(name="firstServlet"
11     , urlPatterns={"/firstServlet"})
12 public class FirstServlet extends HttpServlet
13 {
14     // 客户端的响应方法,使用该方法可以响应客户端所有类型的请求
15     public void service(HttpServletRequest request,
16         HttpServletResponse response)
17         throws ServletException,java.io.IOException
18     {
19         // 设置解码方式
20         request.setCharacterEncoding("GBK");
21         response.setContentType("text/html;charSet=GBK");
22         // 获取name的请求参数值
23         String name = request.getParameter("name");
24         // 获取gender的请求参数值
25         String gender = request.getParameter("gender");
26         // 获取color的请求参数值
27         String[] color = request.getParameterValues("color");
28         // 获取country的请求参数值
29         String national = request.getParameter("country");
30         // 获取页面输出流
31         PrintStream out = new PrintStream(response.getOutputStream());
32         //输出HTML页面标签
33         out.println("<html>");
34         out.println("<head>");
35         out.println("<title>Servlet测试</title>");
36         out.println("</head>");
37         out.println("<body>");
38         // 输出请求参数的值:name
39         out.println("您的名字:" + name + "<hr/>");
40         // 输出请求参数的值:gender
41         out.println("您的性别:" + gender + "<hr/>");
42         // 输出请求参数的值:color
43         out.println("您喜欢的颜色:");
44         for(String c : color)
45         {
46             out.println(c + " ");
47         }
48         out.println("<hr/>");
49         out.println("您喜欢的颜色:");
50         // 输出请求参数的值:national
51         out.println("您来自的国家:" + national + "<hr/>");
52         out.println("</body>");
53         out.println("</html>");
54     }
55 }
View Code

  Servlet和JSP的区别是:

    1.Servlet中没有内置对象,原来JSP中的内置对象都必须由程序显示创建

    2.对于静态的HTML标签,Servlet都必须使用页面输出流逐行输出

  JSP是Servlet的一种简化,使用JSP只需要完成程序员要输出到客户端的内容,JSP脚本嵌入一个类中由JSP容器完成。

  Servlet是一个完整的Java类,这个类的service()方法用于声称对客户端的响应。

Servlet的配置:

  编辑好的Servlet源文件并不能响应用户请求,还需将其编译成class文件。将编译后的class文件放在WEB-INF/classes路径下,若Servlet有包,则在WEB-INF/classes路径下创建

   对应的文件夹。

  从Servlet3.0开始,配置Servlet有两种方式:

    1.在Servlet类中使用@WebServlet注解进行配置:参考网址:http://blog.csdn.net/kpchen_0508/article/details/41312735

    2.在web.xml文件中进行配置:参考网址:http://01121264-163-com.iteye.com/blog/1530063

JSP/Servlet的生命周期:

  JSP本质是Servlet,开发者编写的JSP页面将由Web容器编译成对应的Servlet,当Servlet在Web容器中运行时,其实例的创建及销毁都不是由程序员决定的,而是由Web容器进

   行控制。

  创建Servlet实例有两个时机:

    1.客户端第一次请求某个Servlet时,系统创建Servlet的实例:大部分的Servlet都是这种。

    2.Web应用启动时立即创建Servlet实例,即load-on-startup Servlet。

  每个Servlet的运行都遵循如下生命周期:

    1.创建Servlet实例

    2.Web容器调用Servlet的init方法,对Servlet进行初始化

    3.Servlet初始化后,将一直存在于容器中,用于响应客户端请求。若客户端发送GET请求,Web容器调用Servlet的doGet方法处理并响应请求;若客户端发送POST请求,

     荣器调用Servlet的doPost方法处理并响应请求。或统一使用service()方法来响应用户请求。

    4.Web容器决定销毁Servlet时,先调用Servlet的destroy方法,通常在关闭Web应用之时销毁Servlet。

深入理解Java对象的创建过程:类的初始化与实例化:http://blog.csdn.net/justloveyou_/article/details/72466416

Servlet生命周期与工作原理http://www.cnblogs.com/cuiliang/archive/2011/10/21/2220671.html

Request的getParameter和getAttribute方法的区别: http://blog.csdn.net/huoyunshen88/article/details/8603306

使用Servlet作为控制器:

  M:Model,模型,对应JavaBean,对数据进行操作

  V:View,视图,对应JSP页面,展示给用户的页面

  C:Controller,控制器,对应Servlet,做出M和V之间的逻辑

URI和URL的区别:http://www.cnblogs.com/gaojing/archive/2012/02/04/2413626.html

 Filter介绍:

  使用Filter完整的流程是:Filter对用户请求进行预处理,接着将请求交给Servlet进行处理并生成响应,最后Filter在对服务器响应进行后处理。

  Filter有如下几个用处:

    1.在HttpServletRequest到达Servlet之前,拦截客户的HttpServletRequest

    2.根据需要检查HttpServletRequest,也可以修改HttpServletRequest头和数据

    3.在HttpServletResponse到达客户端之前,拦截HttpServletResponse

    4.根据需要检查HttpServletResponse,也可以修改HttpServletResponse头和数据

  Filter有如下几个种类:

    1.用户授权的Filter:Filter负责检查用户请求,根据请求过滤用户非法请求

    2.日志Filter:详细记录某些特殊的用户请求

    3.负责解码的Filter:包括对非标准编码的请求解码

    4.能改变XML内容的XSLT Filter等

    5.Filter可负责拦截多个请求或响应;一个请求或响应也可被多个Filter拦截

  创建一个Filter只需两个步骤

    1.创建Filter处理类

    2.web.xml文件中配置Filter

静态和伪静态网站的区别:http://www.divcss5.com/html/h63.shtml

使用URL Rewrite实现网站伪静态:http://www.cnblogs.com/ljxxz/p/3560791.html

<url-pattern>/*</url-pattern>的解释:http://blog.csdn.net/qq_36870779/article/details/62883466

application,request,session三个对象,谁可以获取谁?http://www.cnblogs.com/z0228-0322x/p/6170588.html

文章评论

科技史上最臭名昭著的13大罪犯
科技史上最臭名昭著的13大罪犯
我跳槽是因为他们的显示器更大
我跳槽是因为他们的显示器更大
写给自己也写给你 自己到底该何去何从
写给自己也写给你 自己到底该何去何从
当下全球最炙手可热的八位少年创业者
当下全球最炙手可热的八位少年创业者
每天工作4小时的程序员
每天工作4小时的程序员
程序员最害怕的5件事 你中招了吗?
程序员最害怕的5件事 你中招了吗?
程序员应该关注的一些事儿
程序员应该关注的一些事儿
程序员周末都喜欢做什么?
程序员周末都喜欢做什么?
我的丈夫是个程序员
我的丈夫是个程序员
为什么程序员都是夜猫子
为什么程序员都是夜猫子
程序员的鄙视链
程序员的鄙视链
总结2014中国互联网十大段子
总结2014中国互联网十大段子
如何区分一个程序员是“老手“还是“新手“?
如何区分一个程序员是“老手“还是“新手“?
那些性感的让人尖叫的程序员
那些性感的让人尖叫的程序员
老美怎么看待阿里赴美上市
老美怎么看待阿里赴美上市
看13位CEO、创始人和高管如何提高工作效率
看13位CEO、创始人和高管如何提高工作效率
漫画:程序员的工作
漫画:程序员的工作
旅行,写作,编程
旅行,写作,编程
2013年中国软件开发者薪资调查报告
2013年中国软件开发者薪资调查报告
 程序员的样子
程序员的样子
不懂技术不要对懂技术的人说这很容易实现
不懂技术不要对懂技术的人说这很容易实现
做程序猿的老婆应该注意的一些事情
做程序猿的老婆应该注意的一些事情
编程语言是女人
编程语言是女人
Web开发者需具备的8个好习惯
Web开发者需具备的8个好习惯
Java 与 .NET 的平台发展之争
Java 与 .NET 的平台发展之争
60个开发者不容错过的免费资源库
60个开发者不容错过的免费资源库
亲爱的项目经理,我恨你
亲爱的项目经理,我恨你
代码女神横空出世
代码女神横空出世
中美印日四国程序员比较
中美印日四国程序员比较
程序员和编码员之间的区别
程序员和编码员之间的区别
5款最佳正则表达式编辑调试器
5款最佳正则表达式编辑调试器
团队中“技术大拿”并非越多越好
团队中“技术大拿”并非越多越好
如何成为一名黑客
如何成为一名黑客
老程序员的下场
老程序员的下场
鲜为人知的编程真相
鲜为人知的编程真相
Java程序员必看电影
Java程序员必看电影
程序员必看的十大电影
程序员必看的十大电影
那些争议最大的编程观点
那些争议最大的编程观点
10个调试和排错的小建议
10个调试和排错的小建议
程序员眼里IE浏览器是什么样的
程序员眼里IE浏览器是什么样的
10个帮程序员减压放松的网站
10个帮程序员减压放松的网站
程序员都该阅读的书
程序员都该阅读的书
Web开发人员为什么越来越懒了?
Web开发人员为什么越来越懒了?
程序猿的崛起——Growth Hacker
程序猿的崛起——Growth Hacker
“肮脏的”IT工作排行榜
“肮脏的”IT工作排行榜
“懒”出效率是程序员的美德
“懒”出效率是程序员的美德
什么才是优秀的用户界面设计
什么才是优秀的用户界面设计
为啥Android手机总会越用越慢?
为啥Android手机总会越用越慢?
聊聊HTTPS和SSL/TLS协议
聊聊HTTPS和SSL/TLS协议
软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有