首页 > 其他分享 >24.11.19 web框架

24.11.19 web框架

时间:2024-11-20 23:18:27浏览次数:3  
标签:web tomcat 19 配置 24.11 maven import servlet javax

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]

标签:web,tomcat,19,配置,24.11,maven,import,servlet,javax
From: https://blog.csdn.net/2401_87910368/article/details/143898013

相关文章

  • 遇到Web跨域问题,如何通过nginx代理配置解决
    项目场景:系统1:----后端(b):http://111.111.111.111:10080----前端(a):111.111.111.111:10082系统2:----后端(B):http://111.111.111.111:10083----前端(A):111.111.111.111:10081端口服务10082b(后端)10080a(前端)10083B(后端)10081A(前端)问题描述当系统2的前端A(10081),去调系统1的后端......
  • Invicti-Professional-v24.11
    0x01工具介绍Invicti(以前称为Netsparker)是一款自动化Web应用程序安全扫描器,旨在帮助组织持续扫描和保护其Web应用程序和API。Invicti注重准确性和效率,使安全团队能够扩展测试工作,同时最大限度地减少误报,确保资源用于解决真正的安全风险。Invicti的突出功能之一是其基......
  • 11.19鲜花&&初中OI回忆录
    我最近真是越来越喜欢写鲜花了晚自习提前跑路回家刷OI结果碰上年级主任了,被拷打了一番,还被盘问了NOIP参赛人员,尴尬好像不知不觉中,尽管实力好像没怎么增长,S组NOIP水平到能够冲击JSOI的过渡期远没有gty和zzy两名神犇来的顺畅,但是现在的我相比去年这个时候甚至今年寒假真的成长了好......
  • WEB攻防-PHP应用&文件包含&LFI&RFI&伪协议编码算法&无文件利用&黑白盒
    什么是文件包含1、原理程序开发人员通常会把可重复使用的函数写到单个文件中,在使用某些函数时,直接调用此文件,而无须再次编写,这种调用文件的过程一般被称为文件包含。在包含文件的过程中,如果文件能进行控制(如进行替换和修改),则存储文件包含漏洞白盒发现:在php代码中如果存......
  • 24.11.20
    我感觉我是一个挺奇怪的人就像是无时无刻不在找事情做,哪怕是在脑袋里和自己说话这种事,不知道为什么我很不喜欢什么事都不干,总感觉陷入这种状态就会很急迫很不安,总是喜欢找一些事来干也是一个很“幼稚”的人大概是经常喜欢在心里抱怨现实又从不说出来,最多就只能在网上撒撒气,喜欢......
  • [RoarCTF 2019]Easy Calc
    打开是一个计算器查看网页源码发现,程序通过调用clac.php文件给num传参再计算,其中encodeURIComponent函数对计算表达式中的符号进行转码。例如表达式为1+1,则返回1%2B1,故url为calc.php?num=1%2B1。另外这里还提示我们他已经部署了waf,waf会过滤一些非法字符访问calc.php发现直接......
  • OpenLayers教程11_在OpenLayers中启用WebGL渲染
    在OpenLayers中启用WebGL渲染:提高地图渲染性能的完整指南目录一、引言二、WebGL渲染在WebGIS中的作用WebGL的优势WebGL与Canvas渲染的区别三、在OpenLayers中启用WebGL的方法四、代码实现步骤1.初始化地图和基本WebGL渲染2.加载大规模点数据3.自......
  • [极客大挑战 2019]BuyFlag
    点击右上角的菜单,有一个payflag,直接点击,进入到了pay.php页面发现,需要得到flag有两个要求:必须是该校的学生,密码必须正确。在该页面的网页底部,有代码提示,要求密码不能是纯数字,最后又要==404密码才正确。我们可以想到利用php的弱类型比较:只要前缀有404就好。那需要做的就是获取......
  • OpenLayers教程12_WebGL自定义着色器:实现高级渲染效果
    在OpenLayers中使用WebGL自定义着色器实现高级渲染效果目录一、引言二、WebGL自定义着色器的优势三、示例应用:实现动态渲染效果1.项目结构2.主要代码实现3.运行与效果四、代码讲解与扩展1.动态圆的半径和填充颜色2.动态透明度与边框效果五、总结六、参考资......
  • [极客大挑战 2019]BabySQL
    打开页面是一个登录界面,直接用admin’or1#试试深浅回显为:这里我们分析一下这个报错,near后跟的单引号中的内容为1#'andpassword='a',那么说明sql语句就是从这里开始语法不正确的,模拟一下正常的sql应该是select*fromtablewhereusername='admin'or1#password='a'',这......