【Java Web】搭建Web环境以及初识JSP Tomcat

文章目录

    • 程序架构
    • Web服务器
    • Tomcat
    • JSP概述
      • 主要特点
      • 基本语法
      • 综合示例
      • 程序调试和排错
    • 代码示例

程序架构

C/S(Client/Server,客户端/服务器)和 B/S(Browser/Server,浏览器/服务器)是两种常见的软件系统架构模式。它们各自有不同的特点和适用场景。

  • C/S 架构 (客户端/服务器)

    在C/S架构中,应用程序被分成两部分:客户端程序和服务器端程序。客户端通常提供用户界面,负责与用户的交互,并处理一些本地的数据处理任务;而服务器端则主要负责数据的存储、检索以及处理复杂的业务逻辑。

  • B/S 架构 (浏览器/服务器)

    B/S架构是一种特殊的C/S架构形式,这里的客户端指的是Web浏览器。用户通过浏览器访问网页来使用服务,所有的业务逻辑和数据处理都由服务器端完成,然后将结果返回给浏览器展示给用户。

B/S 架构采用 请求/响应模式 进行交互

在这里插入图片描述

Web服务器

Web服务器是一种软件或硬件设备,它通过HTTP(超文本传输协议)或其他网络协议来响应来自客户端的请求,并提供网页和其他网络资源。这些资源可以是HTML文件、图片、视频、文档等。Web服务器是构成万维网的基础之一。Web服务器的选择取决于多种因素,包括性能需求、成本预算、技术支持、安全性要求等。常见的Web服务器有Apache HTTP Server、Nginx、Microsoft IIS等。

常用的Web服务器以及它们的特点:

  1. Microsoft IIS (Internet Information Services)
    • IIS是微软提供的一个功能强大的Web服务器,它支持HTTP、HTTPS、FTP等协议。
    • 它与Windows操作系统紧密集成,并且提供了良好的.NET框架支持。
    • IIS常用于托管ASP.NET应用程序。
  2. Apache HTTP Server
    • Apache是最广泛使用的开源Web服务器之一,以其稳定性和灵活性著称。
    • 它可以在多种操作系统上运行,包括Linux、Windows等。
    • Apache支持广泛的模块扩展,允许定制以满足不同的需求。
  3. Nginx
    • Nginx是一个高性能的Web服务器,也经常被用作反向代理服务器和负载均衡器。
    • 它特别擅长处理静态内容以及高并发连接的情况。
    • Nginx在性能优化方面表现出色,尤其是在资源有限的环境中。
  4. Oracle WebLogic Server
    • WebLogic是由Oracle提供的一款全面的企业级应用服务器。
    • 它支持Java EE标准,适合开发和部署大规模分布式企业应用。
    • WebLogic除了作为Web服务器外,还提供了事务管理、消息传递等功能。
  5. IBM WebSphere Application Server
    • WebSphere是IBM开发的一个企业级应用服务器。
    • 它同样支持Java EE标准,并且集成了许多高级特性如安全性、集群支持等。
    • WebSphere适用于大型企业的复杂业务环境。

Apache Tomcat 实际上并不是一个完整的Web服务器,而是一个Servlet容器,专门用来执行Java Servlets和JSP页面。Tomcat可以作为一个独立的应用服务器来使用,但通常它不会直接提供静态文件服务,而是配合像Apache或Nginx这样的Web服务器一起工作。

Tomcat

Apache Tomcat 是一个开源的、轻量级的Web服务器和Servlet容器,它实现了 Java Servlet 和 JavaServer Pages (JSP) 规范。Tomcat 由 Apache 软件基金会开发,并且是 Jakarta 项目的一部分。Tomcat 主要用于运行基于 Java 的 Web 应用程序,特别是那些使用 Servlet 和 JSP 技术的应用。

  • Apache Tomcat® - Welcome!

Tomcat 目录结构

目录说明
/bin存放各种平台下用于启动和停止 Tomcat 的脚本文件
/conf存放 Tomcat 服务器的各种配置文件
/lib存放 Tomcat 服务器所需的各种JAR文件
/logs存放 Tomcat 的日志文件
/tempTomcat 运行时用于存放临时文件
/webapps当发布 Web 应用时,默认情况下会将 Web 应用的文件存放于此目录中
/workTomcat 把由 JSP 生成的 Servlet 放于此目录下

Tomcat 启动与停止:

1.将文件或项目放入 webapps 目录下
2.双击 bin\startup.bat 文件启动 tomcat
3.双击 bin\shutdown.bat 文件停止 tomcat

修改 Tomcat 默认端口号:/conf/server.xml

<Connector port="8888" protocol="HTTP/1.1"connectionTimeout="20000"redirectPort="8443" URLEncoding="utf-8"/>

修改项目初始化页面:/WEB-INF/web.xml

<welcome-file-list><welcome-file>hello.jsp</welcome-file>
</welcome-file-list>

在 IntelliJ IDEA 中配置一个 Web 项目并将其打包成 WAR 文件

第一步,将项目添加为 Web 项目:【File】-【Project Structure】-【Project Settings】-【Faces】-【Add】-【Web】

在这里插入图片描述

第二步,创建 WAR 包作为 Artifact:【File】-【Project Structure】-【Project Settings】-【Artifacts】-【Add】…

在这里插入图片描述

JSP概述

JSP(JavaServer Pages)是一种用于创建动态网页的技术,它允许开发者将静态HTML内容与Java代码混合编写。JSP页面在服务器端被编译成Servlet,并由Servlet容器(如Apache Tomcat)执行,最终生成HTML响应发送给客户端浏览器。JSP是Sun Microsystems(现在是Oracle Corporation的一部分)开发的一种技术,作为Java技术家族的一部分。

  • 运行在服务器端的Java页面

  • 使用HTML嵌套Java代码实现

工作原理

在这里插入图片描述

主要特点

嵌入式Java代码

  • 开发者可以直接在HTML中嵌入Java代码片段,这些代码可以处理业务逻辑、数据库交互等。
  • 通过使用 <% %> 标签来包含Java代码块。

表达式语言 (EL)

  • JSP支持一种简单的表达式语言,可以在页面上直接输出变量的值或执行简单的计算。
  • 例如:${user.name} 可以用来显示user对象的name属性。

标准标签库 (JSTL)

  • JSTL提供了一组预定义的标签,使得在JSP页面中进行条件判断、循环遍历等操作变得更加容易。
  • 例如,<c:if>, <c:forEach>, <fmt:formatDate> 等标签。

模板化和重用

  • JSP支持包括自定义标签在内的多种机制,以实现页面元素的重用。
  • 包括<jsp:include>指令和自定义标签库。

自动更新

  • 当JSP页面发生变化时,大多数Servlet容器会自动重新编译JSP文件,这有助于快速开发和调试。

内置对象

  • JSP提供了几个内置的对象,如request, response, session, out, application等,这些对象可以直接在JSP页面中使用,简化了对HTTP请求和响应的处理。

易于学习和使用

  • 对于熟悉HTML和基本Java知识的开发者来说,JSP相对容易上手。
  • 它提供了一种直观的方式来构建动态Web应用。

基本语法

脚本元素:用于嵌入Java代码。

<% int a = 10;out.println(a);
%>

out 对象是 JSP 的内置对象,无需实例化即可使用。实现数据的输出显示

out 对象方法

  • print:向页面输出显示
  • println:向页面输出显示,在结尾处添加换行

声明:用于声明方法或成员变量。

<%!private int count = 0;public void incrementCount() {count++;}
%>

使用<%%>声明局部变量、使用<%!%>声明全局变量

表达式:用于输出数据到页面。

<%= "Hello, World!" %>
<%= "输出\"转义字符\""%>
<%= count %>

输出字符串和变量,注意后边不要加 ;

JSP指令:影响整个JSP页面的行为。

page指令通过属性定义了JSP的特性,实现与JSP容器的通信

<%@ page language="属性值" import="属性值" contentType="属性值"%>

  • language:指定JSP页面使用的脚本语言
  • import:通过该属性来引用脚本语言中使用到的类文件
  • contentType:用来指定页面的MIME类型,以及字符编码方式
<% // 设置页面内容类型 %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %> 
<%-- 导入Java类 --%>
<%@ page import="java.util.Date"%> 

动作元素:提供结构化的功能,比如转发请求、包含其他资源等。

<jsp:forward page="anotherPage.jsp"/>
<jsp:include page="header.jsp"/>

JSP注释:<%--JSP注释--%>

JSP脚本中注释:<%//单行注释%><%/*多行注释*/%>

综合示例

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page import="java.util.Date" %><%// 声明并初始化局部变量int count = 42;
%><!DOCTYPE html>
<html>
<head><title>示例页面</title>
</head>
<body><h1>欢迎访问我们的网站</h1><p><%= "Hello, World!" %></p><p>当前的计数是: <%= count %></p>
</body>
</html>

JSP 执行过程

在这里插入图片描述

JSP(JavaServer Pages)的基本运行原理和过程可以概括为:

  1. 请求接收:Web服务器接收到对JSP页面的请求。
  2. 翻译:首次请求或JSP文件更新时,JSP容器将JSP文件翻译成一个Servlet源文件。
  3. 编译:Servlet源文件被编译成字节码(.class文件)。
  4. 初始化:Servlet被加载到内存并初始化。
  5. 服务:Servlet处理请求,执行业务逻辑,并生成响应内容。
  6. 响应:生成的HTML响应发送回客户端浏览器显示。

后续请求会直接使用已编译的Servlet来提高效率。

程序调试和排错

在Web应用程序开发和部署过程中,经常会遇到各种错误。404错误和500错误是两种常见的HTTP状态码,分别表示不同的问题:

404 错误 - Not Found(找不到访问的页面或资源)

常见原因:

  1. URL输入错误:用户输入的URL不正确,或者请求的资源路径不存在。
  2. 将页面放在WEB-INF下:WEB-INF目录下的资源是受保护的,不能直接通过URL访问。
  3. 外部启动Tomcat,未部署项目:Tomcat服务器已经启动,但没有将项目部署到服务器上,或者部署路径不正确。
  4. 文件或目录被删除或移动:请求的文件或目录已经被删除或移动到其他位置。

500 错误 - Internal Server Error(内部服务器错误)

常见原因:

  1. JSP页面代码有误:JSP页面中的Java代码或脚本元素有语法错误或其他编程错误。
  2. 页面无法显示:可能是由于配置问题、类路径问题、依赖库缺失等导致页面无法正常渲染。
  3. 未启动Tomcat:如果Tomcat服务器没有启动,任何请求都会失败,尽管这通常会导致连接超时而不是500错误。

web.xml 错误页面配置

<error-page><error-code>404</error-code><location>/error/404.html</location>
</error-page>
<error-page><error-code>500</error-code><location>/error/500.html</location>
</error-page>

除了404和500错误之外,还有一些其他常见的错误:

  • 403 Forbidden:请求被服务器拒绝,可能是由于权限不足或资源被保护。
  • 400 Bad Request:客户端发送的请求有误,可能是格式不正确或缺少必要的参数。
  • 503 Service Unavailable:服务暂时不可用,可能是由于服务器过载或维护中。
  • 502 Bad Gateway:作为网关或代理的服务器从上游服务器收到了无效的响应。
  • 504 Gateway Timeout:作为网关或代理的服务器未能及时从上游服务器收到响应。

代码示例

从数据库中获取供应商列表,并将其显示在一个 HTML 表格中。

页面使用两种不同的方法实现:传统的 Java 脚本片段(<% %>)和 JSTL 标签库(<c:forEach>)。

  • 传统 Java 脚本片段:直接在 JSP 页面中编写 Java 代码来遍历和显示数据。
  • JSTL 标签:使用 JSTL 标签库中的 <c:forEach> 标签来遍历和显示数据。
<%@ page import="com.dao.SmbmsProviderDao" %>
<%@ page import="com.dao.impl.SmbmsProviderDaoImpl" %>
<%@ page import="java.util.List" %>
<%@ page import="com.pojo.SmbmsProvider" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html><head><title>供应商信息</title></head><body><%// SmbmsProviderDao 和 SmbmsProvider 是已定义的类SmbmsProviderDao smbmsProviderDao = new SmbmsProviderDaoImpl();List<SmbmsProvider> smbmsProviderList = smbmsProviderDao.findAll();%><table border="1"><tr><th>ID</th><th>proCode</th><th>proName</th><th>proDesc</th></tr><% for(SmbmsProvider smbmsProvider : smbmsProviderList){ %><tr><td><%= smbmsProvider.getId()%></td><td><%= smbmsProvider.getProCode()%></td><td><%= smbmsProvider.getProName()%></td><td><%= smbmsProvider.getProDesc()%></td></tr><% } %></table></body>
</html>

导入 JAR 包

jstl.jarservlet-api.jarjsp-api.jar

引入 JSTL 核心标签库

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

将集合放入请求作用域

使得 <c:forEach> 标签能够通过EL表达式访问到集合

<%
SmbmsProviderDao smbmsProviderDao = new SmbmsProviderDaoImpl();
List<SmbmsProvider> smbmsProviderList = smbmsProviderDao.findAll();
request.setAttribute("smbmsProviderList", smbmsProviderList);
%>

显示数据(使用 JSTL 标签)

<c:forEach items="${smbmsProviderList}" var="provider" ><tr><td>${provider.id } </td><td>${provider.proCode } </td><td>${provider.proName } </td><td>${provider.proDesc } </td></tr>
</c:forEach>

<c:forEach> 标签

  • items="${smbmsProviderList}":指定要迭代的集合。
  • var="provider":定义一个变量名,用于表示每次迭代中的当前元素。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/465158.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何建购物网站提升用户体验

在构建一个购物网站时&#xff0c;用户体验是至关重要的&#xff0c;它直接影响到顾客的满意度和转化率。为了提升用户体验&#xff0c;可以从以下几个方面入手。 首先&#xff0c;网站设计应简洁明了。确保导航栏清晰易懂&#xff0c;让用户在寻找商品时不会迷失。此外&#x…

qt QTableView详解

1、概述 QTableView 是 Qt 框架中的一个高级视图类&#xff0c;用于以表格形式展示二维数据。它基于 QAbstractItemView&#xff0c;并与模型&#xff08;通常是 QAbstractTableModel 或 QStandardItemModel&#xff09;结合使用&#xff0c;以实现数据的展示和交互。QTableVi…

Android TextView自动换行文本显示不全解决

某些情况下&#xff0c;TextView自动换行后&#xff0c;会出现每行结尾处显示不全的问题&#xff0c; 如图&#xff1a; 常见解决方案&#xff1a; 设置TextView的“ellipsize”属性为“end” 实测无效&#xff01;将TextView外部的Layout改为RelativeLayout 实测无效&…

Rust 力扣 - 1461. 检查一个字符串是否包含所有长度为 K 的二进制子串

文章目录 题目描述题解思路题解代码题目链接 题目描述 题解思路 长度为k的二进制子串所有取值的集合为[0, sum(k)]&#xff0c;其中sum(k)为1 2 4 … 1 << (k - 1) 我们只需要创建一个长度为sum(k) 1的数组 f &#xff0c;其中下标为 i 的元素用来标记字符串中子串…

typescript的简介

简介 tsc npm install -g typescripttsc -v作用 检查类型和语法错误&#xff0c;提前纠错 ts的类型 如何穿件带有ts的vue工程 作用 常见类型 用法 编写一个ts文件 let username:string "John";let age:number 25;let isUpdated:boolean true;let data:any &q…

一文搞懂:AI网关这个新东西是什么意思?有没有开源免费的选择?

AI网关是什么意思&#xff1f;有什么用&#xff1f; AI网关是企业应用与内外部大模型之间的桥梁&#xff0c;它位于企业应用与内外部大模型的调用交汇点。 AI网关的主要功能 是 将应用请求 通过集中管理模块 转发给 1 内部自建模型、2 外部大模型服务提供商&#xff0c;甚至 …

在Java中,实现数据库连接通常使用JDBC

学习总结 1、掌握 JAVA入门到进阶知识(持续写作中……&#xff09; 2、学会Oracle数据库入门到入土用法(创作中……&#xff09; 3、手把手教你开发炫酷的vbs脚本制作(完善中……&#xff09; 4、牛逼哄哄的 IDEA编程利器技巧(编写中……&#xff09; 5、面经吐血整理的 面试技…

机器人零位、工作空间、坐标系及其变换,以UR5e机器人为例

机器人中的主要坐标系 在机器人中&#xff0c;常用的坐标系包括&#xff1a; 基坐标系&#xff08;Base Frame&#xff09;&#xff1a;固定在机器人基座上的坐标系&#xff0c;用于描述机器人的整体位置和方向&#xff0c;是其他所有坐标系的参考点。 连杆坐标系&#xff08…

CSS的配色

目录 1 十六进制2 CSS中的十六进制2.1 十六进制颜色的基本结构2.2 十六进制颜色的范围2.3 简写形式2.4 透明度 3 CSS的命名颜色4 配色4.1 色轮4.2 互补色4.3 类似色4.4 配色工具 日常在开发小程序中&#xff0c;客户总是希望你的配色是美的&#xff0c;但是美如何定义&#xff…

STM32——ADC

目录 1、ADC的介绍 2、ADC主要特征 3、ADC结构与引脚 4、ADC配置流程 5、示例&#xff08;光敏电阻的ADC采样&#xff09; 6、提示 7、结语&#xff1a; 1、ADC的介绍 12位ADC是一种逐次逼近型模拟数字转换器。它有多达18个通道&#xff0c;可测量16个外部和2个内部 信号…

Node.js——fs模块-同步与异步

本文的分享到此结束&#xff0c;欢迎大家评论区一同讨论学习&#xff0c;下一篇继续分享Node.js的fs模块文件追加写入的学习。

Python | Leetcode Python题解之第528题按权重随机选择

题目&#xff1a; 题解&#xff1a; class Solution:def __init__(self, w: List[int]):self.pre list(accumulate(w))self.total sum(w)def pickIndex(self) -> int:x random.randint(1, self.total)return bisect_left(self.pre, x)

道品科技的水肥一体化智能灌溉:开启现代农业的创新征程

水肥一体化智能灌溉作为一种现代农业技术&#xff0c;其通过对水分与养分供应的有效整合&#xff0c;致力于营造作物的最佳生长环境。此项技术的核心要义在于凭借智能化系统精准把控灌溉与施肥的流程&#xff0c;进而提升水资源的利用效率&#xff0c;降低肥料的浪费程度&#…

GitHub个人主页美化

效果展示 展示为静态效果&#xff0c;动态效果请查看我的GitHub页面 创建GitHub仓库 创建与GitHub用户名相同的仓库&#xff0c;当仓库名与用户名相同时&#xff0c;此仓库会被视作特殊仓库&#xff0c;其README.md&#xff08;自述文件&#xff09;会展示在GitHub个人主页…

QT5串口多线程--派生类加moveToThread

QT5串口多线程--派生类加moveToThread Chapter1 QT5串口多线程--派生类加moveToThread前言新建工程源码serialobject.hserialobject.cppmanager.hmanager.cppwidget.hwidget.cpp 测试 Chapter2 QT在PC开发中多串口通信有哪些方法方法实现方案一&#xff1a;需要注意的是&#x…

框架学习01-Spring

一、Spring框架概述 Spring是一个开源的轻量级Java开发框架&#xff0c;它的主要目的是为了简化企业级应用程序的开发。它提供了一系列的功能&#xff0c;包括控制反转&#xff08;IOC&#xff09;、注入&#xff08;DI&#xff09;、面向切面编程&#xff08;AOP&#xff09;…

十年码农的编程心得分享

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…

【网络安全】|nessus使用

1、扫描结果分析&#xff1a; Sev&#xff1a;漏洞的严重性级别 CVSS&#xff1a;量化漏洞严重性的标准&#xff0c;通过计算得出一个分数&#xff0c;分数越高表示漏洞越严重。 VPR&#xff1a;基于风险的评分系统&#xff0c;帮助组织优先处理风险最高的漏洞。 EPSS&#xf…

为什么越来越多人开始用云电脑?网友道出了真相

近期&#xff0c;3A游戏大作《黑神话&#xff1a;悟空》的横空出世&#xff0c;成功激起大多数人对国产游戏的兴趣。然而&#xff0c;没有一台高配置的电脑&#xff0c;就无法在《黑神话&#xff1a;悟空》中获得震撼的游戏体验。想要配齐处理器、显卡、内存等硬件&#xff0c;…

W6100-EVB-Pico2评估板介绍

目录 1 简介 2 硬件资源 2.1 硬件规格 2.2 引脚定义 2.3 工作条件 3 参考资料 3.1 RP2350 数据表 3.2 W6100 数据表 3.3 原理图 原理图 & 物料清单 & Gerber 文件 3.3 尺寸图&#xff08;尺寸&#xff1a;mm&#xff09; 3.4 参考例程 认证 CE FCC 4 硬…