javaweb08 javaweb、tomcat、maven简介、servlet原理和实例、Mapping映射、请求转发和读取properties文件

news2025/5/14 14:55:42

文章目录

      • 一、javaweb简介
      • 二、Tomcat
      • 三、Maven
      • 四、Servlet简介和HelloWorld
      • 五、Servlet原理
      • 六、Mapping映射
      • 七、ServletContext
      • 八、请求转发
      • 九、读取资源文件properties

一、javaweb简介

在java中,动态web资源开发的技术成为javaweb

人们访问到的任何一个网页和资源,都存在于这个世界的某一个角落的计算机上

二、Tomcat

解压,直接使用
文件夹的作用:
bin:文件里面装的是启动关闭的一些脚本文件
conf:装的配置文件
lib:装的依赖的jar包
logs:装的日志
webapps:存放网站
work:工作目录
con\sever.xml是服务器核心配置文件
webapp中的index.jsp存的就是首页

修改端口号
在这里插入图片描述
网站访问的流程
1、输入域名
2、检查本机C:\Windows\System32\drivers\etc\hosts配置文件下有没有域名映射,有则直接访问,没有需要找DNS服务器
3、可以配置环境变量

网站应该有的结构

--webapps:
	-ROOT
	-WEB-INF
		-classes:java程序
		-lib:web应用所依赖的jar包
		-web.xml:网页配置文件
	-index.xml	默认的首页
	-static
		-css
		-js
		-img

IDEA中对tomcat的配置;
在这里插入图片描述
在这里插入图片描述
必须要添加一个artifaces
因为访问一个网站,必须要指定个文件夹名字
在这里插入图片描述
虚拟路径映射
在这里插入图片描述

三、Maven

Maven是一种项目架构管理工具
简化导入jar包的过程,帮助我们自动导入和配置jar包
下载网址:https://maven.apache.org/
下载完成后解压即可(解压bin)
配置文件在conf中的setting.xml 可以在mirror中增加阿里云的镜像
web.xml是web配置文件
配置环境变量
M2_HOME 对应bin目录
MAVEN_HOME Maven的目录
在Path中,配一个%MAVEN_HOME%\bin
在cmd中输入mvn -version测试Maven是否安装成功
在localRepository标签下设置本地仓库

在DIEA中Maven的使用
1、启动IDEA
2、创建一个Maven项目(常用webapp)
3、查看相关的Maven设置
在这里插入图片描述
设置目录
在这里插入图片描述
也可以在这里配置
在这里插入图片描述
Maven约定比较严格,所以可能会导致出现无法被导出或者生效的问题
在这里插入图片描述
父子项目
父项目中的java子项目可以直接使用

<parent>
    <artifactId>javax.servlet-api</artifactId>
    <groupId>javax.servlet</groupId>
    <version>3.1.0</version>
  </parent>

子项目有
在这里插入图片描述

四、Servlet简介和HelloWorld

1、编写一个普通类,继承HttpServlet
2、web.xml编写映射
写的是java程序,但是需要浏览器访问,浏览器需要链接web服务器,所以我们需要在web服务器注册我们的servlet,并且给他一个浏览器能够访问的路径

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.PrintWriter;

public class HelloServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//        设置返回的类型
        resp.setContentType("text/html");
//        获取响应的输出流  写完还要去web.xml中注册servlet
        PrintWriter out=resp.getWriter();
        out.println("<html>");
        out.println("<head>");
        out.println("<title>Hello World</title>");
        out.println("</head>");
        out.println("<body>");
        out.println("<h1>Hello KERWIN!</h1>");
        out.println("</body>");
        out.println("</html>");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        super.doPost(req, resp);
    }
}

<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
  <display-name>Archetype Created Web Application</display-name>
<!--  注册servlet-->
  <servlet>
    <servlet-name>helloServlet</servlet-name>
    <servlet-class>HelloServlet</servlet-class>
  </servlet>
<!--  一个Servlet对应一个Mappping映射-->
  <servlet-mapping>
    <servlet-name>helloServlet</servlet-name>
<!--    设置请求路径-->
    <url-pattern>/hello</url-pattern>
  </servlet-mapping>
</web-app>

五、Servlet原理

servlet是由web服务器调用,web服务器在收到浏览器的请求之后

浏览器把HTTP请求发送给web容器,容器来首次访问servlet
带着请求和响应调用servlet的Service方法,调用自己编写的实现类,重写对应的方法(接收请求并给出响应)
Request从Service中拿到请求,然后把请求交给Response
在这里插入图片描述

六、Mapping映射

1、一个servlet可以指定一个映射路径

<!--  一个Servlet对应一个Mappping映射-->
  <servlet-mapping>
    <servlet-name>helloServlet</servlet-name>
<!--    设置请求路径-->
    <url-pattern>/hello</url-pattern>
  </servlet-mapping>

2、一个servlet可以指定多个映射路径

<!--  一个Servlet对应一个Mappping映射-->
  <servlet-mapping>
    <servlet-name>helloServlet</servlet-name>
<!--    设置请求路径-->
    <url-pattern>/hello</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>helloServlet</servlet-name>
    <!--    设置请求路径-->
    <url-pattern>/hello1</url-pattern>
  </servlet-mapping>

3、一个servlet可以指定通用映射路径

	<servlet-mapping>
    <servlet-name>helloServlet</servlet-name>
    <url-pattern>/hello/*</url-pattern>
  </servlet-mapping>

4、默认请求路径

  <servlet-mapping>
    <servlet-name>helloServlet</servlet-name>
    <url-pattern>/*</url-pattern>
  </servlet-mapping>

5、自定义后缀请求路径

<!--  自定义后缀实现映射
      *前面不能加项目路径
-->
  <servlet-mapping>
    <servlet-name>helloServlet</servlet-name>
    <url-pattern>*.kerwin</url-pattern>
  </servlet-mapping>
  <!--  自定义前缀实现映射-->
  <servlet-mapping>
    <servlet-name>helloServlet</servlet-name>
    <url-pattern>/kerwin*</url-pattern>
  </servlet-mapping>

6、优先级
指定了固定的映射路径优先级最高,如果找不到则会走默认的路径请求

七、ServletContext

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;
/*
        web容器启动的时候,会为每个web程序都创建一个对应的ServletContext对象
        代表了当前的web应用
        数据共享:在这个servlet中保存的数据,可以在另外一个servlet拿到

 */
public class SetContextServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) {
        ServletContext context = this.getServletContext();//获得servlet上下文
        String url = context.getInitParameter("url");//初始化参数 在web.xml中的context-param设置参数
        this.getServletConfig();//获得servlet配置


        String name="wantfly";
        System.out.println(url);
        context.setAttribute("name",name);//将数据key-value形式保存在ServletContext中
        context.setAttribute("url",url);

    }
}



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.PrintWriter;

public class GetContextServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        ServletContext context = getServletContext();
        String name = (String) context.getAttribute("name");
        String url = (String) context.getAttribute("url");
        resp.setContentType("text/html");
        resp.setCharacterEncoding("utf-8");
        PrintWriter writer = resp.getWriter();
        writer.println("<script>alert('"+name+url+"')</script>");
    }
}


八、请求转发

A从C请求资源
请求转发:A先去找B,然后B找C,C把资源给B,B传给A
重定向:A去找B,B告诉A去找C,然后A去找C,C把资源传给A

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;

public class DispatcherServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        ServletContext context = getServletContext();
//        请求转发后路径不变
        context.getRequestDispatcher("/getContext").forward(req,resp);//转发的请求路径
    }
}

九、读取资源文件properties

<!--  在build中配置resources,防止资源导出失败-->
  <build>
    <resources>
      <resource>
        <directory>src/main/resources</directory>
        <includes>
          <include>**/*.properties</include>
          <include>**/*.xml</include>
        </includes>
        <filtering>true</filtering>
      </resource>
      <resource>
        <directory>src/main/java</directory>
        <includes>
          <include>**/*.properties</include>
          <include>**/*.xml</include>
        </includes>
        <filtering>true</filtering>
      </resource>
    </resources>
    <finalName>MyJava02</finalName>
  </build>
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;
import java.util.Properties;

public class DispatcherServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
/*
java和resources都称为classpath    db.properties在对应的目录下
在java目录下创建properties和在resources目录下创建properties都被打包到classes下俗称为classpath
主要思想:需要个文件流
*/
        ServletContext context = getServletContext();

        Properties properties=new Properties();
        InputStream in = context.getResourceAsStream("WEB-INF/db.properties");
        properties.load(in);
        String username = properties.getProperty("username");
        System.out.println(username);


//        请求转发后路径不变
        context.getRequestDispatcher("/getContext").forward(req,resp);//转发的请求路径
    }
}


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

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

相关文章

C语言字符串库函数模拟实现

字符串检验 strlen 函数原型 /// brief 返回给定空终止字符串的长度&#xff0c;即首元素为 str 所指&#xff0c;且不包含首个空字符的字符数组中的字符数 /// param str 指向要检测的字符串的指针 /// return 字符串 str 的长度 size_t strlen( const char *str );空终止字…

C语言实现通讯录静态版本

通讯录中首先要有人的信息&#xff0c;然后是存放多少个人的信息 再丰富一下通讯录的功能&#xff0c;例如增删查改、显示、排序。 我们分三个文件来实现。 1、实现简易的菜单&#xff0c;通讯录的整体逻辑 #include"contact.h"void menu() {printf("*****…

900页文档比对只需5分钟?鸿翼InWise文档比对,以人工智能撬动办公效率杠杆

在日常办公中&#xff0c;多份文件间的检查、纠错、复核工作不可避免&#xff0c;这类工作往往具有很强的重复性&#xff0c;占用了大量的工作时间。鸿翼InWise平台文档比对能够赋能企业极速完成海量文档、图片的高精度比对&#xff0c;以人工智能撬动企业生产力提升。 随着数字…

MySQL调优-MySQL索引深入总结

目录 MySQL索引深入总结 InnoDB中的索引复习 聚集索引/聚簇索引 问题&#xff1a;如果我们没有定义主键呢&#xff1f; 问题&#xff1a;分析一下B树三层和四层的性能差异&#xff1f; 辅助索引/二级索引 回表 问题&#xff1a;为什么我们还需要一次回表操作呢?直接把完…

亚马逊云科技:小鹏汽车拓展全球市场,跑出“加速度”

汽车产业变革走向下半场&#xff0c;智能汽车的市场份额之争也从国内走向国际&#xff0c;出海之战讲求速战速决&#xff0c;小鹏汽车携手亚马逊云科技拓展海外市场&#xff0c;完成海外布局。 扩大“鹏”友圈&#xff0c;迈进欧洲市场 近年来&#xff0c;小鹏汽车不断推进全…

数字人民币年度总结:支付变革未停、试点之风再起

文/尹宁出品/陀螺研究院数字人民币&#xff0c;无疑是近年来热度最高的词汇之一&#xff0c;作为我国法币的数字形式&#xff0c;至其出世伊始&#xff0c;不论是资金溯源的透明追踪、零售更新的消费用途&#xff0c;还是跨境结算的雄图大略&#xff0c;围绕其推广与意义的讨论…

关于 国产麒麟系统上长时间运行Qt程序根目录/下磁盘空间占用100%导致无法写入 的解决方法

若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/128671382 红胖子(红模仿)的博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软…

LeetCode 129. 求根节点到叶节点数字之和

&#x1f308;&#x1f308;&#x1f604;&#x1f604; 欢迎来到茶色岛独家岛屿&#xff0c;本期将为大家揭晓LeetCode 129. 求根节点到叶节点数字之和&#xff0c;做好准备了么&#xff0c;那么开始吧。 &#x1f332;&#x1f332;&#x1f434;&#x1f434; 一、题目名…

4.6 集成运放的使用

一、使用时必做的工作 1、集成运放的外引线&#xff08;管脚&#xff09; 目前集成运放的常见封装方式有金属壳封装和双列直插式封装&#xff0c;外形如图4.6.1所示&#xff0c;以后者居多。双列直插式有 8、10、12、14、16 管脚等种类&#xff0c;虽然它们的外引线排列日趋标…

laravel JWT 用户认证 实现API认证

JWT 是 JSON Web Token 的缩写&#xff0c;它是一个规范&#xff0c;让用户和服务器之间传递安全可靠的信息。 JWT介绍 JWT 由头部&#xff08;header&#xff09;、载荷&#xff08;payload&#xff09;与签名&#xff08;signature&#xff09;组成 { “typ”:“JWT”, “a…

python的8大核心语句,你确定不来看看嘛,那格局就小啦

Python 是一种代表简单思想的语言&#xff0c;其语法相对简单&#xff0c;很容易上手。不过&#xff0c;如果就此小视 Python 语法的精妙和深邃&#xff0c;那就大错特错了。本文精心筛选了最能展现 Python 语法之精妙的十个知识点&#xff0c;并附上详细的实例代码。如能在实战…

学习使用 Clion 第一次使用Clion开发Qt的hello world

为什么使用Clion之前在window上开发软件基本上是使用VS2022,使用Clion在windows上开发并不是嫌弃VS2022不好用,相反我依然觉得VS是世界上最好用的IDE没有之一.没有其他的理由,这是我第一款使用的IDE,而且已经很使用的熟练.那为什么还要学习使用Clion了,其实是考虑到跨平台.VS有…

【C进阶】 字符串函数和字符分类函数

家人们欢迎来到小姜的世界&#xff0c;<<点此>>传送门 这里有详细的关于C/C/Linux等的解析课程&#xff0c;家人们赶紧冲鸭&#xff01;&#xff01;&#xff01; 客官&#xff0c;码字不易&#xff0c;来个三连支持一下吧&#xff01;&#xff01;&#xff01;关注…

Linux操作系统-信号

信号的基本认识&#xff1a;Linux信号机制&#xff1a;它是一种异步的通知机制&#xff0c;用来提醒进程一个事件已经发生。如上图&#xff0c;Linux操作系统中&#xff0c;共有编号为1~31的31个普通信号&#xff0c;编号为34~64的31个实时信号。日常中只会涉及和使用到普通信号…

说说你对Spring三级缓存的理解

这个问题或者换个问法&#xff1a;Spring是如何解决循环依赖的&#xff1f;答案即是Spring的三级缓存 什么是循环依赖&#xff1f; 简单说&#xff0c;就是A对象依赖B对象&#xff0c;B对象⼜依赖A对象&#xff0c;类似的代码如下&#xff1a; 其他还有很多种⽅式&#xff0…

内核解读之内存管理(12)进程虚拟内存管理 vm_area_struct 与反向映射

在32位的系统上&#xff0c;线性地址空间可达到4GB&#xff0c;这4GB一般按照3:1的比例进行分配&#xff0c;也就是说用户进程享有前3GB线性地址空间&#xff0c;而内核独享最后1GB线性地址空间。由于虚拟内存的引入&#xff0c;每个进程都可拥有3GB的虚拟内存&#xff0c;并且…

靶机测试ReconForce笔记

靶机地址https://www.vulnhub.com/entry/hacknos-reconforce,416/靶机测试信息收集nmap扫描端口nmap扫描结果└─$ nmap -sC -sV 192.168.1.100 -oA hack …

结合NWR,让Paxos拥有的动态的Quorum,以及在Klein中的实践

Paxos Quorum面临的困境在原生的Basic-Paxos或者Multi-Paxos中&#xff0c;Quorum的数量要求的是多数派&#xff0c;例如&#xff1a;一个5成员组成的Paxos集群&#xff0c;Prepare和Accept阶段需要获得3个Acceptor的支持。Quorum3的条件&#xff0c;在原生的Paxos中是硬性条件…

NTP服务器(GPS北斗授时服务器)的市场需求及性能分析

NTP服务器&#xff08;GPS北斗授时服务器&#xff09;的市场需求及性能分析 NTP服务器&#xff08;GPS北斗授时服务器&#xff09;的市场需求及性能分析 目前国内NTP时间服务器时间精度已达到毫秒级&#xff0c;能够满足各个行业对时间同步运转的要求&#xff1b;有些企业需要…

QtitanComponents Solution 2022.4.0 Crack

2022-12-29 开始开发基于Adobe XD文件的Qt样式创建工具 包括&#xff1a; QtitanDataGrid QtitanRibbon QtitanNavigationDesignUI QtitanChart QtitanDocking QtitanFastInfoset 不要问我源码&#xff0c;没有&#xff0c;&#xff0c;&#xff0c;&#xff0c;&#x…