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

Tomcat构建

软件架构

C/S:Client/Server.需要安装才能使用。

B/S:Brower/Server。有浏览器就可以。

资源分类

  • 动态资源:每个用户访问相同的资源后,得到的结果可能不一样,称为动态资源。动态资源被访问后,先转换为静态资源,再被浏览器解析。

  • 静态资源:所有的用户在访问后,得到的结果都是一样的,称为静态资源。静态资源可以直接被浏览器解析

服务器

  1. 服务器:安装了服务器软件的计算机。

  1. 服务器软件:接收用户的请求,处理请求,做出响应。(接请求,传参数,给响应)

  1. web服务器软件:接收用户的请求,处理请求,做出响应。(接请求,传参数,给响应)

在web服务器软件中,可以部署web项目。让用户通过浏览器来访问这些项目。

常见的服务器软件

  • 动态服务器:

webLogic:oracle公司,大型的JavaEE服务器,支持所有的JavaEE规范,收费的。

webSphere:IBM公司。大型的JavaEE服务器,支持所有的JavaEE规范,收费的。

JBOSS:JBOSS公司。大型的JavaEE服务器,支持所有的JavaEE规范,收费的。

Tomcat:Apache基金组织,中小型的javaEE服务器,仅仅支持少量的JavaEE规范servle/JSP。开源免费。(300左右的并发)

  • 静态服务器:

nginx:代理,极高的并发

apache:Apache基金组织。PHP领域。

Tomcat

  1. Tomcat早期是Sun公司。javaWEBServer
  1. Tomcat4.0,里程碑版本。实现了Servlet

Tomcat的目录结构

  • bin:存放的是Tomcat的启动,停止批量处理脚本文件

startup.bat,startup.sh:启动tomcat的脚本文件

shutdown.bat,showdown.sh:停止tomcat的脚本文件

  • conf:用来存放Tomcat的相关配置文件

Catania:用来存储每个虚拟机的context配置

Context.xml:定义所有的web应用需要加载的context配置

Catalina.properties:Tomcat的环境变量

Logging.properties:Tomcat的日志配置文件,修改Tomcat的日志级别。

server.xml:Tomcat的核心配置文件

  • lib:Tomcat服务器的依赖包

  • logs:Tomcat默认的日志存放目录

  • webapps:Tomcat默认的web应用部署目录

  • work:Web应用jsp代码生成和编译的临时目录。

Servlet

servlet就是一个Java程序,一个java类。用来处理请求和响应。

Servlet的生命周期

  • init():Servelt进行初始化。

在tomcat启动的时候就会对所有的Servelt进行初始化

init方法只初始化一次

单例模式。

  • service():处理请求

可以处理GET,POST,PUT,DELETE请求

  • destroy():释放资源

创建servlet的三种方式

  1. 实现javax.servlet.Servlet接口

  1. 继承javax.servlet.GenericServlet类

  1. 继承javax.servlet.HttpServlet类

Servlet注册的两种方式

通过配置文件web.xml方式注册----Servlet3.0之前

WEB-INF:加密路径,不允许在地址栏

在web.xml进行注册servlet

    <!---注册servlet--><servlet><servlet-name>myServlet</servlet-name><!--写全类名--><servlet-class>com.jsoft.morning.Myservlet1</servlet-class></servlet><servlet-mapping><servlet-name>myServlet</servlet-name><!--url pattern 当发起什么样的请求的时候,才让myServlet去处理--><url-pattern>/hello</url-pattern></servlet-mapping>

通过注解方式进行注册√

@WebServlet("/haha")
public class MyServlet3 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {System.out.println("MyServlet3 doGet....");}

Servlet的参数

HttpServletRequest:

简称request,代表请求对象,当请求来的时候,request会自动实例化

HttpServletResponse:

简称response

response代表响应,当请求来的时候,response会自动实例化。

如果写中文,需要设置相应的字符集

响应头:增加一个响应头,并且解决字符集问题。

        response.setCharacterEncoding("utf-8");response.addHeader("content-type","text/html;charaset=utf-8");
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {System.out.println("MyServlet3 doGet....");//向页面打印回去一句话//服务器和客户端之间的通信依然是使用的流response.setCharacterEncoding("utf-8");response.addHeader("content-type","text/html;charaset=utf-8");PrintWriter out = response.getWriter();//把后台想要给出的响应写会去out.write("我收到了你的请求!!!");}

URL匹配规则

  1. 精确匹配,每个servlet是可以处理多个请求的。

@WebServlet(urlPatterns = {"/haha","/haha1","/haha2"})

localhost:8080/javaweb20230214/haha2

  1. 路径匹配

@WebServlet(urlPatterns = {"/haha/*"})

localhost:8080/javaweb20230214/haha/aaa

  1. 扩展名匹配

@WebServlet(urlPatterns = {"*.do"})

localhost:8080/javaweb20230214/aaa.do

  1. 缺省匹配

@WebServlet(urlPatterns = {"/"})

注意:

不能出现/*.do

多看控制台

匹配顺序

  1. 精确匹配

  1. 路径匹配,先最长路径匹配,再最短路径匹配。 /user/* /user/add/*

  1. 扩展名匹配。

注意:扩展名匹配,前面不能有任何的路径,包括不能有/

/*和/的含义:
  • /*属于路径匹配。覆盖所有的扩展名匹配

  • /servlet中的特殊匹配模式

会拦截静态资源!!!

启动时初始化:

        <servlet-class>com.jsoft.morning.Myservlet1</servlet-class><load-on-startup>1</load-on-startup>

Request

request功能分为以下几种:

  • 封装请求头:

  • 封装一些正文数据。如果是get请求,没有正文。

  • request实际上是一个域对象,可以把它当成map来添加和获取数据。

  • request提供请求转发功能。

常用的方法:

getRemoteaddr():获取客户端的IP地址。

    @Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//        System.out.println(request.getRemoteAddr());System.out.println(request.getRemoteHost());if(Objects.equals(request.getRemoteHost(),"127.0.0.1")){response.getWriter().write("your Ip is closed!!!");}}

获取请求参数

常见的客户端传参方式:

  • 浏览器地址栏直接输入:GET请求

  • 超链:GET请求

  • 表单:可以是GET,可以是POST。

  • Ajax:可以是GET,可以是POST

GET请求和POST请求的区别?

GET请求:

  • 请求参数会在浏览器地址栏显示,所以不安全

  • 请求的参数长度在1k以内。

  • GET请求没有请求体

POST请求:

  • 请求参数不会显示在浏览器的地址栏,相对安全

  • 请求参数没有限制

  • 有请求体

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {String username = request.getParameter("username");String password = request.getParameter("password");response.addHeader("content-type","text/html;charset=utf-8");PrintWriter out = response.getWriter();//        System.out.println("username:"+username+",password:"+password);//调用service,调用dao,返回一个结果boolean flag=true;if(flag){out.write("登录成功,欢迎你"+username);}}
<form action="login" method="post">
username:<input type="text" name="username">
password:<input type="password" name="password">
<input type="submit" value="登录">
</form>

登录注册:

  protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {String username = request.getParameter("username");String password = request.getParameter("password");String[] hobbies = request.getParameterValues("hobby");System.out.println(Arrays.toString(hobbies));Enumeration<String> names= request.getParameterNames();while(names.hasMoreElements()){System.out.println(names.nextElement().toString());}Map<String, String[]> parameterMap = request.getParameterMap();for(Map.Entry entry:parameterMap.entrySet()){System.out.println(entry.getKey()+"-->"+Arrays.toString((String[])entry.getValue()));};response.addHeader("content-type","text/html;charset=utf-8");PrintWriter out = response.getWriter();//        System.out.println("username:"+username+",password:"+password);//调用service,调用dao,返回一个结果boolean flag=true;if(flag){out.write("登录成功,欢迎你"+username);}}
<form action="login" method="post">
账号:<input type="text" name="username"><br>
密码:<input type="password" name="password"><br>
性别:<input type="radio" name="gender" value="man">男<input type="radio" name="gender" value="woman" >女<br>
爱好:<input type="checkbox" name="hobby" value="swimming">游泳<input type="checkbox" name="hobby" value="readding">读书<input type="checkbox" name="hobby" value="writting">写字<br>复选:<select name="select" multiple><option value="a">a</option><option value="b">b</option><option value="c">c</option></select>
<input type="submit" value="登录">
</form>
http://www.lryc.cn/news/6686.html

相关文章:

  • 入门深度学习——基于全连接神经网络的手写数字识别案例(python代码实现)
  • 预算砍砍砍,IT运维如何降本增效
  • 10.Jenkins用tags的方式自动发布java应用
  • 2023新华为OD机试题 - 相同数字的积木游戏 1(JavaScript)
  • 重构之改善既有代码的设计(一)
  • Kotlin data class 数据类用法
  • 随笔-老子不想牺牲了
  • 三种查找Windows10环境变量的方法
  • STM32单片机DS18B20测温程序源代码
  • java日志查看工具finder介绍
  • 手写现代前端框架diff算法-前端面试进阶
  • 【半监督医学图像分割 2022 MICCAI】CLLE 论文翻译
  • vivo官网App模块化开发方案-ModularDevTool
  • Python基础-数据类型之数字类型
  • 基于Web的6个完美3D图形WebGL库
  • 界面组件DevExpress Reporting v22.2 - 增强的Web报表组件UI
  • 初学vector
  • Windows10 安装wsl2、Ubuntu相关操作
  • SpringBoot简单使用MongoDB
  • Oracle Data Guard 角色转换(Role Transitions)
  • opencv的TrackBar控件
  • 关于基线长度对双天线GNSS测姿精度的影响
  • 口交换机睿易 RG-NBS1826GC 24 口
  • 如何在Excel中向下拉列表中添加条件
  • 自定义bean 加载到spring IOC容器中
  • [python入门㊻] - python装饰器和类的装饰器
  • 企业级信息系统开发学习1.1 初识Spring——采用Spring配置文件管理Bean
  • CSS盒子模型
  • Python基础学习笔记 —— 数据结构与算法
  • 笔记本连接wifi,浏览器访问页面,显示访问被拒绝