当前位置: 首页 > news >正文

小白学习java第16天(上): javaWeb

0.背景介绍

1.前言

首先我们需要javaweb里面的大概流程是干什么的,怎么才能实现的?,每一部分是靠什么进行的?以及背后实现的功能是干什么的?。。。。对于我来说要是不解决这些,会让我感觉不踏实!

首先既然是web开发,那么就是势必需要对于页面进行处理,你打开一个网站上面会出现两部分,一部分就是静态的网页(html,css,js)所有人都可以看到的页面!如百度的官网页面;但是另外一部分就是动态web,你要是进行登录就是呈现每个人都不一样的页面,(技术栈就是servlet,jsp,PHP。。),即:提供给所有人的数据始终会发生变化,每个人在不同的时间,不同的地点看到的信息各有不同!,动态web资源开发的技术统称为javaweb!

2.web应用程序

web应用程序:可以提供浏览器的访问程序。(需要理解就是我们能访问到的任何一个页面或者资源,都存在于这个世界某个角落的计算机上)

(不知道大家有没有和我一样的,服务器到底是什么呢,是一个计算机吗?)

这里就需要介绍tomcat服务器,tomcat可以理解为一个专门运行java网站程序的容器,它好像网站的“管家”,负责协调协调和管理用户访问网站的各种操作!那么里面真正进行处理执行的是什么呢?

1.环境搭建

1.1.Tomcat

1.1.1安装Tomcat

tomcat官网

tomcat下载,我下载是第9版本的!(64位的window)

1.1.2开始启动和关闭tomcat

这里有一个小细节就是你的端口号8080是不是被占用了,怎么判断是不是被占用了?

步骤:

1.打开cmd,查看端口号*(去任务管理器的服务中查看)

2.确实被我自己的浏览器服务占用,因此我们需要改端口号

3.然后我们就去tomcat文件夹下面去找config,里面的server文件,将里面的端口号进行修改,我改的是8081端口(最后搜一下就能出现小猫就算成功!!! )

然后就会出现(下面这个界面)

(那么为什么会这样的?)

首先我们看tomcat里面的配置文件下面的config文件里面的server配置

(端口号!)

(里面的执行文件)就是默认的去webapp里面去找,默认的里面的文件夹root

=========================================================================

回答网站是如何进行访问的???

 1.输入域名,回车!

2.检查本机的C:\Windows\System32\drivers\etc\hosts配置文件有没有这个域名映射;

2.1有,直接返回对应的ip地址,这个地址中,有我们需要访问的web程序,可以直接访问

2.2 没有;去DNS服务器找,找到的话就返回,找不到就返回找不到!

流程图如下:

=========================================================================

1.2.Maven

1.2.1我们为什么需要学习maven?

javaweb在开发中需要使用大量的jar包,手动的就太麻烦了,我觉得python简单是因为他可以使用自动导包很舒服,因此maven诞生!,他是一个工具他是一个架构的管理工具

maven的核心思想就是:约定大于配置。maven会规定好你该如何编写java代码!

1.2.2maven的下载安装和使用(我用的是3.6.3版本的)

打开官网进行下载:https://maven.apache.org/download.cgi

1.2.3配置环境:(老套路)

1.M2_HOME  Maven目录下的bin目录

2.MAVEN_HOME  Maven的目录

3.在系统中path配置 %Maven_HOME%/bin

测试:

1.2.4阿里云镜像:

修改一下镜像,因为访问国外的比较慢,因此我们需要镜像mirrors :加速我们的下载!

在config文件里面的setting里面找到mirrors里面进行!(下载下面这个代码!)

<!--下面是配置内容--><mirror><id>nexus-aliyun</id><mirrorOf>*,!jeecg,!jeecg-snapshots</mirrorOf><name>Nexus aliyun</name><url>http://maven.aliyun.com/nexus/content/groups/public</url></mirror>

1.2.5本地仓库

建立一个本地的仓库,创建一个文件夹maven-repo

然后再配置文件中添加配置:

1.2.6在idea中使用maven

网上有很多类似的资料进行解释https://www.cnblogs.com/bjynjj/p/18494523,可以详细参考这个

run里面显示这个就算成功了!(我们是勾选了web的框架模版的)

3.写第一个servlet程序

3.1编写一个servlet程序

首先我们需要知道servlet这个接口,然后再看他实现类

大概流程图就是

                                  

实现的代码:

public class HelloServlet extends HttpServlet {@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);}@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {System.out.println("响应!");PrintWriter writer = resp.getWriter();//响应流writer.print("hello servlet");}
}

那你现在写了java程序,怎么执行呢!我们的浏览器里面需要输入什么就可以显示这个呢?

代码:

 <!-- 配置servlet --><servlet><servlet-name>hello</servlet-name><servlet-class>com.xcl.servlet.HelloServlet</servlet-class></servlet><!-- 配置servlet映射 --><servlet-mapping><servlet-name>hello</servlet-name><url-pattern>/hello</url-pattern></servlet-mapping>

然后就是在idea中启动tomcat!(按照上面进行配置就行!)

3.

3.2servlet的原理:

                  

3.3web.xml中的mapping映射

一个请求指定一个映射路径

一个请求指定多个映射路径

  <!-- 配置servlet --><servlet><servlet-name>hello</servlet-name><servlet-class>com.xcl.servlet.HelloServlet</servlet-class></servlet><!-- 配置servlet映射 --><servlet-mapping><servlet-name>hello</servlet-name><url-pattern>/hello</url-pattern></servlet-mapping><servlet-mapping><servlet-name>hello</servlet-name><url-pattern>/hello1</url-pattern></servlet-mapping>

一个请求指定通用的映射路径

  <!-- 配置servlet --><servlet><servlet-name>hello</servlet-name><servlet-class>com.xcl.servlet.HelloServlet</servlet-class></servlet><!-- 配置servlet映射 --><servlet-mapping><servlet-name>hello</servlet-name><url-pattern>/*</url-pattern></servlet-mapping>

一个请求指定通用后缀映射路径-

  <!-- 配置servlet --><servlet><servlet-name>hello</servlet-name><servlet-class>com.xcl.servlet.HelloServlet</servlet-class></servlet><!-- 配置servlet映射 --><servlet-mapping><servlet-name>hello</servlet-name><url-pattern>/hello/*</url-pattern></servlet-mapping>

3.3ServletContext对象,这就是我们之后要操作的对象

就是我们不同servlet之间怎么进行通信呢?这就需要一个中间商进行之间的传递!

3.3.1代码演示(共享数据):

先是上传到上下文:

public class HelloServlet extends HttpServlet {@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);}@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {ServletContext servletContext = this.getServletContext();//获得上下文String username = "张三";servletContext.setAttribute("username", username);//传入到上下文里面System.out.println("hello,响应完成!");}
}

然后从上下文进行取出来:

public class GetServlet extends HttpServlet {@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);}@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {ServletContext servletContext = this.getServletContext();//获得上下文String username = (String) servletContext.getAttribute("username");//获取上下文里面的内容resp.setContentType("text/html;charset=utf-8");PrintWriter writer = resp.getWriter();writer.print("名字:" + username);}
}

3.3.2(请求转发,url是不会变的)

(这样是不是比较麻烦啊,我还需要在网页上面进行手动输入getC,因此我们需要再hello里面进行转发)

public class HelloServlet extends HttpServlet {@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);}@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {ServletContext servletContext = this.getServletContext();//获得上下文String username = "张三";servletContext.setAttribute("username", username);//传入到上下文里面System.out.println("hello,响应完成!");RequestDispatcher requestDispatcher = servletContext.getRequestDispatcher("/getC");//进行转发requestDispatcher.forward(req, resp);}
}

为什么url不变,那就需要我们知道转发和跳转有哪些不一样

3.4读取配置文件

配置文件放在资源目录下面!

package com.xcl.servlet;import com.sun.xml.internal.stream.buffer.sax.Properties;import javax.servlet.RequestDispatcher;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream;public class ServletDemo01 extends HttpServlet {@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);}@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//读取流servletContext流文件InputStream resourceAsStream = this.getServletContext().getResourceAsStream("/WEB-INF/classes/db.properties");//properties读取java.util.Properties properties = new java.util.Properties();properties.load(resourceAsStream);String user = properties.getProperty("username");String password = properties.getProperty("password");System.out.println("user:"+user);System.out.println("password:"+password);resp.getWriter().print(user + ":" + password);}
}

相关文章:

  • LLM开发——基于DeepSeek R1 和 Qwen 构建智能检索增强生成系统
  • STM32(M4)入门:定时器延时与系统滴答(价值 3w + 的嵌入式开发指南)
  • Java大厂面试:互联网医疗场景中的Spring Boot与微服务应用
  • 【应用密码学】实验二 分组密码(2)
  • 获取电脑mac地址
  • 特征工程三:数据特征之词干提取器(stemmer)
  • 如何有效防止 SQL 注入攻击?
  • 使用wavesurferJs实现录音音波效果
  • 数据可视化 —— 直方图
  • git 基础开发操作
  • memcpy 使用指南 (C语言)
  • Node.js API 安全的主要策略:最佳实践
  • 来自B站AIGC科技官的“vLLM简介“视频截图
  • FPGA时钟设计
  • XMOS直播声卡——可支持实时音频DSP处理的低延迟音频方案
  • 音频转base64
  • SQL面试之--明明建了索引为什么失效了?
  • C语言复习笔记--内存函数
  • 《代码整洁之道》第10章 类 - 笔记
  • 跨境电商货物体积与泡重计算器:高效便捷的物流计算工具
  • 早睡1小时,变化有多惊人?第一个就没想到
  • 全过程人民民主研究基地揭牌,为推动我国民主政治建设贡献上海智慧
  • 气温“过山车”现象未来或更频繁且更剧烈
  • 委员呼吁提高政府机构电话号码准确性,辽宁阜新回应
  • 铜钴巨头洛阳钼业一季度净利润同比大增九成,最新宣布超30亿元收购黄金资产
  • 为国出征指纹却无法识别?他刷新了我军在这一项目的最好成绩