JSP技术

1、什么是jsp?

    jsp的全称是java server pages。

2、为什么学习jsp技术?

    jsp是sun官方为了解决服务器输出html页面这个难题而产生的技术。

以下是servlet程序输出一个简单的HTML页面。servlet输出HTML,不仅没有代码的提示,而且扩展上,维护上,都极其不方便。

public class HtmlServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void doGet(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		//设置服务器的字符集,以及告诉客户端返回的数据类型,以及使用UTF-8查看页面
		response.setContentType("text/html; charset=UTF-8");
		//获取输出流
		PrintWriter pWriter = response.getWriter();
		pWriter.write("<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\r\n");
		pWriter.write("<html>\r\n");
		pWriter.write("	<head>\r\n");
		pWriter.write("		<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">\r\n");
		pWriter.write("		<title>Insert title here</title>\r\n");
		pWriter.write("	</head>\r\n");
		pWriter.write("	<body>\r\n");
		pWriter.write("		this is the html's content!\r\n");
		pWriter.write("	</body>\r\n");
		pWriter.write("</html>\r\n");
	}
}
jsp页面的访问和访问HTML页面是一样的。
	如果在WebContent目录下
		WebContent
			page1.html = http://ip:port/工程名/资源名 = http://ip:port/工程名/page1.html
			page2.html = http://ip:port/工程名/资源名 = http://ip:port/工程名/page2.html




jsp的本质是什么?
	jsp页面本质上是一个servlet程序。


当我们第一次访问jsp页面的时候。在work目录下他创建出如下的内容。

一个是java源文件,另一个很明显是这个java源文件编译之后输出的.class字节码文件。

jsp翻译成为Servlet程序的源文件命名习惯是:

源文件                       翻译之后名为

page.jsp                               page_jsp.java

abc.jsp                                 abc_jsp.java

现在我们来看一下java源文件中的内容:


所以jsp本质上,也是一个Servlet程序。

从源码的_jspService方法中,我们不难发现。这个jsp(Servlet程序)其实也是在输出jsp页面中的html页面。

1.jsp的三种语法

page指令可以配置jsp页面的一些信息(配置)

a)jsp头部的page指令

i.language属性                   

告诉服务器。jsp翻译之后得到的是java源文件

ii.contentType属性              

是设置response.setContentType方法中的内容。也就是设置服务器的字符集,以及设置客户端的字符集。

iii.pageEncoding属性               

设置jsp页面文件本身的字符集。

iv.import属性                       

可以给jsp页面导入需要的类

v.autoFlush属性                        

设置是否自动刷新out缓冲区,默认值就是true.

vi.buffer属性                               

设置out缓冲区的大小。默认是8KB

vii.errorPage属性          

设置当jsp运行后产生错误,跳转的页面。

viii.isErrorPage属性         

设置当前jsp页面是否是错误页面。如果设置为true,就启用Exception异常对象。默认是false

ix.session属性                

设置当前jsp页面,访问的时候是否创建Session对象。默认是true

x.extends属性                

是给服务器厂商预留的字段。

page指定的属性值,一般都使用默认值即可。因为默认值,已经是官方最优的配置。

a)        jsp中的三种脚本

i.          声明脚本(了解内容,很少用)

格式:

<%!  

声明代码。

%>

1.        我们可以定义全局变量。

2.        定义static静态代码块

3.        定义方法

4.        定义内部类

i.表达式脚本(重要,常用

格式:

<%=表达式      %>

1、表达式可以在jsp页面上进行输出某个值(或者内容)。

2、表达式脚本翻译之后会被翻译到_jspService方法中。

3、表达式脚本翻译之后是out.print进行输出。

4、由于表达式脚本翻译内容在_jspService方法中。所以在_jspService方法中的对象。都可以直接使用。

1.输出整型

2.输出浮点型

3.输出字符串

输出对象

i.          代码脚本(使用最多,最重要)

格式:

<%

代码

%>

代码脚本跟表达式脚本一样。翻译之后。都会被翻译到_jspService方法中。

所以_jspService方法中的对象都可以直接使用。

在_jspService方法可以写的语句,都可以在代码脚本中编写.

1.        代码脚本----if 语句

2.        代码脚本----for 循环语句

3.        翻译后java文件中_jspService方法内的代码都可以写


a)        jsp中的三种注释

i.          html注释

<!--  html注释  -->

html注释在翻译的时候。会被翻译成为out.wrtie输出到客户端。

ii.        java注释

单行                   //

多行                   /*  多行 */

java注释翻译之后,会原生不动的翻译成java源代码中。

iii.       jsp注释

<%-- jsp 注释  --%>

jsp注释在翻译的时候,会被完全忽略掉。


比较有用:

request

pageContext

httpSession

application

out   

1.        jsp四大域对象

四个域对象从小到大的顺序,如下:

pageContext             当前jsp页面中

request                       一次请求中

session                       一个会话中(打开浏览器,请求服务器。不一直不关闭浏览器。那么会话一直存在。)

application                 一个web工程

四个域对象使用优先顺序,从小到大。

先pageContext

再request

再session

最后application.

1.        jsp中的out输出和response.getWriter输出的区别

          它们都可以往客户端输出数据。


1、jsp页面中,我们必须统一使用out进行输出。

out.write()                 write只能输出字符串

out.print()                  print可以输出任意内容(所有内容)

使用print可以输出任意的内容。

如果只是输出字符串的话,可以优先考虑write输出。

在jsp页面中,只使用out进行输出,并且使用out.print()

1.        jsp的常用标签

a)        jsp静态包含

<%@ include file="/xxx.jsp"%>

静态包含是把被包含的jsp的页面内容。原封不动的拷贝到包含的位置 进行输出。

静态只会把大的jsp页面(不包含被包含的jsp页面)翻译成为Servlet源文件。

b)        jsp标签-动态包含

 <jsp:include page="/xxx.jsp"></jsp:include>

1、动态包含把所有的jsp页面都翻译成为Servlet源文件,然后去执行它们的字节码程序。

2、动态包含还可以传递参数(属性)


静态包含,一般适合于去包含那些只有输出html页面的jsp内容。

而动态包含可以适用于那些在jsp页面中,包含有大量的java代码的jsp页面。或者是jsp页面中包含有一些耗时比较长的java代码的jsp页面。

jsp是为了解决Servlet输出html页面而产生的技术。所以jsp在整个JavaEE的开发中的定位就是用来输出html页面。

但是,jsp给我们提示很多的脚本功能。而这些脚本功能甚至可以实现java文件的功能。但是由于jsp本身在javaEE中定位的问题。

所以一般情况下。在jsp页面里不推荐编写大量与输出html无关的java代码。

所以一般情况下。我们都是使用静态包含。

a)        jsp标签-转发

        <%-- jsp的转发中的 / 也是表示到http://ip:port/工程名/ 映射到代码的WebContent目录--%>

<jsp:forward page="/context2.jsp"></jsp:forward>

转发的标签功能效果跟以下代码的功能一样

        <%

            request.getRequestDispatcher("/context2.jsp").forward(request, response);

        %>

2.        静态包含和动态包含的区别

 

静态包含

动态包含

是否生成java文件

不生成

生成

service方法中的区别

拷贝包含的jsp页面的内容原封不动的输出

调用JspRuntimeLibrary.include实现包含

是否可以传递参数

不能传递参数

可以传递参数

编译次数

1

2

适用范围

适用于那些只有输出html页面内容的jsp

可以包含那些在jsp页面中编写了大量java代码的jsp


由于 jsp页面,在javaEE中的定位是用来输出html内容。所以一般情况下,都只是使用静态包含。

  • 13
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值