JavaEE-01 JSP动态网页基础
学习要点
- B/S架构的基本概念
- Web项目的创建和运行
- JSP页面元素
- MyEclipse创建和运行Web项目
- Web程序调试
Web简史
web前端技术演进三阶段
- WEB 1.0:信息广播。
- WEB 2.0:信息交互。 微博、博客等。
- WEB 5.0:移动互联网。

动态网页服务器端技术演进

主流web程序应用平台
|
性能比较 |
LAMP |
JavaEE |
ASP.NET |
|
运行速度 |
较快 |
快 |
一般 |
|
开发速度 |
非常快 |
慢 |
一般 |
|
运行损耗 |
一般 |
较小 |
较大 |
|
难易程度 |
简单 |
难 |
简单 |
|
运行平台 |
Linux/Unix/Windows |
绝大多数平台 |
仅Windows平台 |
软件架构
C/S架构

优点:响应速度快;个性化定制;事务处理能力强,减轻服务器压力;安全性高。
缺点:C端维护工作量大;不利于企业快速部署应用。
B/S架构

优点:分布广,只要有互联网的浏览器即可。部署灵活;维护方便。跨平台。
C/S与BS混合架构

企业内部操作数据采用C/S架构:外部用户不直接访问数据库服务器,保证企业数据库的相对安全。企业内部用户的交互性较强,数据操作响应速度较快。
企业外部采用B/S架构:企业外部用户修改和维护数据时,速度较慢,较烦琐,数据的动态交互性不强。适合简单数据查询和确认。
B/S架构
定义

常见web服务器分成三类:不带应用程序的服务器(存放html文件等)、带应用程序的服务器(例如可以存放JSP文件)、带应用程序和数据库的服务器(例如JSP+数据库)。
工作原理

B/S结构采用请求/响应模式进行交互。
HTTP
HTTP协议概述
HTTP规范1.0和1.1定义了HTTP消息格式。HTTP报文由从客户机到服务器的请求和从服务器到客户机的相应构成,所以HTTP消息分为请求消息和响应消息两类。

请求行

状态行
- 状态行格式如下:
HTTP-Version Status-Code Reason-Phrase CRLF
其中,HTTP-Version表示服务器HTTP协议的版本;Status-Code表示服务器发回的响应状态代码;Reason-Phrase表示状态代码的文本描述。状态代码由三位数字组成,第一个数字定义了响应的类别,且有五种可能取值。
- 常见状态码:
- 200 OK:客户端请求成功。
- 400 Bad Request:客户端请求有语法错误,不能被服务器所理解。
- 401 Unauthorized:请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用。
- 403 Forbidden:服务器收到请求,但是拒绝提供服务。
- 404 Not Found:请求资源不存在,举个例子:输入了错误的URL。
- 500 Internal Server Error:服务器发生不可预期的错误。
- 503 Server Unavailable:服务器当前不能处理客户端的请求,一段时间后可能恢复正常,举个例子:HTTP/1.1 200 OK(CRLF)。
在浏览器查看请求和响应信息

URL
Uniform resource Locator,统一资源定位符
格式:
http://<IP地址>:[端口号]/路径/[?<查询信息>]
例如:
http://www.etc.com/book/index.html
http:超文本传输协议。FTP,telnet
www:代表一台web服务器
etc.com:服务器域名
book:站点上的目录
index.html:book文件夹中的一个HTML文件,即网页。
Web应用程序的部署
JavaEE
- Java EE,Java 平台企业版(Java Platform Enterprise Edition),之前称为Java 2 Platform, Enterprise Edition (J2EE),2005年6月更名为JavaEE,2018年3月更名为 Jakarta EE。是 Sun 公司(2009年被Oracle公司收购)为企业级应用推出的标准平台,用来开发B/S架构软件。
- Java EE 是一种规范,包括:JDBC(Java Database)数据库连接、JNDI(Java Naming and Directory Interfaces)Java的命名和目录接口、EJB(Enterprise JavaBean)、RMI(Remote Method Invoke)远程方法调用、Java IDL(Interface Dexcription Language)/CORBA(Common Object Broker Architecture)Java接口定义语言/公用对象请求代理程序体系结构、JSP(Java Server Pages)、Servlet、XML(Extensible Markup Language)可扩展标记语言、JMS(Java Message Service)Java消息服务、JTA(Java Transaction API)Java事务API、JTS(Java Transaction Service)Java事务服务、JavaMail。
- JavaEE 是 Java 应用最广泛的部分。
- JavaEE运行的基础是JavaSE。
- JavaEE常见容器:Tomcat 容器(JSP/Servlet),JBoss容器(Servlet和EJB容器),Resin容器(Servlet,轻量级web容器;同级别商用容器:Weblogic、Websphere),Glassfish(Sun公司推出的JavaEE容器)。
Tomcat和JDK的版本配套关系

Tomcat、JDK、JavaEE、Servlet版本间的配套关系

eclipse和jdk的配套关系
参考eclipse安装文档
https://wiki.eclipse.org/Eclipse/Installation#Install_a_JVM
配套参考表
Eclipse 4.8 (Photon) Java8
Eclipse 4.7 (Oxygen) Java8
Eclipse 4.6 (Neon) Java8
Eclipse 4.5 (Mars) Java7
Eclipse 4.4 (Luna) Java7
Eclipse 4.3 (Kepler) Java6
通常,在软件项目中,需要调整集成开发环境程序编译的JDK版本、JRE版本、以及tomcat使用的JRE版本。保持三个版本一致。
tomcat服务器的安装(以7为例)

- 解压缩版本tomcat注意事项
添加系统变量,名称为CATALINA_HOME,设置值为Tomcat的安装目录。
- 启动和停止tomcat服务器
在IE地址栏中输入http://localhost:端口号。
tomcat服务器目录
|
目录 |
说明 |
|
/bin |
存放各种平台下用于启动和停止Tomcat的脚本文件 |
|
/conf |
存放Tomcat服务器的各种配置文件 |
|
/lib |
存放Tomcat服务器所需的各种JAR文件 |
|
/logs |
存放Tomcat的日志文件 |
|
/temp |
Tomcat运行时用于存放临时文件 |
|
/webapps |
当发布Web应用时,默认情况下会将Web应用的文件存放于此目录中 |
|
/work |
Tomcat把由JSP生成的Servlet放于此目录下 |
tomcat端口配置
通过配置tomcat目录下conf中的server.xml文件修改Tomcat端口号
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
上机练习
安装tomcat,启动和停止tomcat,修改tomcat端口号。并测试。
Web应用程序
手动创建和部署web项目
1、在开发环境中创建web项目

在web-inf/web.xml中配置默认访问启始页面。
2、发布为war文件,拷贝到Tomcat 7.0\webapps目录下,启动tomcat。观察webapps目录,可以看到war自动生成web应用程序。在ie中访问项目。
3、在服务器端web项目的目录结构:
|
目录 |
说明 |
|
/ |
Web应用的根目录,该目录下所有文件在客户端都可以访问(JSP、HTML等) |
|
/WEB-INF |
存放应用使用的各种资源,该目录及其子目录对客户端都是不可以访问 |
|
/WEB-INF/classes |
存放Web项目的所有的class文件 |
|
/Web-INF/lib |
存放Web应用使用的JAR文件 |
上机练习
1、手动创建一个Web项目,实现项目发布,并能通过浏览器输入网址访问。
2、在myeclipse中创建一个项目导出为war文件,部署到服务器中并访问。
开发环境myeclipse和tomcat的整合
myeclipse和tomcat的整合
进入:windwos->prefereces->myeclipse->servers->tomcat7.x
启用tomcat7服务器,关联JDK。
关闭内置tomcat服务器。
注意:设置只针对工作空间有效


创建项目和部署项目

在myeclipse中启动tomcat服务器

上机练习
在myeclipse中创建项目,在myeclipse中部署项目,在myeclipse中启动服务器,在ie浏览器中访问项目。
JSP概念
JSP:Java Server Pages。在HTML中嵌入Java脚本代码。
例如:

在ie地址栏输入http://localhost:8080/chapter01/index.jsp

运行原理

JSP页面元素
page指令
- 作用
通过设置内部的多个属性定义整个页面的属性。
- 语法格式(一个属性中的多个值采用“,”号隔开)
<%@ page 属性1="属性值" 属性2="属性值1,属性值2"… 属性n="属性值n"%>
- 常用属性
| 属性 | 描述 | 默认值 |
| language | 指定JSP页面使用的脚本语言 | java |
| import | 通过该属性来引用脚本语言中使用到的类文件 | 无 |
| contentType | 用来指定JSP页面所采用的编码方式 |
text/html,ISO-8859-1 |
小脚本与表达式

表达式:显示数据,系统将其作为一个值来进行计算和显示。(不能以;结尾)
上机练习
需求描述:编写JSP页面,计算1—100之间的所有素数之和

提示:1、素数——在一个大于1的自然数中,除了1和此整数自身外,不能被其他自然数整除的数。2、使用out内置对象输出信息。
声明
在编写JSP页面程序时候,有时需要为Java脚本定义成员变量和方法,这时就需要使用JSP声明来实现。
声明语法格式:
<%! Declaration;[ Declaration;]…%>
示例:假如以下代码需要在页面中多次使用,如何处理?
<%
SimpleDateFormat formater = new SimpleDateFormat("yyyy年 MM月dd日");
String strCurrentTime = formater.format(new Date());
%>
使用声明

JSP中的注释

注意:HTML注释在JSP文件被编译后保留,JSP注释则被丢弃。重要信息的注释不要使用HTML注释。
总结

上机练习
需求描述:
编写JSP页面,计算2000—3000年中存在几个闰年。
实现思路:
1. 声明方法boolean leapYear(int year),用于判断是否是闰年
2. 声明一个变量count ,用于统计闰年的个数
3. 设置循环,条件是从2000至3000年
4. 在循环内调用boolean leapYear(int year),根据返回结果,改变count的变量值
提示信息:
闰年的判断条件:能够被4整除而不能被100整除,或者能够被400整除。
JSP执行过程
Web容器处理JSP文件请求需要经过3个阶段
- 翻译阶段
- 编译阶段
- 执行阶段

第一次请求之后,Web容器可以重用已经编译好的字节码文件

如果对JSP文件进行了修改,Web容器会重新对JSP文件进行翻译和编译。
Web程序的调试与排错
运行Web程序时常犯的错误
- 未启动tomcat
- 未部署web应用
- URL输入错误
- 目录不能被引用
- JSP脚本错误
错误调试
- 未启动tomcat
如果服务器无法启动,需要修改端口号。
- 未部署web应用
确认项目已经部署到tomcat服务器上。
- URL输入错误
404错误,访问了不可访问的url资源。
- 目录不能被引用
例如把文件创建到web-inf中,导致404错误。
- JSP脚本错误
500错误。
按照java程序调试方式排错:阅读代码逻辑、输出数据、debug。
上机练习
需求描述:
- 将新闻发布系统的静态页面转换成JSP页面后部署到Web项目中,并且可以通过浏览器访问各JSP页面。
- 创建新闻发布系统数据库。
- 通过MyEclipse统一设置字符集编码格式为“UTF-8
- 在HTML页面中加入page指令
- 将HTML的后缀名改为.jsp
提示:
- 通过MyEclipse统一设置字符集编码格式为“UTF-8
- 在HTML页面中加入page指令
- 将HTML的后缀名改为.jsp
数据库模型图
|
新闻主题表:topics |
|||
|
字段 |
数据类型 |
是否为空 |
备注 |
|
tid |
int |
否 |
新闻主题编号,主键,自增 |
|
tname |
char(50) |
否 |
新闻主题,非空,唯一约束 |
|
新闻表:news |
|||
|
字段 |
数据类型 |
是否为空 |
备注 |
|
nid |
int |
否 |
新闻编号,主键,自增 |
|
ntid |
int |
否 |
新闻主题编号,外键 |
|
ntitle |
char(100) |
否 |
新闻标题 |
|
nauthor |
char(50) |
否 |
作者 |
|
ncreatedate |
datetime |
是 |
发布日期,默认当前时间 |
|
npicpath |
char(200) |
是 |
图片路径 |
|
ncontent |
text |
否 |
新闻内容 |
|
nmodifydate |
datetime |
是 |
编辑日期 |
|
nsummary |
char(255) |
否 |
新闻概要 |
|
新闻评论表:comments |
|||
|
字段 |
数据类型 |
是否为空 |
备注 |
|
cid |
int |
否 |
评论编号,主键,自增 |
|
cnid |
int |
否 |
新闻编号,外键 |
|
ccontent |
text |
否 |
评论内容 |
|
cdate |
datetime |
否 |
评论日期,默认当前时间 |
|
cip |
char(100) |
是 |
评论人IP地址 |
|
cauthor |
char(100) |
是 |
评论作者 |
|
系统用户表:users |
|||
|
字段 |
数据类型 |
是否为空 |
备注 |
|
uid |
int |
否 |
用户编号,主键,自增 |
|
uname |
char(20) |
否 |
用户名,非空,唯一约束 |
|
upwd |
char(20) |
否 |
用户密码,非空 |

JavaEE-01 JSP动态网页基础的更多相关文章
- JSP技术基础(动态网页基础)
前言:如果说html为静态网页基础,那么jsp就是动态网页基础,两者的区别就是jsp在html的前面多加了几行而已.当然,jsp里面对java的支持度更高.要明白,js只是嵌入在客户端的小程序小脚本而 ...
- 编写jsp动态网页
默认情况下,jsp网页必须保存在TOMCAT_HOME/webapps 目录下才能被客户请求. JSP网页的主题仍然是html标签,在需要显示动态数据的地方添加<%%>标记,在其中编写合法 ...
- JSP/Servlet开发——第一章 动态网页基础
1.动态网页:在服务端运行的使用程序语言设计的交互网页 : ●动态网站并不是指具有动画功能的网站,而是指网站内容可根据不同情况动态变更的网站(股票网站),一般情况下动态网站通过数据库进行架构. ●动态 ...
- JSP动态网页
01.什么是服务器 02.什么是动态网页 动态网页是指在服务器端运行的,使用程序语言设计的交互式网页,它们会根据某种条件的变化,返回不同的网页内容.可以让用户和服务器交互的网站 动态网站可以实现交互 ...
- 【Asp.net入门01】动态网站基础知识
本节将介绍: 网站搭建流程 动态网站相关基础概念 网页的访问原理 使用浏览器访问网站是我们几乎天天在做的事情.以前我们只需要关注网页内容,作为网站开发人员,从现在开始我们要关注更深层次的东西了. 1. ...
- 《The Django Book》实战--第二章--动态网页基础
这章演示了一些最基本的Django开发动态网页的实例,由于版本不一样,我用的是Django 1.,6.3,有些地方按书上的做是不行的,所以又改了一些,写出来让大家参考. 这是一个用python写的一个 ...
- 第三章 Django之动态网页基础(1)
前一章中,我们解释了如何建立一个 Django 项目并启动 Django 开发服务器.当然,那个网站实际并没有干什么有用的事情,它所做的只是显示 It worked!消息.让我们来做些改变.本章将介绍 ...
- jsp动态网页开发基础
JSP基础语法 jsp页面元素构成 jsp页面组成部分有:指令,注释,静态内容,表达式,小脚本,声明. 1.表达式<%= %> 2.小脚本<% %> 3.声 ...
- 动态网页基础——JSP
WEB项目的目录结构 META-INT WEB-INF 对外都是不可访问的,不可把index.jsp/index.html 放这 JSP JSP是为了简化Servlet的工作出现的替代品,Servl ...
随机推荐
- JS获取子节点、父节点和兄弟节点的方法实例总结
转自:https://www.jb51.net/article/143286.htm 本文实例讲述了JS获取子节点.父节点和兄弟节点的方法.分享给大家供大家参考,具体如下: 一.js获取子节点的方式 ...
- HDU 1713 相遇周期 (最小公倍数)
题意:... 析:求周期就是这两个分数的最小公倍数,可以先通分,再计算分子的最小倍数. 代码如下: #pragma comment(linker, "/STACK:1024000000,10 ...
- Cannot call value of non-function type 'UITextView'报错
iOS里面的开发,类写到一半就报错这个.后来发现是因为重名的时候召唤对象不明确的问题.先贴代码,晚点再说 出错点 //ヒントをクリアするためのイニシャライザ init (clearStr: UITex ...
- POJ1466/HDOJ1068 谈谈二分匹配的时间复杂度
题意: n个学生编号是0-n-1,然后给出他们这些人和一些人的关系. 要你找出最大的人数,要求这些人之间没关系. 咳咳,题目中没说性别的关系TVT 思路: 很明显是一个匹配算法,但是我们得搞出一个二分 ...
- 洛谷P3825 [NOI2017]游戏(2-SAT)
传送门 果然图论的题永远建图最麻烦……看着题解代码的建图过程真的很珂怕…… 先不考虑地图$x$,那么每一个地图都只能用两种赛车,于是我们可以用2-SAT来搞,用$i$表示这个地图能用的第一辆车,$i' ...
- linux常用的shell命令
1.shell介绍 shell(外壳)是linux系统的最外层,简单的说,它就是用户和操作系统之间的一个命令解释器. 2.shell命名的使用 ls :查看当前目录的信息,list . ...
- GDI双缓冲绘图
一.简介 在进行复杂图形绘制时,若直接在屏幕DC上进行绘制,则会出现明显的闪烁.闪烁产生的原因是当绘制的图形较为 复杂时,图形绘制过程中就被刷新到屏幕上,导致结果断断续续地显示出来.双缓冲绘图的原理是 ...
- Solr打分排序规则自定义【转】
在搭建好solrCloud搜索集群后,通过编写基本的查询显示语句已经能够通过输入关键字查询到相应结果进行显示,但是在显示结果排序上以及不相关信息过滤问题上,如何制定合理的打分规则得到理想的结果集确实比 ...
- Web API DataContract DataMember Serializable简单解释
首先看一下DataContract这个类契约: Web API/WCF 中类一旦标记了DataContract 属性,那么类中的属性只有被标记为DataMember属性才会被序列化,也就是说一个类的属 ...
- asp.net core教程 (一)
Asp.Net Core简介 ASP.NET Core 是一个全新的开源.跨平台框架,可以用它来构建基于网络连接的现代云应用程序,比如:Web 应用,IoT(Internet Of Things,物联 ...