B032-服务器 Tomcat JavaWeb项目 Servlet

news2024/11/15 21:00:13

目录

      • 服务器
        • 服务器的认识
      • Tomcat服务器
        • Tomcat服务器的介绍
        • Tomcat的安装
        • Tomcat报错的情况
        • Tomcat要启动成功的条件
      • JavaWeb项目
        • Web的项目结构
        • 发布项目的第一种方式
        • 发布项目的第二种方式
      • Eclipse中搭建动态Web项目
      • eclipse安装Tomcat插件
      • servlet
        • servlet示例
        • servlet的执行流程
        • servlet分析
        • servlet的生命周期
        • ServletConfig
        • get和post的区别
        • HttpServletRequest对象
        • HttpServletResponse对象

服务器

服务器的认识

在这里插入图片描述
java代码要用web服务器运行起来,才能被浏览器访问的到。

Tomcat服务器

Tomcat服务器的介绍
  1. web服务器:用来运行我们的web(java)项目。运行起来我们的项目才能被浏览器(不仅仅是我自己的浏览器同一个局域网其他的也行)访问
  2. 开源、免费、轻量级
  3. 基于java代码写的,运行时需要java环境
    A:编辑环境变量,JAVA_HOME,(jdk的安装目录)
    B:path里面编辑一个值,%JAVA_HOME%\bin
    Jdk1.8只需要配置这么多就行了
Tomcat的安装

解压即安装
在这里插入图片描述

Tomcat报错的情况
  1. 端口被占用
  2. 写了中文但server.xml不是utf-8的编码 (记事本选文件选另存为选UTF-8)
Tomcat要启动成功的条件
  1. 下载tomcat8解压(不需要安装 不用配置tomcat的环境变量)
  2. 一定要有java环境,其中一定要有JAVA_HOME,jdk版本要对 ( java -version (cmd) )
  3. 其他起来里面报404是因为webapps里没有文件,如果里面有文件还是报404,可能是改了配置文件(重新解压原来的tomcat)

JavaWeb项目

Web的项目结构

在这里插入图片描述
web.xml可以不要,也可以去tomcat里面找

发布项目的第一种方式

html文件挡在项目根目录里面(与WEB-INF同级)
启动tomcat,访问http://localhost:8080/OA/test.html
不推荐

发布项目的第二种方式

在这里插入图片描述

Eclipse中搭建动态Web项目

1.新建动态web项目,项目名称随便写
在这里插入图片描述
2.定义字节码文件存放的位置
在这里插入图片描述
3.内容目录与前面对应,勾选创建web.xml
在这里插入图片描述
4.把Html文件放入webapp目录里
5.把该项目webapp的路径放入Tomcat的server.xml里
启动Tomcat
访问http://localhost:8080/test3.html

tips:
动态的web项目可以写jsp java代码,静态项目只能写html

新建项目后未能显示:下三角标 - Select Working Set - edit - add

WEB-INF下的classes是放字节码文件的 eclipse默认不显示,只有不显示才是正常的(害怕你删字节码文件)
我们可以之间去工作空间看classes文件是否存在

eclipse安装Tomcat插件

上面这种方式比较麻烦,每次都要去tomcat的安装目录里去启动,我们可以在eclipse里安装和配置Tomcat插件来方便操作,方式如下

1.把以下插件文件放到Eclipse文件夹下的plugins文件夹里,然后重启
在这里插入图片描述
2.把插件关联到Tomcat
在这里插入图片描述

servlet

servlet示例

上述只能访问html,不能访问java,如果要访问java,必须要用servlet

导包
在这里插入图片描述
tips:

如何导入并查看源码?
见视频

eclipse输入提示怎么打开?
打开Eclipse并点击顶部菜单栏上的“Window”菜单项。
在下拉菜单中,选择“Preferences”选项。
在打开的窗口中,导航到“Java” > “Editor” > “Content Assist”。
在右侧窗格中,找到“Auto Activation”部分,并勾选“Enable auto activation”复选框。
在“Auto Activation triggers for Java”字段中,输入字符(“ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz.”),用于触发代码提示。您可以输入多个字符,但请注意不要删除现有字符。
单击“OK”按钮保存更改。

HttpServletTest

public class HttpServletTest extends HttpServlet {
	
	@Override
	public void init() throws ServletException {
		// TODO Auto-generated method stub
		super.init();
		System.out.println("初始化");
	}
	
	@Override
	protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		// TODO Auto-generated method stub
		super.service(req, resp);
		System.out.println("服务");
	}
	
	@Override
	public void destroy() {
		// TODO Auto-generated method stub
		super.destroy();
		System.out.println("销毁");
	}
}

servlet建好后,需要用web.xml来访问

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>TomcatAndservlet</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  
  <servlet>
    <servlet-name>HttpServlet</servlet-name>
  	<servlet-class>com.itsource.servlet._02HttpServlet.HttpServletTest</servlet-class>
  </servlet>
  
  <servlet-mapping>
  	<servlet-name>HttpServlet</servlet-name>
  	<url-pattern>/xx</url-pattern>
  </servlet-mapping>
</web-app>

访问:localhost/xx

servlet的执行流程

在这里插入图片描述

servlet分析

1.servlet的作用就是让我们的浏览器能访问到java代码
2.servlet是规范,java不去实现,由各大服务器厂商去实现
3.所以tomcat里面就有对servlet的实现包 jar

servlet的生命周期

在这里插入图片描述
LifeServlet

public class LifeServlet extends HttpServlet{
	
	public LifeServlet(){
		System.out.println("出生");
	}
	
	@Override
	public void init() throws ServletException {
		System.out.println("取名,上户口");
	}
	
	@Override
	protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		System.out.println("工作");
	}
	
	@Override
	public void destroy() {
		System.out.println("立遗嘱,正常死亡");
	}
}

web.xml

  <servlet>
    <servlet-name>LifeServlet</servlet-name>
  	<servlet-class>com.itsource.servlet._03LifeServlet.LifeServlet</servlet-class>
  </servlet>
  
  <servlet-mapping>
  	<servlet-name>LifeServlet</servlet-name>
  	<url-pattern>/xxx</url-pattern>
  </servlet-mapping>

启动tomcat,浏览器多次访问http://localhost/xxx,正常停止tomcat,看控制台

信息: Server startup in 632 ms
出生
取名,上户口
工作
工作
工作
十一月 20, 2023 3:20:25 下午 org.apache.catalina.core.StandardServer await
信息: A valid shutdown command was received via the shutdown port. Stopping the Server instance.
十一月 20, 2023 3:20:25 下午 org.apache.coyote.AbstractProtocol pause
信息: Pausing ProtocolHandler ["http-nio-80"]
十一月 20, 2023 3:20:25 下午 org.apache.coyote.AbstractProtocol pause
信息: Pausing ProtocolHandler ["ajp-nio-8009"]
十一月 20, 2023 3:20:26 下午 org.apache.catalina.core.StandardService stopInternal
信息: Stopping service Catalina
立遗嘱
十一月 20, 2023 3:20:26 下午 org.apache.catalina.core.ApplicationContext log
信息: SessionListener: contextDestroyed()

< load-on-startup >:启动tomcat时即执行了构造与初始化方法,后面访问只会执行service方法
放在< servlet-class >下面,值不为负数,数值越大优先级越高

  <servlet>
    <servlet-name>LifeServlet</servlet-name>
  	<servlet-class>com.itsource.servlet._03LifeServlet.LifeServlet</servlet-class>
  	<load-on-startup>0</load-on-startup>
  </servlet>
  
  <servlet-mapping>
  	<servlet-name>LifeServlet</servlet-name>
  	<url-pattern>/xxx</url-pattern>
  </servlet-mapping>

两种说法
在这里插入图片描述

ServletConfig

可以拿到配置参数,了解即可,有时候可以用来解决硬编码的问题,比如设置字符编码集

web.xml

  <servlet>
    <servlet-name>LifeServlet</servlet-name>
  	<servlet-class>com.itsource.servlet._03LifeServlet.LifeServlet</servlet-class>
  	<init-param>
  		<param-name>encode</param-name>
  		<param-value>UTF-8</param-value>
  	</init-param>
  	<load-on-startup>0</load-on-startup>
  </servlet>
  
  <servlet-mapping>
  	<servlet-name>LifeServlet</servlet-name>
  	<url-pattern>/xxx</url-pattern>
  </servlet-mapping>

LifeServlet

	@Override
	public void init(ServletConfig config) throws ServletException {
		System.out.println(config.getServletName());
		System.out.println(config.getInitParameter("encode"));
		System.out.println("init...");;
	}
get和post的区别

可以用@WebServlet注解取代在web.xml里配置servlet,简化编写流程

@WebServlet("/web")
public class MethodServlet extends HttpServlet{
	
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		System.out.println("get方法");
	}
	
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		System.out.println("post方法");
	}
}

webapp下新建User.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<form action="/web" method="get">
		账号:<input type="text" name="name"><br>
		密码:<input type="password" name="password">
		<input type="submit" value="get">
	</form>
	<br>
	<form action="/web" method="post">
		账号:<input type="text" name="name"><br>
		密码:<input type="password" name="password">
		<input type="submit" value="post">
	</form>
</body>
</html>

浏览器访问测试:http://localhost/User.html,两个按钮会走到对应的方法

doGet方法和doPost方法可以合并为service方法,不管post或get请求,都会走service方法

@WebServlet("/web")
public class MethodServlet extends HttpServlet{
	
	@Override
	protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		System.out.println("我是service...");
	}
}
HttpServletRequest对象

可以拿到请求里的各种信息

@WebServlet("/web")
public class MethodServlet extends HttpServlet{
	
	@Override
	protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		req.setCharacterEncoding("utf-8");
		String name = req.getParameter("name");
		String password = req.getParameter("password");
		System.out.println("name: "+name);
		System.out.println("password: "+password);
		
		String accept = req.getHeader("Accept");
		System.out.println("Accept: "+accept);
	}
}
HttpServletResponse对象

用来向前端返回信息

@WebServlet("/web")
public class MethodServlet extends HttpServlet{
	
	@Override
	protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		req.setCharacterEncoding("utf-8");
		String name = req.getParameter("name");
		String password = req.getParameter("password");
		System.out.println("name: "+name);
		System.out.println("password: "+password);
		String accept = req.getHeader("Accept");
		System.out.println("Accept: "+accept);
		
		resp.setContentType("text/html;charset=utf-8");
		PrintWriter writer = resp.getWriter();
		
		if(!"小王".equals(name)){
			writer.print("<H1>账号不正确<H1>");
			return;
		}
		if(!"123456".equals(password)){
			writer.print("<H1>密码不正确<H1>");
			return;
		}
		writer.print("<H1>登录成功<H1>");
	}
}

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

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

相关文章

专访特斯拉工程师杨硕:跟着机器人上天入地、探索地外行星丨智源独家

导读 十几岁时&#xff0c;他痴迷《终结者》&#xff0c;曾在百科全书中窥见卡内基梅隆大学机械臂的介绍&#xff0c;从而得知了研究机器人「圣地」的存在。 在CMU&#xff0c;他深耕足式机器人感知定位算法&#xff0c;期待未来涉足太空&#xff0c;走上火星。 在大疆&#xf…

【Linux】:共享内存

共享内存 一.原理二.创建共享内存1.shmget2.写一个共享内存代码 三.进行通信1.各种接口2.各接口使用代码3.一次简单的通信四.共享内存的特点 一.原理 直接原理 共享内存顾名思义就是共同使用的一块空间。 很明显操作系统需要对这块内存进行管理&#xff0c;那么就避免不了先描…

C#,数值计算——插值和外推,PolCoef的计算方法与源程序

1 文本格式 using System; namespace Legalsoft.Truffer { /// <summary> /// polynomial coefficients from polynomial values /// </summary> public class PolCoef { public PolCoef() { } /// <summary>…

CSDN流量卷领取和使用保姆级教程——流量卷,恭喜获得每日任务奖励【1500曝光】可获得新增曝光,阅读转化,点赞转化,新增关注-流量卷,流量卷,流量卷

希望本文能够给您带来一定的帮助&#xff0c;文章粗浅&#xff0c;敬请批评指正&#xff01; 目录 话不多说&#xff0c;直接上干货&#xff1a; 第一步&#xff1a;流量卷领取教程&#xff1a;点击内容管理&#xff1a;​编辑 第二步&#xff1a;点击首页&#xff1a;​编辑…

上海亚商投顾:北证50指数大涨 机器人概念股掀涨停潮

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 一.市场情绪 三大指数昨日震荡反弹&#xff0c;黄白二线有所分化&#xff0c;题材热点轮动表现。北证50指数大涨超3%&#…

深入解析数据结构与算法之堆

文章目录 &#x1f966;引言&#xff1a;&#x1f966;什么是堆&#x1f966;大顶堆与小顶堆&#x1f9c4;大顶堆&#xff08;Max Heap&#xff09;&#x1f9c4;小顶堆&#xff08;Min Heap&#xff09; &#x1f966;堆的表示&#x1f9c4;数组表示&#xff1a;&#x1f9c4;…

智能座舱架构与芯片- (8) 视觉篇

一、概述 相比起用于ADAS感知系统的摄像头&#xff0c;用于智能座舱内部的摄像头&#xff0c;其功能特性和性能要求相对简单。例如&#xff0c;OMS乘客监控摄像头&#xff0c;一般达到5MP即可有良好的效果。同时&#xff0c;OMS也可应用于车内会议系统&#xff0c;还应用于车内…

利用OpenCV实现图片中导线的识别

下面是一个需求&#xff0c;识别图片中的导线&#xff0c;要在图像中检测导线&#xff0c;我们需要采用不同于直线检测的方法。由于OpenCV没有直接的曲线检测函数&#xff0c;如同它对直线提供的HoughLines或HoughLinesP&#xff0c;检测曲线通常需要更多的图像处理步骤和算法&…

多线程的概念

点击链接返回标题-> 什么是进程&#xff1f; 进程&#xff08;Process&#xff09;&#xff0c;是程序的基本执行实体。 在早期面向进程设计的计算机结构中&#xff0c;进程是程序的基本执行实体&#xff1b; 在当代面向线程设计的计算机结构中&#xff0c;进程是线程的容器…

上海亚商投顾:沪指冲高回落 短剧、地产股集体走强

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 一.市场情绪 三大指数早盘冲高&#xff0c;创业板指盘初涨超1%&#xff0c;午后则集体下行翻绿&#xff0c;北证50一度大涨…

MyBatis:关联查询

MyBatis 前言关联查询附懒加载对象为集合时的关联查询 前言 在 MyBatis&#xff1a;配置文件 文章中&#xff0c;最后介绍了可以使用 select 标签的 resultMap 属性实现关联查询&#xff0c;下面简单示例 关联查询 首先&#xff0c;先创建 association_role 和 association_…

win11,引导项管理

1&#xff0c;打开cmd,输入msconfig 2,进入引导选项卡 3&#xff0c;删除不需要的引导项

Go语言常用命令详解(三)

文章目录 前言常用命令go get示例参数说明 go install示例参数说明 go list示例 go mod示例参数说明 go work基本用法示例 go tool示例 go version示例 go vet示例 总结写在最后 前言 接着上一篇继续介绍Go语言的常用命令 常用命令 以下是一些常用的Go命令&#xff0c;这些命…

支付宝生僻字选择器

本文的数据来源于支付宝网页版本生僻字选择器。 let rareWords[{spell: "a",words: ["奡", "靉", "叆"]}, {spell: "b",words: ["仌", "昺", "竝", "霦", "犇", "愊…

mysql底层是如何存放数据的

总览 首先总的来说&#xff0c;分为四个层级&#xff0c;行页区段。行就是数据库里的一行数据。 但一次从磁盘读进内存的数据量是一页&#xff08;页是读写的单位&#xff0c;默认16KB一页&#xff09;&#xff0c;页分很多种类&#xff0c;例如数据页、溢出页、undo日志页。 …

Rust语言精讲:数据类型全解析

大家好&#xff01;我是lincyang。 今天&#xff0c;我们将深入探讨Rust语言中的数据类型&#xff0c;这是理解和掌握Rust的基础。 Rust语言数据类型概览 Rust是静态类型语言&#xff0c;所有变量类型在编译时确定。Rust的数据类型分为两类&#xff1a;标量类型和复合类型。…

909-2014-T3

文章目录 1.原题2.算法思想3.关键代码4.完整代码5.运行结果 1.原题 有n个顶点的无向图&#xff0c;使用邻接矩阵作为存储结构。为减少存储空间&#xff0c;使用数组按照行主映射方式仅保存下三角矩阵。请给出映射公式&#xff0c;并编写算法计算给定顶点的度。叙述算法思想并用…

基于ubuntu20.04安装ros系统搭配使用工业相机

基于ubuntu20.04安装ros系统搭配使用工业相机 1. ROS系统安装部署1.1更新镜像源1.1.1 备份源文件1.1.2 更新阿里源1.1.3 更新软件源 1.2 ros系统安装1.2.1 添加ros软件源1.2.2 添加秘钥1.2.3 更新软件源1.2.4 配置及更换最佳软件源1.2.5 ROS安装1.2.6 初始化rosdep1.2.7 设置环…

【Hello Go】Go语言文本文件处理

文本文件处理 字符串处理字符串操作ContainsJoinindexrepeatReplaceSplitTrimFields 字符串转换AppendFormatParse 正则表达式Json处理编码Json通过结构体生产Json通过map生产json 解码Json解析到结构体解析到interface 文件操作相关api介绍建立和打开文件关闭文件写文件读文件…

基于Apache部署虚拟主机网站

文章目录 Apache释义Apache配置关闭防火墙和selinux 更改默认页内容更改默认页存放位置个人用户主页功能基于口令登录网站虚拟主机功能基于ip地址相同ip不同域名相同ip不同端口 学习本章完成目标 1.httpd服务程序的基本部署。 2.个人用户主页功能和口令加密认证方式的实现。 3.…