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软件开发工作的童 ...
随机推荐
- 使用ActionFilterAttribute实现MVC后台授权
授权就是我们在用户未登录的情况下不允许访问一些页面,只有登录后才能进行访问一些页面. 在mvc中我们可以使用ActionFilterAttribute来进行授权验证来阻止一些未经授权的直接访问的页面. ...
- 【vue】http-server开启本地服务
在写前端页面中,经常会在浏览器运行HTML页面,从本地文件夹中直接打开的一般都是file协议,当代码中存在http或https的链接时,HTML页面就无法正常打开,为了解决这种情况,需要在在本地开启一 ...
- 【BZOJ5290】 [Hnoi2018]道路
BZOJ5290 [Hnoi2018]道路 前言 这道题目我竟然没有在去年省选切? 我太菜了. Solution 对题面进行一个语文透彻解析,发现这是一个二叉树,乡村都是叶子节点,城市都有两个儿子.( ...
- 不一样的网络流系列——Dinic跑得快
前言 摆王兴致冲冲地跑到我们机房来对我说跟你讲一个黑科技... Dinic的神奇优化 Dinic优化 我们发现如果Dinic不建反向边会跑的飞起(当然Wa是必然的) 所以考虑在加反向边的基础上优化. ...
- python实用库:PrettyTable 学习
python实用库:PrettyTable 学习 PrettyTable说明 PrettyTable 是python中的一个第三方库,可用来生成美观的ASCII格式的表格,十分实用. 以下为官方介绍: ...
- 【sping揭秘】5、IOC容器(一)
OC容器实现过程 1. 容器启动阶段,读取配置文件,解析文件BeanDefinitionReader 2. Bean 实例化阶段 关于BeanFactoryPostProcessor 插手spring ...
- POJ 2608
#include<iostream> #include<stdio.h> #include<string> #include<set> using na ...
- odoo开发笔记:抛出警告的方式
上边rase 加3种写法,都能实现,跑出警告的功能.
- 课程二(Improving Deep Neural Networks: Hyperparameter tuning, Regularization and Optimization),第三周(Hyperparameter tuning, Batch Normalization and Programming Frameworks) —— 2.Programming assignments
Tensorflow Welcome to the Tensorflow Tutorial! In this notebook you will learn all the basics of Ten ...
- 剑指offer二之替换空格
一.题目: 请实现一个函数,将一个字符串中的空格替换成“%20”.例如,当字符串为I love you.则经过替换之后的字符串为I%20love%20You. 二.解题方法: 方法1:采用String ...