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 {
	
	@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>");
	}
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MySql 计算同比、环比

一、理论 国家统计局同比、环比计算公式 增长速度是反映经济社会某一领域发展变化情况的重要数据&#xff0c;而同比和环比是反映增长速度最基础、最核心的数据指标&#xff0c;也是国际上通用的指标。在统计中&#xff0c; 同比和环比通常是同比变化率和环比变化率的简称&…

【bug 回顾】上传图片超时

测试 bug 问题分析 - 上传图片超时 最近在测试上遇到一个莫名奇妙的问题&#xff0c;最后也没有得到具体是哪块的原因&#xff0c;看各位大佬有没有思路&#xff1f;&#xff1f; 一 、背景 现在我们有三台服务器&#xff0c;用来布两套环境。其中另外一台服务器3配置的 tom…

打包项目报错:程序包javax.servlet不存在

背景&#xff1a; WebService项目在没有配置Tomcat的情况下重新打包&#xff0c;由于是直接导入别人写好的项目&#xff0c;没有配置其他环境&#xff0c;所以报错程序包javax.servlet不存在 解决方法&#xff1a; 找到servlet-api.jar包&#xff0c;导入到现有项目的SDK 重…

深圳锐科达SV-X7 sip话机与海康威视摄像头联动设置方法

深圳锐科达SV-X7 sip话机与海康威视摄像头联动设置方法 SIP对讲终端获取设备IP地址方式 通过长按速拨键3秒&#xff08;上电30秒后&#xff0c;即听到提示音后&#xff09;&#xff0c;待喇叭发出急促嘟嘟声&#xff0c;再快速按一下速拨键&#xff0c;设备自动语音播报本机的…

【开源】基于Vue.js的婚恋交友网站

项目编号&#xff1a; S 057 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S057&#xff0c;文末获取源码。} 项目编号&#xff1a;S057&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 会员管理模块2.3 新…

CentOS7 FTP服务创建

一、安装FTP sudo dnf install vsftpd 二、设置防火墙&#xff0c;允许访问FTP //给防火墙增加一个允许的ftp服务(--permanent永久生效,重启后依然生效) sudo firewall-cmd --permanent --zonepublic --add-serviceftp//修改完后需要重启防火墙 sudo firewall-cmd --reload …

CSS特效014: hover后左右开门的效果

CSS常用示例100专栏目录 本专栏记录的是经常使用的CSS示例与技巧&#xff0c;主要包含CSS布局&#xff0c;CSS特效&#xff0c;CSS花边信息三部分内容。其中CSS布局主要是列出一些常用的CSS布局信息点&#xff0c;CSS特效主要是一些动画示例&#xff0c;CSS花边是描述了一些CSS…

应对数据爆炸时代,揭秘向量数据库如何成为AI开发者的新宠,各数据库差异对比

项目设计集合&#xff08;人工智能方向&#xff09;&#xff1a;助力新人快速实战掌握技能、自主完成项目设计升级&#xff0c;提升自身的硬实力&#xff08;不仅限NLP、知识图谱、计算机视觉等领域&#xff09;&#xff1a;汇总有意义的项目设计集合&#xff0c;助力新人快速实…

【OpenCV实现图像:OpenCV利用Python创作热力图】

文章目录 概要读取图像图像灰度化**像素化效果**小结 概要 热力图是一种强大的统计图表&#xff0c;通过对数据进行色彩映射&#xff0c;直观展示了数据分布的热度和密度。在绘制热力图时&#xff0c;关键在于指定颜色映射的规则&#xff0c;这决定了图中不同数值的呈现方式。…

vue中为什么data属性是一个函数而不是一个对象

面试官&#xff1a;为什么data属性是一个函数而不是一个对象&#xff1f; 一、实例和组件定义data的区别 vue实例的时候定义data属性既可以是一个对象&#xff0c;也可以是一个函数 const app new Vue({el:"#app",// 对象格式data:{foo:"foo"},// 函数格…

NX二次开发UF_CAM_opt_ask_subtypes 函数介绍

文章作者&#xff1a;里海 来源网站&#xff1a;https://blog.csdn.net/WangPaiFeiXingYuan UF_CAM_opt_ask_subtypes Defined in: uf_cam.h int UF_CAM_opt_ask_subtypes(const char * opt_type_name, UF_CAM_opt_stype_cls_t subtype_class, int * count, const char * * *…

CBC算法实践Demo

效果图 全部代码 package encryption001;import javax.crypto.Cipher; import javax.crypto.spec.SecretKeySpec; import java.util.Base64;public class EncryptionDemo {// 加密算法private static final String ALGORITHM "AES";// 加密模式和填充方式private s…

软件工程--软件建模--结构化方法通俗语言总结(暴肝超详解)(包含数据流图、数据字典、ER图、结构化设计和优化......)

目录 结构化分析 数据流图DFD 定义数据字典 实体关系图&#xff08;E-R图&#xff09; 结构化设计 变换映射 事务映射 优化结构设计 实例分析 详细设计&#xff08;过程设计&#xff09; 结构化方法是一种系统化开发软件的方法&#xff0c;该方法基于模块化的思想&am…

使用vue-cli搭建vue项目

1&#xff1a;安装vue-cli 命令&#xff1a;npm install -g vue/cli 2&#xff1a;查看安装的版本 vue --version 或者 vue -V 3&#xff1a;创建项目 vue create 项目名称 名称小写 4&#xff1a;vue2框架中根据自己的需求选择&#xff08;我选择…

springboot+bootstrap+java农业电商服务商城系统_30249

本农业电商服务系统是为了提高用户查阅信息的效率和管理人员管理信息的工作效率&#xff0c;可以快速存储大量数据&#xff0c;还有信息检索功能&#xff0c;这大大的满足了管理员、会员和商家这三者的需求。操作简单易懂&#xff0c;合理分析各个模块的功能&#xff0c;尽可能…

系列二、为什么要使用ThreadLocal?

一、为什么要使用ThreadLocal&#xff1f; 1.1、概述 并发场景下&#xff0c;会存在多个线程同时修改一个共享变量的场景&#xff0c;这就有可能会出现线程安全的问题。为了解决线程安全问题&#xff0c;可以用加锁的方式&#xff0c;比如对核心代码使用synchronized或者Lock进…

排序算法--插入排序

实现逻辑 ① 从第一个元素开始&#xff0c;该元素可以认为已经被排序 ② 取出下一个元素&#xff0c;在已经排序的元素序列中从后向前扫描 ③如果该元素&#xff08;已排序&#xff09;大于新元素&#xff0c;将该元素移到下一位置 ④ 重复步骤③&#xff0c;直到找到已排序的元…

最新红盟云卡个人自动发卡开源系统源码+全开源无加密+虚拟商品在线售卖平台

源码简介&#xff1a; 最新红盟云卡个人自动发卡开源系统源码全开源无加密虚拟商品在线售卖平台&#xff0c;支持多个接口的个人免签功能。 红盟云卡系统是一款基于PHP和MySQL开发的虚拟商品在线售卖平台。它具备美观且功能丰富的发卡网站特性&#xff0c;并可与社区进行无缝…

数独·12中解法·anroid 数独小游戏·休闲益智小游戏

标题数独12中解法anroid 数独小游戏休闲益智小游戏&#xff08;继续更新中……&#xff09; 一款经典数独训练app 资源下载 &#xff08;0积分&#xff09;https://download.csdn.net/download/qq_38355313/88544810 —— —— 数独&#xff08;sh d&#xff09;是源自18世纪…

重磅!TikTok Shop将以新方式重启印尼业务

据报道&#xff0c;TikTok将通过与印尼电商平台合作的方式重启电商业务。 据悉&#xff0c;印尼合作社和中小企业部就TikTok Shop将在印尼重新开业的消息发表了讲话。合作社和中小企业部Temmy Satya Permana证实TikTok Shop将在印尼重新开业的消息。他表示&#xff0c;TikTok …