B032-服务器 Tomcat JavaWeb项目 Servlet

目录

      • 服务器
        • 服务器的认识
      • 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 {@Overridepublic void init() throws ServletException {// TODO Auto-generated method stubsuper.init();System.out.println("初始化");}@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// TODO Auto-generated method stubsuper.service(req, resp);System.out.println("服务");}@Overridepublic void destroy() {// TODO Auto-generated method stubsuper.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("出生");}@Overridepublic void init() throws ServletException {System.out.println("取名,上户口");}@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {System.out.println("工作");}@Overridepublic 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

	@Overridepublic 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{@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {System.out.println("get方法");}@Overrideprotected 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{@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {System.out.println("我是service...");}
}
HttpServletRequest对象

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

@WebServlet("/web")
public class MethodServlet extends HttpServlet{@Overrideprotected 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{@Overrideprotected 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.mzph.cn/news/157443.shtml

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

相关文章

同为科技(TOWE)工业连接器:保障高效、可靠、安全的电气连接

国内经济快速的发展&#xff0c;人们生活水平的不断提高&#xff0c;基础设施的建设是发展的基础&#xff0c;完善的基础设施对加速经济的发展起到至关重要的作用。其中&#xff0c;基础建设中机场、港口、电力、通讯等公共设施必须配套相应的电气设施&#xff0c;工业用插头插…

函数模板(成长版)

与普通函数区别&#xff1a;1.多了个template<class T>;2.某些确定类型变不确定类型T 一&#xff1a;引子&#xff1a; #include<iostream> using namespace std; template<typename T> T Max(T a, T b) {return a > b ? a : b; } int main() {int x, …

Mysql数据库 17.Mysql存储引擎

Mysql体系结构分为4层&#xff1a; 1.连接层 最上层是一些客户端和连接服务&#xff0c;包括大多数基于客户端/服务端工具实现的类似于TCP/IP的通信&#xff0c;主要功能是完成一些类似于连接处理、授权认证、安全方案等&#xff0c;在该层上还引入线程池的概念&#xff0c;为…

vue实现聊天栏定位到最底部(超简单、可直接复制使用)

原理 通过watch监听聊天内容的加载&#xff0c;一旦加载完成或者数据更新触发vue的数据监听时&#xff0c;就重新修改【滚动滑钮到滚动条顶部的距离滚动条的高度】&#xff0c;从而实现定位到底部的效果。 实现 1、布局 新建一个div&#xff08;聊天框&#xff0c;如下&…

微信收款助手消息不弹窗的解决办法

最近在做微信个人收款的回调&#xff0c;主要方法是根据通知栏截取收款信息&#xff0c;然后进行回调。 其中&#xff0c;发现一个问题&#xff0c;就是微信版本某次升级后&#xff0c;发现微信收款时不弹出消息了。 于是找到了这个解决方法&#xff0c;遇到相同问题的同学们…

Qt TCP相关的一些整理:服务端常见操作 socket 通信 network

目录 前言&#xff1a; 1、相关的库和类 2、服务端常用API 核心代码呈上&#xff1a; 前言&#xff1a; 在Qt的服务端上&#xff0c;不单单会用到服务端本身的API&#xff0c;对连接上来的客户端&#xff0c;也需要进行数据交互&#xff0c;也要用到一些收发包相关的…

代码随想录刷题】Day16 二叉树03

文章目录 1.【104】二叉树的最大深度&#xff08;优先掌握递归&#xff09;1.1 前言1.2 题目描述1.3 递归法java代码实现1.4 迭代法java代码实现1.5 相关练习题【559】N叉树的最大深度 2.【111】二叉树的最小深度&#xff08;优先掌握递归&#xff09;2.1 题目描述2.2 递归法ja…

力扣每日一题-美化数组的最少删除数-2023.11.21

力扣每日一题&#xff1a;美化数组的最少删除数 开篇 今天的力扣每日一题居然写出来了&#xff0c;好开心&#xff0c;迫不及待地把题目分享出来&#xff0c;希望你也能把它狠狠拿下。 题目链接: 2216.美化数组的最少删除数 题目描述 代码思路 创建一个list集合来保存数组&a…

c语言上机作业:给函数增加防御机制

1.题目 2.思路 1.首先&#xff0c;我们可以知道&#xff0c;我们必须先要把z求出来&#xff0c;但这里需要注意的是x&#xff0c;y并不包含了全部的定义域&#xff0c;所以我们必须先判断是否输入的数据满足条件。而这&#xff0c;就是我们所需要突破的函数的防御&#xff0c;…

.nvmrc 文件使用详解

文章目录 1. 前言2. .nvmrc 是什么3. 创建 .nvmrc 文件4. 使用 .nvmrc 文件5. 终端自动切换版本 1. 前言 当开发多个项目时&#xff0c;每个项目运行环境要求的 node 版本不一样&#xff0c;那么我们就需要给每个项目指定 node 版本&#xff0c;也就是通过终端执行 nvm install…

风丘电动汽车热管理方案 为您的汽车研发保驾护航

热管理技术作为汽车节能、提高经济性和保障安全性的重要措施&#xff0c;在汽车研发过程中具有重要作用。传统燃油汽车的热管理系统主要包括发动机、变速器散热系统和汽车空调&#xff0c;而电动汽车的热管理系统在燃油汽车热管理架构的基础之上&#xff0c;又增加了电机电控热…

Android HAL学习 及 与BSP的区别

Android HAL学习 及 与BSP的区别 参考链接&#xff1a; 1、https://www.cnblogs.com/looner/articles/11579335.html 2、https://blog.csdn.net/leesan0802/article/details/124087630 3、https://zhuanlan.zhihu.com/p/336531442 在HAL的学习之前&#xff0c;我们来先了解…

SPASS-指数平滑法

基本概念及统计原理 基本概念 指数平滑法的思想来源于对移动平均预测法的改进。指数平滑法的思想是以无穷大为宽度&#xff0c;各历史值的权重随时间的推移呈指数衰减&#xff0c;这样就解决了移动平均的两个难题。 统计原理 简单模型 Holt线性趋势模型 案例 为了研究上海市…

数据结构(c语言版) 树的遍历

作业要求 以如下图为例&#xff0c;完成树的遍历&#xff1a; 1、利用孩子兄弟表示法的存储结构 2、利用先根序列创建树 3、先根遍历树 4、后根遍历树 思考 预期的结果应该为&#xff1a; 1、先根创建树时需要输入的数据为&#xff1a; A B E 0 F 0 0 C 0 D G 0 0 0 0 2、…

七、HDFS文件系统的存储原理

1、总结 之所以把总结放在文件开头&#xff0c;是为了让读者对这篇文章有更好的理解&#xff0c;&#xff08;其实是因为我比较懒……&#xff09; 对于整个HDFS文件系统的存储原理&#xff0c;我们可以总结为一句话&#xff0c;那就是&#xff1a; 分块备份 2、存储结构和问题…

使用Navicat将SQL server数据库导入mysql数据库

使用Navicat将SQL server数据库导入mysql数据库 1、使用Navicat Premium打开MySql数据库&#xff0c;然后新建一个数据库名&#xff08;该数据库名称为需要从SqlServer数据库导过来的名称&#xff0c;mysql只有小写&#xff0c;不影响&#xff09; 比如需要将SqlServer数据库…

计数排序+桶排序 详讲(思路+图解+代码详解)

文章目录 计数排序和桶排序一、计数排序概念&#xff1a;写法一&#xff1a;写法二&#xff1a; 二、桶排序概念代码 计数排序和桶排序 一、计数排序 时间复杂度&#xff1a;空间复杂度&#xff1a;稳定性&#xff1a;稳定 概念&#xff1a; 非基于比较的排序 计数排序又称为…

PACS系统源码,WORKLIST数字化工作流程,影像数字化存储,电子报告书写、胶片打印

PACS系统源码 可与医院HIS、LIS无缝连接 PACS系统以实现医学影像数字化存储、诊断为核心任务&#xff0c;从医学影像设备&#xff08;如CT、CR、DR、MR、DSA、RF等&#xff09;获取影像&#xff0c;集中存储、综合管理医学影像及病人相关信息&#xff0c;建立数字化工作流程。 …

文章系列2:Unraveling the functional dark matter through global metagenomics

这篇文章发布于2023年10月nature。通讯作者是来自于 DOE Joint Genome Institute, Lawrence Berkeley National Laboratory, Berkeley, CA, USA. 背景介绍&目标 作者首先背景介绍了两种主流宏基因组分析方法&#xff0c;包括reads-based reference mapping&#xff08;eg…

chromium114添加新的语言国际化支持

一、需求说明 需要chromium114支持新语言体系,例如藏语,蒙古语,苗语等 二、操作步骤 1. build/config/locales.gni修改 在all_chrome_locales变量中添加新的语种标识,如下图。 2. 添加编译文件,告诉浏览器在编译时需要加载和输出那些文件 尝试编译出现错误一提示。需要…