【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.xdnf.cn/news/4448.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Qt多边形填充/不填充绘制

1 填充多边形绘制形式 void GraphicsPolygonItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) {Q_UNUSED(option);Q_UNUSED(widget);//painter->setPen(pen()); // 设置默认画笔//painter->setBrush(brush()); // 设置默…

为何打造智慧园区?给我们带来哪些便利

在当今社会&#xff0c;智慧园区作为一种创新的城市发展模式&#xff0c;受到越来越多城市规划者和开发商的关注。打造智慧园区旨在通过信息技术、智能设备和数据互联等手段&#xff0c;提升城市管理的效率、改善居民生活质量、推动可持续发展。下面将探讨为什么要打造智慧园区…

6:arm condition code flags详细的讲解

目录 6.1 arm的 condition code flag 的详细讲解 6.1.1C 6.1.2Z 6.1.3N 6.1.4V 6.1 arm的 condition code flag 的详细讲解 在这篇文章中&#xff0c;我更加严格与严谨的讲解一下 arm的四个condition code flags&#xff0c;因为这个在汇编中还是非常重要的。 6.1.1C 在…

scala学习记录,Set,Map

set&#xff1a;集合&#xff0c;表示没有重复元素的集合&#xff0c;特点&#xff1a;唯一 语法格式&#xff1a;val 变量名 Set [类型]&#xff08;元素1&#xff0c;元素2...&#xff09; 可变不可变 可变&#xff08;mutable&#xff09;可对元素进行添加&#xff0c;删…

Linux权限解析:用户、组和权限的协同

​​​​​​​在Linux系统中&#xff0c;权限决定了谁能做什么。本文将指导你如何掌握这些权限&#xff0c;以确保你的系统既安全又高效&#xff01; 目录 1.shell命令及其运行原理 2.Linu权限的概念 (1) 用户 (2) 切换用户命令su (3) 指令提权命令sudo (4) 什么是权限…

Centos Linux 7 搭建邮件服务器(postfix + dovecot)

准备工作 1. 一台公网服务器&#xff08;需要不被服务商限制发件收件的&#xff0c;也就是端口25、110、143、465、587、993、995不被限制&#xff09;&#xff0c;如有防火墙或安全组需要把这些端口开放 2. 一个域名&#xff0c;最好是com cn org的一级域名 3. 域名备案&am…

Python绘制完整正弦余弦函数曲线

1&#xff0c;将正弦函数&#xff0c;余弦函数及坐标轴绘制在同一个界面方便对比观察&#xff0c;不同函数的曲线变化 import turtle # 导入turtle图形库&#xff0c;用于绘图 import math # 导入math库&#xff0c;用于数学计算&#xff0c;如三角函数# 设置绘图窗口 scre…

TON链上的代币开发与小程序开发:模式与要求

TON&#xff08;The Open Network&#xff09;链是由Telegram团队开发的区块链网络&#xff0c;旨在提供更快、更高效、更去中心化的基础设施&#xff0c;支持智能合约、去中心化应用&#xff08;DApp&#xff09;以及多种数字资产和代币的创建。随着TON链生态的不断成熟&#…

CTF中的phar反序列化 [SWPU 2018]SimplePHP

以[SWPU 2018]SimplePHP 这道题为例 页面可以查看文件和上传文件 点击查看文件,发现url变成/file.php?file 猜测可能存在文件包含,可以读取文件 尝试读取index.php文件 回显了源码 再读取base.php 只看最后有信息的代码: <!--flag is in f1ag.php--> 提示flag在f1…

图文并茂java源码解析-HashMap

文章目录 HashMap结构HashMap的Entry了解的哈希冲突解决方法有哪些?HashMap是线程安全的吗?hashmap的put过程介绍一下jdk8的获取hash的方法jdk8的获取索引的方法 hashmap的put过程介绍一下hashmap 调用get方法一定安全吗?HashMap一般用什么做Key?为啥String适合做Key呢?为…

【JavaEE】认识进程

一、操作系统&#xff08;operating system&#xff09; 操作系统是一组做计算机资源管理的软件的统称&#xff0c;它能够把一个计算机上的所有硬件资源和软件资源都管理好&#xff1a;能够管理好各种硬件资源&#xff0c;让他们很好的相互配合&#xff0c;能够管理好各种软件…

Android——横屏竖屏

系统配置变更的处理机制 为了避免横竖屏切换时重新加载界面的情况&#xff0c;Android设计了一中配置变更机制&#xff0c;在指定的环境配置发生变更之时&#xff0c;无需重启活动页面&#xff0c;只需执行特定的变更行为。该机制的视线过程分为两步&#xff1a; 修改 Androi…

基于卷积神经网络(CNN)的时间序列预测,15个输入1个输出,可以更改数据集,MATLAB代码

1. 数据收集与预处理 数据清洗&#xff1a;处理缺失值、异常值等。特征工程&#xff1a;提取有助于预测的特征。数据标准化&#xff1a;将时间序列数据标准化&#xff0c;使其具有零均值和单位方差&#xff0c;有助于模型训练。滑动窗口划分&#xff1a;将时间序列数据划分为多…

css 文字一行没有放满不进行换行

在开发过程中&#xff0c;经常会出现一行的文字没有放满 就出现了换行的情况 word-break: break-all;

社区团购 2.0 版本发展与创新模式研究:融合新元素的机遇与挑战

摘要&#xff1a;本文深入探讨了社区团购 2.0 版本的发展模式&#xff0c;以便利连锁店为核心的新形态对传统社区团购的冲击和革新。同时&#xff0c;分析了山东小爱联盟推动的爱客优选模式特点&#xff0c;包括佣金体系、运营模式等。在此基础上&#xff0c;研究如何将开源 AI…

isaac sim 14 物理学习(车辆动力学)

文章内容均来自博客文章、官方文档手册等 参考内容 Nvidia Isaac Sim代码编程 入门教程 2024&#xff08;7&#xff09;_isaac sim franka-CSDN博客 Python Bindings API — omni_physics 106.1 documentation Physics — Omniverse IsaacSim latest documentation Vehicle…

理解Laravel中的pipeline

pipeline在laravel的启动过程中出现次数很多&#xff0c;要了解laravel的启动过程和生命周期&#xff0c;理解pipeline就是其中的一个关键点。网上对pipeline的讲解很少&#xff0c;所以我自己写一写吧。 首先还是来看看调用栈&#xff0c;也就是从一个请求开始到返回响应&…

基于uniapp和java的电动车智能充电系统软件平台的设计

文章目录 项目介绍具体实现截图技术介绍mvc设计模式小程序框架以及目录结构介绍错误处理和异常处理java类核心代码部分展示详细视频演示源码获取 项目介绍 对电动车智能充电系统进行设计和开发。通过使用本系统可有效地减少运营成本&#xff0c;提高管理效率。 根据近年来社会…

使用css和html制作导航栏

代码 <!DOCTYPE html> <html><head><meta charset"utf-8"><title></title><style>*{margin: 0;padding: 0;}#m{background-color: antiquewhite;width: 100%;height: 50px;}#i{float: left;width: 100px;height: 50px;li…

怎样使用pycharm的服务?

‌在PyCharm中使用服务器的步骤如下‌&#xff1a; ‌打开PyCharm&#xff0c;选择“File”->“Settings”‌。‌选择左侧工具栏中的“Project:…”‌&#xff0c;然后选择“Python Interpreter”。‌点击右上角的“Add Interpreter”‌&#xff0c;选择“On SSH”。‌如果…