Java基础——JSP(一)
一、JSP的由来
在很多动态网页中,绝大多部分内容是不变的,只有局部内容需要动态产生和改变。例如, 一个新闻的浏览次数,只有这个次数是动态改变的,而Servlet程序返回客户端的代码全是java程序动态创建的。Servlet 的缺点,处理界面困难。JSP 是在Servlet的基础上发展起来的,它弥补了Servlet在界面处理方面的缺陷。
简单来讲,JSP =html+java片段+jsp标签+javascript,它功能强大,可以和javabean 结合
另外,JSP+javabeen+servlet 就构成了mvc模式。
JSP是运行在服务端的,也就是说,我们在桌面上创建一个.JSP文件,它也不能能够被执行哦。

我们将它黏贴到Tomcat上的webapps文件中(或者你直接在里面创建.jsp文件也可以)。

下一步,我们要启动tomcat。接着在浏览器中访问:http://localhost:8080/myweb/Demo.jsp。

接下来神奇的事情发生了。在Tomcat的webapps中可以看到,帮我们自动生成两个文件。

<%
String userName="zhangsan";
%> <script>
alert( <% userName %> );
</script>
注意:访问JSP的过程
如果是第一次访问服务器,则翻译成一个对应的java文件(Servlet)。然后,再被编成 .class 文件并加载到内存中。
如果是以后访问,则直接调用内存中的jsp实例,所以第一次访问慢,以后访问会更加快。
四、3种JSP注释
1.
<%
//this is
/* this
is */
%>
2.
<%-- //这样的注释内容不会被发送到客户端
这是被注起来的内容
<h1>这是注起来的</h1>
--%>
3.
<!-- <% out.print("老板让我干的活我就不干"); %> --> //这里的内容会发送到客户端,但浏览器不会显示
五、JSP脚本元素(3种)
1.
1) 代码段 <% %>
它要严格遵守java语言规范,需要导包的要导包
<% %> 和 <% %> 之间的java代码是可以互相访问的,相当于写在一个 <% %>里
2.
2) 声明 <%!xxxxxxx%> //注意 <%! 中间千万不能空格
<%!public String test(){
return "ok:";
}%>
3.
3) 表达式 <%= xxx %> //注意 <%= 中间千万不能空格,后面不能有分号
<%=String str="嘻嘻嘻";%> 例子:
<label><%= str %></label> //和下面的写法等价
<label><% out.print(str); %></label>
附:myeclipse 生成的jsp页面,解说:
(在实际应用中,不需要的我们可以删除它)
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> //解说:page指令,import用来导包的,pageEncoding指当前页面编码方式
<%
String path = request.getContextPath(); //解说: contextPath 代表web应用的名称 /shop-admin
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
//上下对齐解说: //http //localhost //8080 // shop-admin
//上面最后生成的结果:-> http://localhost:8080/shop-admin/
%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> //解说:言档类型声明
<html>
<head>
<base href="<%=basePath%>"> //解说:<base href="http://localhost:8080/shop-admin/" > <title>My JSP 'test.jsp' starting page</title>
<body>
<meta http-equiv="pragma" content="no-cache"> //解说:不缓存
<meta http-equiv="cache-control" content="no-cache"> //解说:不缓存
<meta http-equiv="expires" content="0"> //解说:不缓存
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> //解说:给网络机器人用来搜索的关键字
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
--> </body>
</html>
六、JSP版本的计算器(代码示例)
<%
//接收参数
String num1 =request.getParameter("num1");
String num2 =request.getParameter("num2");
String flag =request.getParameter("flag"); int n_num1=0;
int n_num2=0;
int result=0; if(num1!=null&&num2!=null&&flag!=null){
//计算
n_num1=Integer.parseInt(num1);
n_num2=Integer.parseInt(num2); if(flag.equals("+")){
result=n_num1+n_num2;
}else if(flag.equals("-")){
result=n_num1-n_num2;
}else if(flag.equals("*")){
result=n_num1*n_num2;
}else if(flag.equals("/")){
result=n_num1/n_num2;
} out.print("<h1>计算结果是 "+result+"</h1>");
} //输出结果
%> <form action="calcUI.jsp" name="form1" method="get" >
请输入第一个数:
<input type="text" name="num1" value='<%=request.getParameter("num1")==null?"":request.getParameter("num1") %>'/>
<br/> <select name="flag" >
<option value='+' <%="+".equals(flag)?"selected ":"" %>>+</option>
<option value='-' <%="-".equals(flag)?"selected ":"" %>>-</option>
<option value='*' <%="*".equals(flag)?"selected ":"" %> >*</option>
<option value='/' <%="/".equals(flag)?"selected ":"" %>>/</option>
</select>
<br/>
请输入第二个数:
<input type="text" name="num2" value='<%=request.getParameter("num2")%>' /> <input type="submit" value="计算" />
</form>
七、MVC模式
M ->mode 模型层 -> javaBeen (比如 UserDao,UserInfo)
V ->view 视图层 -> html , jsp
C ->controller 控制层 ->由Servlet担当
八、JSP指令
指令是为JSP引擎而设计的,它不直接产生任何输出,只是告诉引擎如何处理JSP页中的其余部分。指令必须嵌套在<%@ %> 中,其本语法如下
<%@ 指令 属性名="值" %>,其中属性名是大小写敏感的
//例子
<%@ page language="java" import="java.util.*,java.text.*,cat.bean.*" pageEncoding="UTF-8"%>
* JSP中的指令一共有三种
-- page // <%@ page ... >
-- include // <%@ include ... > 用来包含别的页面
-- tablib // <%@ tablib ... > 用来指定标签库
* page 指令
-- Page 用来定义jsp页面的各属性,几乎所有的页面都会出现page属性
-- 无论page属性出现在什么位置,它的作用都是整个jsp页面
-- 一个页面可以包含多任意数量的page指令
* page 指令的属性
--language :jsp页面采用的语言,默认的是”java”
--contentType: 用于设置响应正文的 mime 类型(即指定Content-Type响应头字段的值),和说明
JSP文件中的文本内容的字符集编码. content-Type 默认的mime 类型是 text/html,字符集是”iso8859-1”
JSP引擎会根据page指令的contentType 属性生成相应调用ServletRresponse.setContentType 方法的语句
--extends:在当前的jsp页面中所用到的类的基类。(一般不使用)
--import:当前jsp页面所用到的java类。
--session:当前的jsp页面是否使用会话。默认的是true.(不要修改它)
如果将其设为false,则JSP翻译成的Servlet将不自动预先创建好Session隐式对象
--buffer:指定了out 变量所使用的缓存的大小。默认的是8K.
--autoFlush :当缓冲区满的时候,是否自动将值输出至jsp页面。默认的是true.
--errorPage:用来处理已经发生的,但当前页面没有捕获的异常。例如要求有输入参数,但是没有输入.
它的属性值必须使用相对路径,如果以/开头,表示想对于当前web应用程序的根目录,而不是站点根目录
--isErrorPage: 设置当前页面是否是专门用于处理其他页面未捕异常的页面,默认值为false
只有明确的将 isErrorPage 设为true,当前页面才能用做异常处理,才能拿到exception隐式对象
==小例子: errorPage 指令 的应用
在要捕捉异常的页面中:
-- <%@ page language="java" import="java.util.*" pageEncoding="gbk" errorPage="ErrPage.jsp"%>在异常处理页面中
-- <%@ page language="java" isErrorPage="true"%>
-- <%= exception.toString() %>
--pageEncoding :指定jsp源文件中的字符所使用的字符集编码
pageEncoding 指jsp文件本身的编码
contentType="text/html;charset=gkb" 这里的charset 指的是服务器发送给客户端时的内容编码
注意:JSP要经过两次编码
==第一阶段,将jsp编译成 .java 它会根据pageEncoding来读取jsp 结果是由指定的编码方案翻译成统一的UTF-8 的java源码(即.java)
如果pageEncoding设定错的话,将会出现中文乱码
==第二阶段 就是由java源码到java的字节码的编译,不管JSP文件在编写的时候用的是什么编码,最后这个阶段的结果全是UTF-8 java源码
* include 指令
include 指令 是静态导入
用于通知JSP引警在翻译当前JSP页面时将其他文件中的内容合并进当前JSP页面转换成的Servlet源文件中,这种在源文件级别进行的引入称为静态引入,当前JSP页面和静态引入的页面紧密结合成一个Servlet。
1 被引入的文件必须尊循JSP语法,可以包含静态HTML,JSP脚本元素,JSP指令 和 jsp行为元素等普通JSP页面所具有的一切内容
2 被引入的文件可以使用任意扩展名,(就是叫.html也行), 为了见名知义,jsp规范建议使用.jspf (jsp fragments) 作为静态引入文件的扩展名
3 在将JSP文件翻译成Servlet 源文件时,JSP引擎将合并被引入的文件与当前JSP页面中的指令元素,所以,除了pageEncoding 和 import ,page指令的其他属性不能在这两个页面中有不同的设置
4 除了指令元素外,要引入的文件中的所有其他元素都被转换成相应的java代码,然后插入进当前
JSP 页面所翻译成的Servlet文件中,插入的位置和 include 指令 在当前jsp 页面中的位置保持一致
5 两者是在 JSP引擎翻译成Servlet的过程中进行合并的,而不是先合并成源文件再翻译
6 file 属性设置的路径必须是相对路径,如果以 / 开头,指的是相对于当前web应用程序的根目录,而不是 站点根目录
7 出现在一个 JSP 页面中的 include 指令的数量不受限制
<%@ include file="localURL" %>
<table border="1">
<tr>
<td>
<%@ include file="test.html"%></td>
<td>
bbb
</td>
</tr>
<tr>
<td>
数据
</td>
<td>
<%@ include file="test.html"%></td>
</tr>
</table>
* taglib 指令
通知 JSP 容器,页面依赖于自定义标记库
<%@ taglib uri ="tagLibraryURI" prefix = "tagPrefix" %>
Java基础——JSP(一)的更多相关文章
- Java基础——JSP(三)
一. JavaBean 是一种特殊的java类,它遵从一定的设计模式,开发工具和其他组件可以根据这种模式来调用javaBean.它是使用一种符合某些命名方法和设计规范的java类. -- 这个类是可序 ...
- Java基础——JSP(二)
一.JSP隐式对象概述 为了简化jsp表达式和脚本片断代码的编写,JSP一共提供了9个预先定义的变量,这些变量也称为隐式对象或内置对象. 在 jsp生成的Servlet源码中,有如下声明: publi ...
- Java之JSP和Servlet基础知识
JSP基础 JSP起源 JSP,JavaServer Pager的简称.由SUN倡导并联合其它公司创建. JSP是一门脚本语言 JSP可以嵌入到HTML中 JSP拥有Java语言的所有特性 面向对象. ...
- [Java面经]干货整理, Java面试题(覆盖Java基础,Java高级,JavaEE,数据库,设计模式等)
如若转载请注明出处: http://www.cnblogs.com/wang-meng/p/5898837.html 谢谢.上一篇发了一个找工作的面经, 找工作不宜, 希望这一篇的内容能够帮助到大 ...
- 【JAVA面试题系列一】面试题总汇--JAVA基础部分
JAVA基础 基础部分的顺序: 基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法 线程的语法,集合的语法,io 的语法,虚拟机方面的语法 每天几道,持续更新!! 1.一个". ...
- Java基础知识【上】(转载)
http://blog.csdn.net/silentbalanceyh/article/details/4608272 (最终还是决定重新写一份Java基础相关的内容,原来因为在写这一个章节的时候没 ...
- Java基础常见英语词汇
Java基础常见英语词汇(共70个) ['ɔbdʒekt] ['ɔ:rientid]导向的 ['prəʊɡræmɪŋ]编程 OO: object ...
- Java基础知识学习(九)
GUI开发 先前用Java编写GUI程序,是使用抽象窗口工具包AWT(Abstract Window Toolkit).现在多用Swing.Swing可以看作是AWT的改良版,而不是代替AWT,是对A ...
- JAVA面试精选【Java基础第一部分】
这个系列面试题主要目的是帮助你拿轻松到offer,同时还能开个好价钱.只要能够搞明白这个系列的绝大多数题目,在面试过程中,你就能轻轻松松的把面试官给忽悠了.对于那些正打算找工作JAVA软件开发工作的童 ...
随机推荐
- telerik:RadGrid 分组自动展开
在 MasterTableView 加上 GroupsDefaultExpanded = " true " 即可 自动展开分组下面的子项
- WPF 使用 Direct2D1 画图 绘制基本图形
本文来告诉大家如何在 Direct2D1 绘制基本图形,包括线段.矩形.椭圆 本文是一个系列 WPF 使用 Direct2D1 画图入门 WPF 使用 Direct2D1 画图 绘制基本图形 本文的组 ...
- 【计算机网络】网络层学习笔记:总结IP,NAT和DHCP
前言:这篇文章是学习网络层协议时候总结的笔记,前面的主要部分介绍的都是IP协议, 后半部分介绍NAT协议和DHCP协议 参考书籍 <计算机网络-自顶向下> 作者 James F ...
- jzoj4223
考慮這樣一種暴力:將所有<=x的邊按照類似最小生成樹的方式加入答案,然後用下面的方法統計答案: 1.首先加入一條邊 2.看這條邊是否將會合成聯通塊,如果會,那麼加進這條邊,記這條邊一端聯通塊大小 ...
- tomcat单机多实例部署
最近在面试的过程中,一家公司在面试时提到了有关tomcat单机多实例部署的提问, 正好, 之前使用IntelliJ IDEA 13.1.4这款IDE开发web项目,在开发的过程中,因为有多个web项目 ...
- spring boot 中使用LUA脚本
编写LUA脚本 该脚本功能:先检查redis中某个key的值是否与期望的值V1一致,如果一致则将其修改为新的值V2并返回true,否则返回false.其实就是CAS. local current = ...
- CSV Data Set Config设置
Jmeter参数化常用的两种方法: 1.使用函数助手 2.CSV Data Set Config 本章主要讲解CSV Data Set Config设置 1.Filename:文件名,指保存信息的文件 ...
- python学习笔记16-装饰器
装饰器(函数) 1.函数作用域 2.高阶函数 把函数作为参数传入,这样的函数称为高阶函数,函数式编程就是指这种高度抽象的编程范式. 3.闭包 闭包就是能够读取其他函数内部变量的函数. 在本质上,闭包 ...
- mysql 常用操作命令
mysql官网指南:http://dev.mysql.com/doc/refman/5.1/zh/sql-syntax.html 1.导出整个数据库mysqldump -u 用户名 -p --defa ...
- 第六章-Javac符号表
需要参考: (1)Architecture of a Java Compiler (2)关于符号Symbol第一篇 (3)关于符号Symbol第二篇 (4)关于类型Type (5)关于作用域范围Sco ...