什么是B/S架构
随着internet的普及与大规模应用,受制于C/S架构的应用程序存在很多缺点,B/S(browser Server,浏览器/服务器)架构随之应运而生,基于B/S架构的Web应用程序由于不在受安装客户端的限制,访问极其简便,因此越来越多的企业采用,B/S架构的出现不上对C/S架构的否定,而是对C/S架构的改进。
在B/S架构下,应用系统完全放在了服务器上,并通过应用服务器同数据库服务器进行通信系统界面通过浏览器展现。
对于用户而言,只要能够连接internet。安装完浏览器就可以访问系统了。对于程序开发,维护人员来说,无论身处何地,所要做的就是对服务器的代码进行更新和维护。
C/S与B/S的比较
B/S架构相对于C/S架构,也存在一定的劣势。B/S的界面没有C/S的友好,难以做出像Office这样界面丰富的软件。
C/S一般面向相对固定的用户群,一般高度机密的信息系统采用C/S架构,比较适用于企业内部的信息管理系统,金融证券管理系统等。B/S适用于公开信息发布,对信息保密性要求较低,如企业网站,售后服务系统,物流信息的查询系统等。
B/S架构的工作原理
什么是URL
在internet上所有资源都有一个独一无二的URL地址。
- 第一部分:使用的传输协议,如最常用的HTTP协议(目前WWW中应用在最广的协议)。
- 第二部分:主机IP地址(有时包含端口号,默认端口号是80),指请求的服务器的IP地址,这个地址是唯一的,也可以使用域名来代替IP地址发送请求。
- 第三部分:路径(包含请求的资源),由零或多个“/”隔开的字符串表示,一般用来表示服务器上的一个目录或文件地址等。
Tomcat服务器
web服务器是一个免费开源的Web容器,它是Apache基金会的jakarta项目中的一个核心项目。
web容器时一种服务程序,为相关技术如(jsp)提供运行支持。web容器在服务器上运行时会监听特定端口,为从客户端发出的针对该端口的请求提供相应的处理服务。
Tomcat的目录结构
Tomcat端口号配置
修改端口号步骤如下:
1.在Tomcat目录结构下找到其子目录conf
2.在conf目录中打开server.xml文件。
3.在打开的文件中,找到connector节点,然后修改端口号。
4.保存设置
重新启动Tomcat服务器
Web应用的目录结构
java的Web应用是由多种类型的文件构成的,这其中包括我们所编写的java类,JSP页面,各种静态资源,以及发布的描述文件。这些文件在Web应用目录的存放都是有一定限制和规定的。
在Tomcat的运行过程中,Tomcat类加载器会首先加载classes目录下的class文件,然后在加载lib目录下的类。
每个java Web应用都会由一个核心文件,即web.xml,此文件必须保存在WEB-INF目录下,它控制整个应用的行为方式和方法。
配置起始访问页面
如果希望用户在打开浏览器当访问应用根路径时自动进入首页面而不必输入完整的页面地址,方便用户访问,这时就需要在web.xml文件中进行相应的配置,
注意
- welcome-file:用于指定某一具体页面。
- welcome-file-list:元素可包含一个或多个welcome-file子元素,若没有找到第一个welcome-file子元素中指定文件,web容器会尝试显示第二个,以此类推
Jsp简介
实际上JSP是指在HTML中嵌入java脚本语言,当用户通过浏览器请求访问Web应用时,使用JSP容器对请求的JSP进行处理和运行,然后将生成的页面返回客户端浏览器进行显示,
JSP页面的组成
除了HTML标记和java代码,JSP中还可以包含其他一些元素,如果把它们细分,则JSP页面由静态内容,指令,表达式,小脚本,声明,标准动作,注释等元素构成,使用JSP实现动态网页开发,要熟悉JSP页面中包含什么元素,不同元素具备什么功能等。
示例4:一些常见的JSP页面元素
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.util.*,java.text.*"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>输出当前日期</title>
</head>
<!-- 这是HTML注释(客户端可以看到源代码) -->
<%--这是jsp注释(客户端无法看到源代码) --%>
<body>
你好,今天是
<%
//使用预定格式将日期转换为字符串
SimpleDateFormat form=new SimpleDateFormat("yyyy年MM月dd日");
String str = form.format(new Date());
%>
<%=str%>
<%! String declare="this is declaration";%>
<%=declare %>
<%="2"+"4" %>
</body>
</html>
以上示例一共包含了六种页面元素,分别是静态内容,指令,小脚本,表达式,声明,注释。
静态内容
静态内容是JSP页面中的静态文本,其基本是HTML文本,与java和JSP无关
JSP指令元素
page指令是针对当前页面进行设置的一种指令,通常位于JSP页面的顶端,在一个JSP页面中可以包含多尔page指令,需要注意,page指令只对当前页面有效。
语法
<@ page 属性1="属性值" 属性2="属性值1,属性值2" ..... 属性n="属性值"
如果没有对page指令中的某些属性进行设置,JSP容器将使用默认指令属性值,如果需要对page指令中的一个属性设置多个属性值,其间以逗号相互隔开。
text/html和charset=utf-8的设置之间使用分号隔开,它们同属于contentType属性值。
JSP脚本元素
在jsp页面中,将小脚本,表达式,声明,统称为JSP脚本元素,用于在JSP页面中嵌入java代码,实现页面的动态处理。
什么是小脚本
小脚本可以包含任意的javadiamagnet片段,形式比较灵活,通过在JSP页面中编写小脚本可以执行复杂的操作和业务处理。编写方式是将java片段插入<%%>标记中
示例:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>输入数组中的元素</title>
</head>
<body>
<%
int[] value={60,70,80};
for(int i:value){
out.print(i);
%>
<br />
<%
}
%>
</body>
</html>
在以上示例中注意不要遗漏for循环的结构符号 “}” 由于小脚本与HTML混合编写,这种错误既容易发生,又不好被发现。
2.什么是表达式
表达式是对数据的表示,系统将其作为一个值进行计算和显示,当需要页面中输出一个java变量或者表达式值时,使用表达式时非常方便的。其语法时<%=java变量或表达式%>当Web容器遇到表达式时,会先计算嵌入的表达式值或者变量值,然后将计算结果输入到页面中。
对以上示例进行修改:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
int[] value={60,70,80};
for(int i:value){
%>
<%=i%><br />
<%
}
%>
</body>
在整段java脚本中输出,可以使用out对象实现,而在HTML静态内容中嵌入动态数据则可以使用表达式来实现。
3.小脚本和表达式综合应用
示例:计算两个数的和
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>计算求和</title>
</head>
<body>
<%
int num1=5;
int num2=5;
int result=num1+num2;
%>
数字:<%=num1 %>和<%=num2 %>的求和结果为:<%=result %>
</body>
</html>
4.JSP声明
在编写JSP页面程序时,有时需要为java脚本定义成员变量和方法,这时就需要使用JSP声明来实现,语法如下
<%! Declaration;[Declaration;].........%>
下面通过一个示例具体了解声明的使用:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.text.*" %>
<%@ page import="java.util.*" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%!
public String formatDate(Date d){
SimpleDateFormat from= new SimpleDateFormat("yyyy年MM月dd日");
return from.format(d);
}
%>
第一次调用:今天是:<%=formatDate(new Date()) %>
<br/>
第二次调用:今天是:<%=formatDate(new Date()) %>
</body>
</html>
代码说明:声明一个方法名为formatDate,返回值为String类型的方法,这里使用的时完全限定名的方式引入SimpleDateFormat类,在调用时直接调用方法名即可。
JSP中的注释
HTM注释在客户端浏览器中查看源代码可以看到,儿JSP的注释看不到,安全性较高。
JSP元素小结
JSP执行过程
一旦Web容器把JSP文件翻译和编译完成,Web容器就会将编译好的字节码文件保存在内内存中,当客户端再次请求相同的JSP时,和可以重用这个编译好的字节码文件,而不会把同一个JSP重新进行翻译和编译,这就大大提高了Web应用系统的性能,如果对JSP进行了修改,再次访问该JSp页面,Web容器会重新执行翻译和编译。所以,JSP在第一个请求时比较满,后续访问比较快。
Web程序的调式与排错
下面列举一些常犯的错误
1.未启动Tomcat服务
2.未部署Web应用
URL输入错误
4.目录不能被引用