Web项目基本结构_web项目结构_编程搬运工的博客-程序员秘密

技术标签: Java Web  

C/S模式的软件
客户端/服务器 比如QQ,或者一些大型游戏
用户需要先下载软件的客户端,然后才可以使用.

B/S模式的软件
浏览器/服务器 我们上网时候所访问网站的基本全是B/S模式的项目.
用户不需要下载任何东西,只需要用到浏览器就可以访问到这个项目.
我们在java中要学习的web项目,就是B/S架构的项目.

什么是web
web项目中,其实就是俩个软件之间的信息交换,客户端机器中的浏览器软件和服务器端机器中的web服务器软件之间的交换,比如在我们的学习中,就是客户端的浏览器和服务器端的tomcat进行信息交换。

浏览器和tomcat是俩个不同的软件,但是在开发这俩个软件的时候,都是加入对http协议的支持,所有它们俩个进行信息交换的时候,是通过http协议规定的方式进行交换的:客户端先发送一个请求,然后服务器端接收到请求后再返回给客户端一个响应,并且把客户端所请求的资源返回给客户端.

我们要做的时候就是,开发一个web项目,然后把这个web项目放到tomcat里面指的的位置,然后再运行这个tomcat软件,在tomcat运行过程中,其他计算机里面,只要是网络和我们这个服务器是通的,那么都可以通过浏览器来访问我们这个web项目。

在用浏览器访问tomcat的时候,tomcat会按照浏览器发送的这个请求里面的内容,把浏览器想访问的页面从web项目中找到并返回给这个浏览器,或者是tomcat去调用web项目所写的某些java类中的方法(其实就调用servlet中的方法)

注意:web项目中,任何一个类里面都不需要写main方法,整个项目的运行,对象的创建,方法的调用,都是由tomcat处理的,我们不需要去管. tomcat根据客户端的要求,会调用某个servlet中的指定方法,然后在这个指定方法里面,我们可以写上调用我们自己写的某个类的方法,类似的这样方法相互调用下去,最后调用到我们sql语句的执行,这样我们的一个功能就走完了,比如说登录或者注册功能。

一个web项目最基本的项目结构:
※ Eclipse中一个web项目的基本结构:
在这里插入图片描述
※ web项目中WebContent文件夹与Tomcat对应关系:
在这里插入图片描述
项目名字:jd1812_web
1.文件夹jd1812_web,项目名字是随便起的
2.WebTest文件中有文件WEB-INF,WEB-INF这个名字是固定的
3.WEB-INF文件夹中:classes文件夹,lib文件夹,web.xml文件,这个名字都是固定的。
4.web.xml文件在tomcat目录中的conf目录里面有一个web.xml模板.

注意:
WebContent文件夹下面还可以放文件夹、页面、css样式、js文件、图片等等.
classes文件夹中放的是编译后的.class文件
lib文件夹中放的是当前项目中运行所需要的jar包

※ tomcat服务器:
1. bin 目录:启动、关闭tomcat相关的命令。
2. conf 目录:tomcat的配置文件
3. lib 目录:tomcat中可以同时部署多个项目,多个项目都需要用到的相同jar包,就可以放在这个目录。
4. logs目录:记录tomcat日常运行的情况或者错误信息。
5. temp目录:tomcat运行期间可能会产生一些临时文件,这写临时文件就会放在这个目录.
6. webapps目录:我们开发好的web项目就是需要放到这个指定的目录下面,默认里面已经有一些tomcat自带的项目样例了.
7. work目录:编译jsp页面时候需要用到的一个目录.

访问tomcat中项目里面的资源的方式:

http://IP:port/项目名字/项目在资源

http://127.0.0.1:8002/WebTest/hello.html
http://172.16.4.81:8002/WebTest/hello.html

手写一个servlet并且放到tomcat中去运行:
在这里插入图片描述

package com.briup.test;

import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.ServletException;

import java.io.IOException;
import java.io.PrintWriter;


public class FristServletTest extends HttpServlet{

	
	public void doGet(HttpServletRequest req,HttpServletResponse resp)throws ServletException,IOException{
		
		PrintWriter out = resp.getWriter();

		out.println("hello world");
		out.flush();

		out.close();
	
	}
	
}

servlet-api.jar在tomcat的lib目录中

servlet-api.jar和FristServletTest.java都在桌面编译java文件所在的命令窗口的路径也在桌面

javac -cp servlet-api.jar -d . FristServletTest.java

编译完之后,把这个.class文件已经包目录,放到项目中的classes目录里面,然后再项目中的web.xml文件进行配置,配置的目的是:想把一个路径映射成我们自己一个servlet,这个我们在浏览器里面就可以用个这个映射的路径来来访问这个servlet了.

浏览器的地址栏中只能提供类似于这样的信息:主要是以路径的形式提供访问的信息:

/.../.../.../...
http://172.16.4.81:8002/WebTest/hello.html

但是我们需要的是这样的信息:
要运行servlet至少要有servlet的对象,所有我们需要这个类的package.类名

com.briup.test.FristServletTest

所以我们需要把一个路径映射成一个servlet:
比如:把/first路径映射成FristServletTest这个servlet,将来用户在浏览器中输入/first路径之后,就相当于告诉服务器,需要运行FristServletTest这个servlet.

例如:
web.xml文件中加入:

<servlet>
        <servlet-name>firstservlet</servlet-name>
        <servlet-class>com.briup.test.FristServletTest</servlet-class>
</servlet>
	
<servlet-mapping>
        <servlet-name>firstservlet</servlet-name>
        <url-pattern>/first</url-pattern>
</servlet-mapping>

<servlet>中的<servlet-name>子标签:
给你要描述的servlet起一个名字,这个是名字是随便起的,目的是为了在下面做映射的时候能够再找到这个servlet

<servlet>中的<servlet-class>子标签:
这个servlet的package.类名

<servlet-mapping>中的<servlet-name>子标签:
指明这个映射是给哪一个servlet的做的映射,通过之前随便起的servlet的名字找。

<servlet-mapping>中的<url-pattern>子标签:
这个就是我们要映射的路径,将来浏览器里面输入这个路径就相当于要访问我们这个servlet。
注意:这个路径一定是以/开头的:/a /a/b /a/b/hello

package com.briup.web.Servelt;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

/*
 * 负责处理浏览器提交的请求
 * 并回写资源
 */
public class FirstServlet implements Servlet{
	//当前Servlet对象销毁的时候调用的
	@Override
	public void destroy() {
		// TODO Auto-generated method stub
		
	}
    //获取Servlet的配置对象
	@Override
	public ServletConfig getServletConfig() {
		// TODO Auto-generated method stub
		return null;
	}
    //返回Servlet的基本信息
	@Override
	public String getServletInfo() {
		// TODO Auto-generated method stub
		return null;
	}
    //对Servlet对象初始化的方法
	@Override
	public void init(ServletConfig arg0) throws ServletException {
		// TODO Auto-generated method stub
		
	}
    //处理请求,回写资源
	//ServletRequest对http请求封装,把各种各样的参数进行提取
	//servletPesponse给浏览器写内容,写的时候servletPesponse自动封装成http响应格式的数据
	//servletPesponse内部维护了字节流和字符流
	@Override
	public void service(ServletRequest arg0, ServletResponse arg1) throws ServletException, IOException {
		// TODO Auto-generated method stub
	    //告诉浏览器写回的数据类型
		arg1.setContentType("text/html;charset=UTF-8");
        //获取网络输出流
		PrintWriter pw=arg1.getWriter();
		pw.write("test OK");
		pw.flush();
		pw.close();
	}
}



//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>jd1812_web</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>first</servlet-name>
  <!-- 处理请求的类是谁 -->
  <servlet-class>com.briup.web.Servelt.FirstServlet</servlet-class>
  </servlet>
  <servlet-mapping>
  <!-- 根据name相同,servlet-mapping会找到相应的servlet -->
  <servlet-name>first</servlet-name>
  <!-- 处理资源的名字,斜杠不能省略
  /表示的是项目名 -->
  <url-pattern>/FirstSer</url-pattern>
  </servlet-mapping>
</web-app>
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_42857603/article/details/82857443

智能推荐

ftp服务器的硬件配置,[计算机硬件及网络]10 FTP服务器配置.ppt_weixin_39601088的博客-程序员秘密

[计算机硬件及网络]10 FTP服务器配置配置vsftpd服务器 重新启动vsftpd服务,匿名登录服务器 登陆欢迎信息 用匿名用户ftp登录失败 配置vsftpd服务器 例2:设置FTP服务器允许的最大连接数是1 测试是否支持多用户john, catftp登录 配置vsftpd服务器 配置vsftpd服务器 修改配置文件——修改或增加: 如果设置为0,表示不受限 重启服务器 se...

Android 自定义组件相关_android xmlns:custom_YK_ing的博客-程序员秘密

自定义组件时,通常为了组件的通用性,

HLA的开发与应用_ch4028的博客-程序员秘密

在美国国防建模与仿真办公室DMSO(Defense Modeling &Simulation Office)1995年10月制定的建模与仿真主计划MSMP(Modeling and Simulation Master Plan)中,提出了未来建模/仿真的共同技术框架。它包括三个方面:高层体系结构HLA(High Level of Arch

window下安装pytorch(不用下载cuda和cudnn)(用清华镜像)_cudnn清华镜像_Tiny_uppp的博客-程序员秘密

window下安装pytorch前言:最近换了一台笔记本电脑(3060显卡),单单为了配这个pytorch环境就花了1天时间(即使我以前配过)。所以,现在想要记录一些细节防止忘记。1.anaconda事先安装好。2.anaconda默认是不走代理的,导致了我们下载pytorch的话就不能挂梯子了。(借助conda下载一挂梯子就会报proxy等错误,就很烦。我们只能从官网下载,而官网下载又巨慢(有时也可行,可能是看时间点)。最后,从清华的镜像源下载。3.30系显卡的cuda要求11以上,别装错了

Faster Rcnn 源码解析(三)—— bbox_transform.py_傲娇的程序猿的博客-程序员秘密

简介:这个代码里面主要是一些在anchor_targte_layer.py和proposals_layers.py中使用到的一些函数,比较简单,主要是帮助以上两个代码理解。# --------------------------------------------------------# Fast R-CNN# Copyright (c) 2015 Microsoft# Licensed ...

STM32VET6工程移植到C8T6的踩坑记录(HAL库)_vet6和c8t6程序能兼容吗_龙晨天的博客-程序员秘密

目录一、移植对象:野火拂晓F103的直流有刷电机-速度环控制-位置式PID项目工程吐槽:二、移植过程1、改设备,这一步很重要哦,因为关系到STlINK的仿真下载到flash地址的问题(C8T6只有128k的flash).2、换启动文件3、换各个模块的引脚(主要是编码器、电机驱动、还有串口)4、注意部分引脚复用需要更改为其他模式5、关闭相关外设复用功能重映像(配置的是外设原始引脚的话的话)!!!(至关重要,否则模块无法正常工作问题)。6、更改相应中断函数名称7、没有的外

随便推点

Android 悬浮窗口_android百度音乐的悬浮_qyyl2013的博客-程序员秘密

package com.home.floatwindow;import android.app.Service;import android.content.Context;import android.content.Intent;import android.graphics.PixelFormat;import android.os.IBinder;import android

Steve Jobs经典_ajian11的博客-程序员秘密

毕加索:好的艺术家只是照抄,而伟大的艺术家窃取灵感what you see is what you get

TCP长连接与短连接的区别_tcp 长连接 与短连接 请求头 区别_陈心朔的博客-程序员秘密

1. TCP连接当网络通信时采用TCP协议时,在真正的读写操作之前,server与client之间必须建立一个连接,当读写操作完成后,双方不再需要这个连接时它们可以释放这个连接,连接的建立是需要三次握手的,而释放则需要4次握手,所以说每个连接的建立都是需要资源消耗和时间消耗的经典的三次握手示意图:经典的四次握手关闭图:2. TCP短连接我们模拟一下TCP短连接的情况,c

Android-安卓如何将aar放到到libs里并添加其为依赖?_我是giggleman的博客-程序员秘密

有的sdk并未提供链接直接添加在gradle.app里,需要我们手动操作。这里以阿里支付的aar为例子。阿里支付demo和aar下载地址: 打开下载.(aar文件在 Android-sdk 文件里)第一步:打开你的安卓Android项目文件第二步:找到并打开你的主项目Main文件第三步:在Main文件里会包含以下一些文件,libs文件夹 就是我们需要把aar文件放入进去的地方。第四步:用Android Studio 打开你的项目,左上角菜单栏选中 file -&gt;

Flink 自定义source 写入 Kafka_org.apache.flink.connector.kafka.source.kafkasourc_迷途码界的博客-程序员秘密

Flink 自定义source 写入 Kafka添加依赖构建KafkaSource参数实例构建自定义KafkaMQSource添加依赖&lt;dependency&gt; &lt;groupId&gt;org.apache.flink&lt;/groupId&gt; &lt;artifactId&gt;flink-connector-kafka_2.12&lt;/artifactId&gt; &lt;version&gt;1.13.2&lt;/version&gt; &lt;scope&gt;p

APDPlat中数据库备份恢复的设计与实现_weixin_34015336的博客-程序员秘密

2019独角兽企业重金招聘Python工程师标准&gt;&gt;&gt; ...

推荐文章

热门文章

相关标签