24.11.19 web框架

2.2配置环境变量

2.3maven命令测试

mvn -v 测试maven查看版本

2.4maven仓库配置

配置远程仓库地址

配置本地仓库

2.5idea中配置maven

2.6通过配置idea 创建maven项目

创建项目时 构建系统 选到maven

初次创建项目时 会把maven的基础依赖库(jar包) 下载到本地仓库 需要等待一会(只有第一次需要等待)

要把快照版(-SNAPSHOT)删去

安装好后 可以使用maven相关命令 对项目操作

2.7mavenweb项目 及目录结构
1.添加web结构支持

2.勾上web应用

3.改目录结构

4.处理配置文件

5.可以通过maven打包web项目

2.8maven配置文件 POM.xml文件

配置项认知 知道有什么用就可以了

这一步不要忘记!!!!<packaging>war</packaging>

常用配置项:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<!--  pom文件标签使用的版本 自动生成   -->
    <modelVersion>4.0.0</modelVersion>

<!--  当前项目的坐标
      公司名  项目名  版本号  确认到某个jar包
 -->
    <groupId>com.javasm</groupId>
    <artifactId>day9_mavenDemo1</artifactId>
    <version>1.0</version>
<!--通过修改配置文件 让idea自动适配maven项目需要的项目打包配置
    packaging 打包方式
              jar  默认值
              war  web项目打包 要生成对应的配置文件
              pom  项目聚合使用

-->

    <packaging>war</packaging>

<!-- dependencies 所有的项目依赖(jar包)配置
    查找需要jar包坐标网站
    https://mvnrepository.com/

 -->

    <dependencies>
        <!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-api -->

        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-api</artifactId>

            <version>5.11.3</version>
<!--            jar包作用域
                默认值 compile  编译运行时使用
                      test     测试案例时使用
                      provided 编译时需要   运行时不需要
                      runtime  编译时不需要 运行时需要
    -->
            <scope>test</scope>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.36</version>
            <scope>provided</scope>
        </dependency>

        <!-- https://mvnrepository.com/artifact/com.mysql/mysql-connector-j -->
        <dependency>
            <groupId>com.mysql</groupId>
            <artifactId>mysql-connector-j</artifactId>
            <version>8.4.0</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.83</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>4.0.1</version>
            <scope>provided</scope>

        </dependency>

    </dependencies>
<!--
项目配置参数
maven的setting.xml配置过了
-->
    <properties>
        <maven.compiler.source>11</maven.compiler.source>
        <maven.compiler.target>11</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

    </properties>

<!--  maven 其他插件  tomcat插件 jetty插件 内嵌运行服务器

  -->


</project>

3.通过tomcat运行web项目

tomcat是运行java代码的web应用服务器

web服务器 html css javascript

web应用服务器 html css javascript 运行程序语言代码 用代码的输出流输出页面信息

tomcat 小型免费 性能中等 可以商用 200个

jetty 框架中嵌入的小型服务器 性能较差 不能商用

jboss 中型免费 性能中等 可以商用 配置繁琐

weblogic 中大型收费 性能较好 商用 贵

部署集群

tomcat服务器详解:

1.tomcat目录结构

2.bin目录 启动停止脚本

3.conf配置

改端口号:

4其他目录 知道有什么即可 一般不会改动
5.在idea中配置tomcat插件

1.配置运行

2.添加tomcat运行实例

配置完可以修改参数

tomcat需要加载项目

控制台乱码//这个在2024版本上的idea上没有乱码无需设置GBK

但是不能忘记设置这两个图

java.util.logging.ConsoleHandler.encoding = GBK

6.idea的tomcat插件的操作按钮

服务器运行控制台

如果修改了代码 需要重新加载代码数据

使用重新部署 较快 需要重新加载的数据都会加载

idea启动的tomcat 配置文件 部署目录等 都与原始的tocmat有隔离性 可以任意操作

启动时 没有root根项目

4.web项目配合java代码运行

tomcat可以运行 静态技术(html css javascript ) 和 动态技术(通过程序语言的输出流输出页面)

4.1静态技术

4.2动态技术

servlet

* server applet
* 服务端特定服务的处理

需要继承sun公司提供的标准类型(统一的父类(统一的接口)) HttpServlet

重写指定的方法 service(){ 当次服务处理的逻辑代码 }

配置请求路径(通过请求路径 触发当前servlet的service()方法运行)

package com.javasm;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

@WebServlet("/person")
public class PersonServlet extends HttpServlet {

    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
      /*servlet
      * server applet
      * 服务端特定服务的处理
      *
      **/
       //req  请求相关的数据和参数
        //resp 响应相关的输出和对象
        System.out.println("person处理类运行了......");
        //通过url触发代码...
        MyPerson myPerson = new MyPerson();
        myPerson.readBook();


        PrintWriter writer = resp.getWriter();

        writer.write("data info");
        writer.close();

    }
}
4.3实现servlet的三种写法(了解)

HttpServlet ----> GenericServlet ----> Servlet

service() 请求进入时 会默认触发的方法

简化使用方法:

继承HttpServlet 不使用请求分发成get/post等方法 直接重写service()方法

在service()方法中写服务的处理代码

package com.javasm;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

@WebServlet("/person")
public class PersonServlet extends HttpServlet {

    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
      /*servlet
      * server applet
      * 服务端特定服务的处理
      *
      **/
       //req  请求相关的数据和参数
        //resp 响应相关的输出和对象
        System.out.println("person处理类运行了......");
        //通过url触发代码...
        MyPerson myPerson = new MyPerson();
        myPerson.readBook();


        PrintWriter writer = resp.getWriter();
        writer.write("data info");
        writer.close();

    }
}
4.4servlet两种配置方式(了解)

注解

在类上直接配置请求地址

@WebServlet("/demo2")
public class ServletDemo2 extends GenericServlet {

配置文件

<servlet>
        <servlet-name>demo3</servlet-name>

        <servlet-class>com.javasm.ServletDemo3</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>demo3</servlet-name>
        <url-pattern>/test3</url-pattern>
    </servlet-mapping>
4.5servlet生命周期

1.服务器启动时 先准备路径和实例的对应关系(先不创建实例 懒加载)

2.当请求访问到时 先检查是否有示例对象 如果没有则创建实例 调用init方法

3.如果已经有实例 调用service()方法

4.服务器关闭时 销毁实例 调用destroy方法

5.如果配置了load-on-startup 则生命周期提前到服务器启动时创建实例

5.servlet接收请求 返回响应

package com.javasm;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;



//servlet中配置的路径
// 需要补上项目名 才是完整的访问路径
// /day9/login
@WebServlet("/login")
public class LoginServlet extends HttpServlet {

    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("login服务触发了....");
        //tomcat已经解析过请求报文
        //给tomcat指定解析请求体的字符编码

        //必须在读取第一个参数前设置 否则会失效
        req.setCharacterEncoding("utf-8");
        String username = req.getParameter("username");
        String pwd = req.getParameter("pwd");
        //tomcat 默认使用iso8859-1对字符编码
        //System.out.println( new String(username.getBytes("iso-8859-1"),"utf-8")  );
        System.out.println(username);
        System.out.println(pwd);


        /*
        * 查数据库 看数据对不对
        * */
        //给页面反馈

        resp.setContentType("text/html;charset=utf-8");
        PrintWriter writer = resp.getWriter();
        writer.print(username+"<h1>loginok.....<h1>");
        writer.close();

    }

}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<!-- 页面中的访问路径
     相对路径
     相对根路径
     绝对路径

  -->

  <form action="/day9/login" method="post">
    <input type="text" name="username"><br>
    <input type="password" name="pwd"><br>
    <input type="submit"><br>

  </form>
</body>
</html>
html

servelt常见错误:

1.servlet配置地址没带/

报错信息中有这条

servlet映射中的<url pattern>[login]无效

2.servlet请求地址配置重复了

报错信息中有这条

名为 [com.javasm.ServletDemo1]和 [com.javasm.ServletDemo2] 

    的servlet不能映射为一个url模式(url-pattern) [/demo1]

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

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

相关文章

【Golang】——Gin 框架中的模板渲染详解

Gin 框架支持动态网页开发&#xff0c;能够通过模板渲染结合数据生成动态页面。在这篇文章中&#xff0c;我们将一步步学习如何在 Gin 框架中配置模板、渲染动态数据&#xff0c;并结合静态资源文件创建一个功能完整的动态网站。 文章目录 1. 什么是模板渲染&#xff1f;1.1 概…

【list的模拟实现】—— 我与C++的模拟实现(十四)

一、list节点 ​ list是一个双向循环带头的链表&#xff0c;所以链表节点结构如下&#xff1a; template<class T>struct ListNode{T val;ListNode* next;ListNode* prve;ListNode(int x){val x;next prve this;}};二、list迭代器 2.1、list迭代器与vector迭代器区别…

QString 转 char*问题与方法(const_cast的使用问题)

1、背景:今天有QString的变量&#xff0c;将QString的值传递给void func(char * ptr)&#xff0c;于是就有了类似下面这一段离谱的代码 当时我还在想为什么var的值为空了&#xff0c;为什么呢。 2、原因:就是因为右边函数返回的是一个临时指针对象&#xff0c;给到了右边&…

每天五分钟机器学习:支持向量机算法数学基础之核函数

本文重点 从现在开始,我们将开启支持向量机算法的学习,不过在学习支持向量机算法之前,我们先来学习一些支持向量机所依赖的数学知识,这会帮助我们更加深刻的理解支持向量机算法,本文我们先来学习核函数。 定义 核函数(Kernel Function)是一种在支持向量机(SVM)、高…

云原生之运维监控实践-使用Prometheus与Grafana实现对Nginx和Nacos服务的监测

背景 如果你要为应用程序构建规范或用户故事&#xff0c;那么务必先把应用程序每个组件的监控指标考虑进来&#xff0c;千万不要等到项目结束或部署之前再做这件事情。——《Prometheus监控实战》 去年写了一篇在Docker环境下部署若依微服务ruoyi-cloud项目的文章&#xff0c;当…

MiniMates:一款轻量级的图片数字人驱动框架

随着数字人技术的不断发展,越来越多的应用场景开始涌现,从虚拟主播到AI伴侣,数字人的应用范围越来越广。然而,现有的数字人驱动框架往往存在性能瓶颈、依赖性强、定制难度高等问题。近期,我发现了一款名为 MiniMates 的轻量级图片数字人驱动框架,它在性能、个性化定制和终…

SpringBoot3_Web开发

4. 内容协商 一套系统适配多端数据返回 移动端&#xff1a;返回JSON数据第三方&#xff1a;返回XMLIoT&#xff1a;返回自定义协议数据 1. 默认规则 1. SpringBoot 多端内容适配 基于请求头内容协商 【默认】 客户端向服务端发送请求&#xff0c;携带HTTP标准的 Accept 请求…

C++ —— 剑斩旧我 破茧成蝶—C++11

江河入海&#xff0c;知识涌动&#xff0c;这是我参与江海计划的第2篇。 目录 1. C11的发展历史 2. 列表初始化 2.1 C98传统的{} 2.2 C11中的{} 2.3 C11中的std::initializer_list 3. 右值引用和移动语义 3.1 左值和右值 3.2 左值引用和右值引用 3.3 引用延长生命周期…

mysql复习题(实验7-8)

建立一个学生入学信息管理&#xff08;x_y&#xff09;数据库&#xff0c;设计其数据库模式为&#xff1a; 学生表&#xff08;学号&#xff0c;姓名&#xff0c;性别&#xff0c;入学成绩&#xff0c;籍贯&#xff0c;院系编号&#xff09; 院系表&#xff08;院系编号&…

详细分析ipvsadm负载均衡的命令

目录 前言1. 基本知识2. 命令参数3. 拓展 前言 LVS四层负载均衡架构详解Lvs推荐阅读&#xff1a;添加链接描述 1. 基本知识 ipvsadm 是用于管理和配置 Linux 服务器上 IP Virtual Server (IPVS) 的工具&#xff0c;是 Linux 提供的一个负载均衡模块&#xff0c;支持多种负载…

反向代理模块

1 概念 1.1 反向代理概念 反向代理是指以代理服务器来接收客户端的请求&#xff0c;然后将请求转发给内部网络上的服务器&#xff0c;将从服务器上得到的结果返回给客户端&#xff0c;此时代理服务器对外表现为一个反向代理服务器。 对于客户端来说&#xff0c;反向代理就相当于…

大数据新视界 -- Impala 性能突破:复杂数据类型处理的优化路径(上)(25 / 30)

&#x1f496;&#x1f496;&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎你们来到 青云交的博客&#xff01;能与你们在此邂逅&#xff0c;我满心欢喜&#xff0c;深感无比荣幸。在这个瞬息万变的时代&#xff0c;我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

Excel使用-弹窗“此工作簿包含到一个或多个可能不安全的外部源的链接”的发生与处理

文章目录 前言一、探讨问题发生原因1.引入外部公式2.引入外部数据验证二、问题现象排查及解决1.排查公式2.排查数据验证3.特殊处理方式总结前言 作为一种常用的办公软件,Excel被大家所熟知。尽管使用了多年,有时候在使用Excel时候也会发生一些不太常见的现象,需要用心核查下…

【小程序】dialog组件

这个比较简单 我就直接上代码了 只需要传入title即可&#xff0c; 内容部分设置slot 代码 dialog.ttml <view class"dialog-wrapper" hidden"{{!visible}}"><view class"mask" /><view class"dialog"><view …

跨平台WPF框架Avalonia教程 一

安装 安装 Avalonia UI 模板​ 开始使用 Avalonia 的最佳方式是使用模板创建一个应用程序。 要安装 Avalonia 模板&#xff0c;请运行以下命令&#xff1a; dotnet new install Avalonia.Templates 备注 对于 .NET 6.0 及更早版本&#xff0c;请将 install 替换为 --inst…

JSON.stringify的应用说明

前言 JSON.stringify() 方法将 JavaScript 对象转换为字符串,在日常开发中较常用&#xff0c;但JSON.stringify其实有三个参数&#xff0c;后两个参数&#xff0c;使用较少&#xff0c;今天来介绍一下后两个参数的使用场景和示例。 语法及参数说明 JSON.stringify()&#xf…

家庭网络常识:猫与路由器

这张图大家应该不陌生——以前家庭网络的连接方式。 图1 家庭网络连接示意图 来说说猫/光猫&#xff1a; 先看看两者的图片。 图2 猫 图3 光猫 这个东西因为英文叫“modem”&#xff0c;类似中文的“猫”&#xff0c;所以简称“猫”。 猫和光猫的区别就是&#xff0c;一…

core 不可变类型 线程安全 record

当一个类型的对象在创建时被指定状态后&#xff0c;就不会再变化的对象&#xff0c;我们称之为不可变类型。这种类型是线程安全的&#xff0c;不需要进行线程同步&#xff0c;非常适合并行计算的数据共享。它减少了更新对象会引起各种bug的风险&#xff0c;更为安全。 System.D…

机器学习 ---线性回归

目录 摘要&#xff1a; 一、简单线性回归与多元线性回归 1、简单线性回归 2、多元线性回归 3、残差 二、线性回归的正规方程解 1、线性回归训练流程 2、线性回归的正规方程解 &#xff08;1&#xff09;适用场景 &#xff08;2&#xff09;正规方程解的公式 三、衡量…

基于Java Springboot甘肃旅游管理系统

一、作品包含 源码数据库设计文档万字PPT全套环境和工具资源部署教程 二、项目技术 前端技术&#xff1a;Html、Css、Js、Vue、Element-ui 数据库&#xff1a;MySQL 后端技术&#xff1a;Java、Spring Boot、MyBatis 三、运行环境 开发工具&#xff1a;IDEA/eclipse 数据…