初识jsp

1、程序结构

1.1、C/S结构介绍

C/S结构,即客户端/服务器结构,是一种常见的软件系统架构模式。在这种架构中,软件系统被分为两个主要部分:客户端和服务器端。客户端负责向服务器端发送请求,而服务器端则负责接收请求、处理数据,并将结果返回给客户端。

C/S结构的优势

  1. 分离关注点

    • 客户端负责用户交互,服务器端负责数据处理和管理,职责清晰,便于维护和扩展。
  2. 资源共享

    • 服务器可以被多个客户端共享,实现资源的集中管理和利用。
  3. 可伸缩性

    • 通过增加服务器的数量或提升服务器的性能,可以轻松处理更多的客户端请求。
  4. 安全性

    • 服务器端可以实施安全措施,如身份验证、授权和数据加密,以保护敏感信息。

C/S结构的适用场景

  • 企业级应用

    • 如ERP(企业资源规划)、CRM(客户关系管理)系统等,需要集中管理数据和业务逻辑。
  • 多人在线游戏

    • 游戏客户端与服务器交互,实现多人同时在线 gaming。
  • 银行和金融系统

    • 需要高度安全性和可靠性的交易处理系统。
  • 办公自动化系统

    • 如电子邮件系统、文档管理系统等。

C/S结构的挑战

  1. 部署和维护复杂

    • 客户端需要在每个用户设备上安装和更新,增加了部署和维护的成本。
  2. 网络依赖性

    • 客户端需要与服务器保持连接,网络故障或延迟会影响系统的可用性。
  3. 安全性风险

    • 服务器端可能面临黑客攻击、数据泄露等安全威胁,需要加强安全措施。

1.2、 B/S结构介绍

B/S结构,即浏览器/服务器结构,是一种基于Web的软件系统架构模式。在这种架构中,软件系统的前端通过网页浏览器与用户交互,后端在服务器上运行,负责处理业务逻辑和数据管理。用户通过浏览器发送请求到服务器,服务器处理请求并回送HTML、CSS和JavaScript等前端资源,浏览器负责解析和显示这些资源。

B/S结构的优势

  1. 易部署和维护

    • 由于客户端只是浏览器,无需安装专门的软件,降低了部署和维护的成本。
  2. 跨平台兼容性

    • 浏览器是跨平台的,用户可以在不同的操作系统和设备上访问系统,如Windows、macOS、Linux、移动设备等。
  3. 易于升级

    • 系统更新只需在服务器端进行,所有用户自动获得最新的功能和修补程序。
  4. 资源共享

    • 服务器可以被多个用户共享,实现资源的集中管理和利用。

B/S结构的适用场景

  • 企业内部管理系统

    • 如OA(办公自动化)、HR(人力资源管理)、库存管理等。
  • 电子商务平台

    • 在线购物、电子支付、用户评价等。
  • 教育和培训系统

    • 在线课程、学习管理、考试系统等。
  • 政府和公共事业

    • 电子政务、公共服务查询和办理等。

B/S结构的挑战

  1. 性能限制

    • 浏览器的性能和功能相对于桌面应用程序有限制,复杂的计算和图形处理可能受到影响。
  2. 安全风险

    • 由于通过互联网传输数据,可能会面临安全威胁,如SQL注入、跨站脚本攻击(XSS)、跨站请求伪造(CSRF)等。
  3. 用户体验

    • 相对于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.shshutdown.bat

2.4、Tomcat配置文件

  • server.xml:定义服务器、服务、连接器和Engine等组件的配置。
  • web.xml:定义Web应用程序的默认设置,如欢迎文件列表、Servlet映射等。
  • context.xml:定义Context级别的配置。

2.5、端口号配置

1. 修改HTTP端口号

要修改Tomcat的HTTP端口号,你需要编辑server.xml文件,该文件通常位于Tomcat安装目录的conf子目录下。

步骤:
  1. 打开conf/server.xml文件。
  2. 找到<Connector>元素,该元素定义了HTTP连接器的配置。
  3. 修改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指令属性

  1. contentType

    • 指定页面的MIME类型和字符编码。
    • 例如:contentType="text/html; charset=UTF-8"
  2. pageEncoding

    • 指定页面的字符编码。
    • 例如:pageEncoding="UTF-8"
  3. import

    • 导入Java包,以便在页面中使用。
    • 例如:import="java.util.*, com.example.*"
  4. session

    • 指定是否启用会话跟踪。
    • 值可以是truefalse
    • 例如:session="true"
  5. buffer

    • 设置输出缓冲区的大小。
    • 例如:buffer="8kb"
  6. autoFlush

    • 指定当缓冲区满时是否自动刷新。
    • 值可以是truefalse
    • 例如:autoFlush="true"
  7. isErrorPage

    • 指定该页面是否为错误处理页面。
    • 值可以是truefalse
    • 例如:isErrorPage="true"
  8. errorPage

    • 指定当页面发生错误时转向的错误处理页面。
    • 例如:errorPage="/error.jsp"
  9. language

    • 指定JSP页面使用的编程语言。
    • 例如:language="java"
  10. 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指令可以分开,但不能有重复的属性,除非它们有相同的值。
  • 某些属性,如contentTypepageEncoding,对于确保正确的字符编码和页面渲染至关重要。

通过合理使用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"

注意事项

  1. 代码复用

    • 由于小脚本中的代码直接嵌入在JSP页面中,可能会导致代码重复和维护困难。对于复杂的逻辑,建议使用自定义标签库(JSTL)或Java类来封装和复用代码。
  2. 性能和可读性

    • 大量使用小脚本可能会降低JSP页面的可读性和性能。应该尽量减少小脚本的使用,转而使用EL表达式(Expression Language,${})和JSTL来替代。
  3. 错误处理

    • 小脚本中的Java代码可能会抛出异常。确保在适当的地方捕获和处理异常,或者使用errorPage属性将错误定向到错误处理页面。

示例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>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值