第二章.JSP/Servlet及相关技术详解
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第二章.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>
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 }
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及相关技术详解的主要内容,如果未能解决你的问题,请参考以下文章