初识jsp
1、程序结构
1.1、C/S结构介绍
C/S结构,即客户端/服务器结构,是一种常见的软件系统架构模式。在这种架构中,软件系统被分为两个主要部分:客户端和服务器端。客户端负责向服务器端发送请求,而服务器端则负责接收请求、处理数据,并将结果返回给客户端。
C/S结构的优势
-
分离关注点:
- 客户端负责用户交互,服务器端负责数据处理和管理,职责清晰,便于维护和扩展。
-
资源共享:
- 服务器可以被多个客户端共享,实现资源的集中管理和利用。
-
可伸缩性:
- 通过增加服务器的数量或提升服务器的性能,可以轻松处理更多的客户端请求。
-
安全性:
- 服务器端可以实施安全措施,如身份验证、授权和数据加密,以保护敏感信息。
C/S结构的适用场景
-
企业级应用:
- 如ERP(企业资源规划)、CRM(客户关系管理)系统等,需要集中管理数据和业务逻辑。
-
多人在线游戏:
- 游戏客户端与服务器交互,实现多人同时在线 gaming。
-
银行和金融系统:
- 需要高度安全性和可靠性的交易处理系统。
-
办公自动化系统:
- 如电子邮件系统、文档管理系统等。
C/S结构的挑战
-
部署和维护复杂:
- 客户端需要在每个用户设备上安装和更新,增加了部署和维护的成本。
-
网络依赖性:
- 客户端需要与服务器保持连接,网络故障或延迟会影响系统的可用性。
-
安全性风险:
- 服务器端可能面临黑客攻击、数据泄露等安全威胁,需要加强安全措施。
1.2、 B/S结构介绍
B/S结构,即浏览器/服务器结构,是一种基于Web的软件系统架构模式。在这种架构中,软件系统的前端通过网页浏览器与用户交互,后端在服务器上运行,负责处理业务逻辑和数据管理。用户通过浏览器发送请求到服务器,服务器处理请求并回送HTML、CSS和JavaScript等前端资源,浏览器负责解析和显示这些资源。
B/S结构的优势
-
易部署和维护:
- 由于客户端只是浏览器,无需安装专门的软件,降低了部署和维护的成本。
-
跨平台兼容性:
- 浏览器是跨平台的,用户可以在不同的操作系统和设备上访问系统,如Windows、macOS、Linux、移动设备等。
-
易于升级:
- 系统更新只需在服务器端进行,所有用户自动获得最新的功能和修补程序。
-
资源共享:
- 服务器可以被多个用户共享,实现资源的集中管理和利用。
B/S结构的适用场景
-
企业内部管理系统:
- 如OA(办公自动化)、HR(人力资源管理)、库存管理等。
-
电子商务平台:
- 在线购物、电子支付、用户评价等。
-
教育和培训系统:
- 在线课程、学习管理、考试系统等。
-
政府和公共事业:
- 电子政务、公共服务查询和办理等。
B/S结构的挑战
-
性能限制:
- 浏览器的性能和功能相对于桌面应用程序有限制,复杂的计算和图形处理可能受到影响。
-
安全风险:
- 由于通过互联网传输数据,可能会面临安全威胁,如SQL注入、跨站脚本攻击(XSS)、跨站请求伪造(CSRF)等。
-
用户体验:
- 相对于C/S架构,B/S架构可能在用户体验和界面交互方面稍显不足,但随着技术的发展,这种差距正在缩小。
2、Web服务器
2.1、常见Web服务器
-
IIS ( Micro Soft )
-
Tomcat ( Apache ) 【重点】
-
WebLogic ( Oracle )
-
WebSphere ( IBM )
-
Nginx
-
…
2.2、Tomcat服务器
Apache Tomcat是一个开源的Web服务器和Servlet容器,用于运行Java web应用程序。它是实现Java Servlet和JavaServer Pages(JSP)技术的标准平台之一。Tomcat由Apache软件基金会维护,是轻量级的、高效的服务器,特别适用于开发和部署基于Java的动态Web应用程序。
2.2、Tomcat目录结构
典型的Tomcat安装目录包含以下几个主要部分:
- bin/:包含启动、停止Tomcat的脚本和工具。
- conf/:存放配置文件,如server.xml、web.xml等。
- lib/:包含Tomcat所需的JAR文件。
- logs/:存放日志文件。
- webapps/:默认的Web应用程序部署目录,可以将WAR文件放在这里进行部署。
- work/:存放JSP编译后的Servlet文件。
2.3、Tomcat启动和停止
- 启动:在bin目录下运行
startup.sh
(Unix/Linux)或startup.bat
(Windows)。 - 停止:在bin目录下运行
shutdown.sh
或shutdown.bat
。
2.4、Tomcat配置文件
- server.xml:定义服务器、服务、连接器和Engine等组件的配置。
- web.xml:定义Web应用程序的默认设置,如欢迎文件列表、Servlet映射等。
- context.xml:定义Context级别的配置。
2.5、端口号配置
1. 修改HTTP端口号
要修改Tomcat的HTTP端口号,你需要编辑server.xml
文件,该文件通常位于Tomcat安装目录的conf
子目录下。
步骤:
- 打开
conf/server.xml
文件。 - 找到
<Connector>
元素,该元素定义了HTTP连接器的配置。 - 修改
port
属性的值为你想要的端口号。
例如,将端口号从默认的8080改为8081:
<Connector port="8081" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
2.6、web.xml配置
2.61、会话超时配置
全局配置:
- 在
web.xml
文件中,可以设置默认的会话超时时间。 - 该文件位于
$CATALINA_BASE/conf
目录下。
<session-config>
<session-timeout>30</session-timeout>
<!-- 30 minutes -->
</session-config>
2.62、欢迎页配置
全局欢迎文件:
- 在
$CATALINA_BASE/conf/web.xml
中,可以定义全局的欢迎文件列表。
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
3、Idea 创建Web工程
3.0、前言
由于笔者这里创建项目时没有Java Enterprise这个选项,所以这里提供一种通过添加框架的方法来创建项目。
如果你的IDEA在创建项目时有Java Enterprise这个选项,就直接创建JavaEnterprise项目即可
3.1、通过添加框架创建Web工程
1.先创建一个普通的intelij的java项目
2.在左边目录选择项目名
3.双击shift 搜索 add Framework Support
4.勾选Web Application
5.设置Tomcat
Edit Configurations中
3.2、解决addParameter报错
通过这种方式创建的项目有时idea会提示报错,但是实际上没有问题,应该怎么解决呢?
这里提供一种笔者解决的方式:
在本地下载tomcat的文件目录下\apache-tomcat-9.0.48\lib,复制jsp-api.jar和servlet-api.jar这两个文件到项目目录下。
放到web/lib目录下(默认需要自己创建这个lib文件夹)
右键jar包,选择Add as Library。
然后找到Project Structure -> artifacts,双击右侧Avalilable Elements中刚才引入的jar包,双击后jar包会移动到左侧,将两个jar包都双击移动后,点击apply后即可解决问题。
4、Jsp
4.1、JSP概念
JSP 是 Java Server Pages 的简称,意为 Java 服务器页面。其支持 Java 代码与 HTML 代码混合使用来完成页面的编写。
4.2、JSP page指令
在JSP(JavaServer Pages)中,Page指令用于定义整个JSP页面的属性和行为。Page指令在页面的顶部使用,并且在整个页面中只允许出现一次,尽管它可以被分割成多个指令。Page指令通常以<%@ page %>
的形式出现。
常见的Page指令属性
-
contentType:
- 指定页面的MIME类型和字符编码。
- 例如:
contentType="text/html; charset=UTF-8"
-
pageEncoding:
- 指定页面的字符编码。
- 例如:
pageEncoding="UTF-8"
-
import:
- 导入Java包,以便在页面中使用。
- 例如:
import="java.util.*, com.example.*"
-
session:
- 指定是否启用会话跟踪。
- 值可以是
true
或false
。 - 例如:
session="true"
-
buffer:
- 设置输出缓冲区的大小。
- 例如:
buffer="8kb"
-
autoFlush:
- 指定当缓冲区满时是否自动刷新。
- 值可以是
true
或false
。 - 例如:
autoFlush="true"
-
isErrorPage:
- 指定该页面是否为错误处理页面。
- 值可以是
true
或false
。 - 例如:
isErrorPage="true"
-
errorPage:
- 指定当页面发生错误时转向的错误处理页面。
- 例如:
errorPage="/error.jsp"
-
language:
- 指定JSP页面使用的编程语言。
- 例如:
language="java"
-
extends:
- 指定JSP页面生成的Servlet类所继承的父类。
- 例如:
extends="org.apache.jsp.BaseJspClass"
示例
以下是一个包含多个属性的Page指令示例:
<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" import="java.util.*, com.example.*" session="true" buffer="8kb" autoFlush="true" isErrorPage="false" errorPage="/error.jsp" language="java" extends="org.apache.jsp.BaseJspClass" %>
分割Page指令
虽然Page指令应该在整个页面中只出现一次,但你可以将其分割成多个指令,每个指令包含一部分属性:
<%@ page contentType="text/html; charset=UTF-8" %>
<%@ page pageEncoding="UTF-8" %>
<%@ page import="java.util.*, com.example.*" %>
<%@ page session="true" buffer="8kb" autoFlush="true" %>
<%@ page isErrorPage="false" errorPage="/error.jsp" %>
<%@ page language="java" extends="org.apache.jsp.BaseJspClass" %>
注意事项
- 所有Page指令必须在JSP页面的开头,位于任何HTML内容之前。
- 多个Page指令可以分开,但不能有重复的属性,除非它们有相同的值。
- 某些属性,如
contentType
和pageEncoding
,对于确保正确的字符编码和页面渲染至关重要。
通过合理使用Page指令,可以有效地控制JSP页面的行为和特性,从而提高开发效率和代码的可维护性。
4.3、 JSP小脚本
在JSP(JavaServer Pages)中,小脚本(Scriptlet)是一种嵌入在JSP页面中的Java代码片段,允许开发者在JSP页面中执行Java逻辑。小脚本通过<% %>
标签包围,可以在其中编写任意的Java代码。
小脚本的使用
小脚本可以用于执行各种Java操作,如变量声明、条件判断、循环、方法调用等。它们非常适合在JSP页面中嵌入动态内容或处理业务逻辑。
语法
<% Java代码 %>
示例
1. 简单输出
下面的示例演示了如何在JSP页面中使用小脚本输出变量内容:
<%
String name = "World";
out.println("Hello, " + name);
%>
在这个例子中,name
变量被定义并赋值为"World"
,然后通过out.println
方法将其输出到页面上。
2. 条件判断
小脚本也支持条件判断和分支逻辑:
<%
int age = 18;
if (age >= 18) {
out.println("You are an adult.");
} else {
out.println("You are a minor.");
}
%>
在这个例子中,根据age
变量的值,输出的内容会有所不同。
3. 循环
小脚本还支持各种循环结构:
<%
for (int i = 0; i < 5; i++) {
out.println("Iteration: " + i + "<br>");
}
%>
这个例子中,循环将执行五次,并输出每次循环的迭代次数。
4. 使用外部变量
小脚本还可以访问和操作JSP页面中的内置对象和外部变量:
<%
String user = request.getParameter("user");
if (user == null) {
user = "Guest";
}
out.println("Welcome, " + user + "!");
%>
在这个例子中,user
变量从请求参数中获取,如果未提供,则默认为"Guest"
。
注意事项
-
代码复用:
- 由于小脚本中的代码直接嵌入在JSP页面中,可能会导致代码重复和维护困难。对于复杂的逻辑,建议使用自定义标签库(JSTL)或Java类来封装和复用代码。
-
性能和可读性:
- 大量使用小脚本可能会降低JSP页面的可读性和性能。应该尽量减少小脚本的使用,转而使用EL表达式(Expression Language,
${}
)和JSTL来替代。
- 大量使用小脚本可能会降低JSP页面的可读性和性能。应该尽量减少小脚本的使用,转而使用EL表达式(Expression Language,
-
错误处理:
- 小脚本中的Java代码可能会抛出异常。确保在适当的地方捕获和处理异常,或者使用
errorPage
属性将错误定向到错误处理页面。
- 小脚本中的Java代码可能会抛出异常。确保在适当的地方捕获和处理异常,或者使用
示例JSP页面
以下是一个完整的JSP页面示例,演示了小脚本的各种用法:
<%@ page contentType="text/html; charset=UTF-8" %>
<!DOCTYPE html>
<html>
<head>
<title>JSP Scriptlet Example</title>
</head>
<body>
<h1>JSP Scriptlet Example</h1>
<%
// 输出简单的文本
out.println("<p>This is a simple JSP scriptlet.</p>");
// 条件判断
int age = 20;
if (age >= 18) {
out.println("<p>You are an adult.</p>");
} else {
out.println("<p>You are a minor.</p>");
}
// 循环
out.println("<ul>");
for (int i = 1; i <= 5; i++) {
out.println("<li>Item " + i + "</li>");
}
out.println("</ul>");
// 使用外部变量
String user = request.getParameter("user");
if (user == null) {
user = "Guest";
}
out.println("<p>Welcome, " + user + "!</p>");
%>
</body>
</html>