Maven

Maven项目架构管理工具

核心思想:约定大于配置

阿里云镜像

<mirror>
      <id>aliyun-maven</id>
      <name>aliyun maven</name>
      <url>
        http://maven.aliyun.com/nexus/content/groups/public/
      </url>
      <mirrorOf>central</mirrorOf>        
    </mirror>

本地仓库

<localRepository>D:\maven\apache-maven-3.9.11\maven-repo</localRepository>

配置pom文件

maven由于他的约定大于配置,我们之后可以能遇到我们写的配置文件,无法被导出或者生效的问题,解决方案:

<!--在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>
</build>

6.Servlet

  • Servlet就是sun公司开发动态web的一门技术

  • Sun在这些API中提供一个接口叫做:Servlet,如果你想开发一个- - --Servlet程序,只需要完成两个小步骤

    • 编写一个类,实现Servlet接口

    • 把开发好的]ava类部署到web服务器中

    • 把实现了Servlet接口的Java程序叫做,Servlet

HelloServlet

1.maven

构建一个Maven(org.apache.maven.archetypes:maven-archetype-quickstart)

2.关于Maven父子工程

父项目中

  <modules>
    <module>MavenWebapp01</module>
  </modules>

子项目中

    <parent>
        <groupId>org.example</groupId>
        <artifactId>MavenClear</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>

3.Maven环境优化

1.修改web.xml为最新的

2.将maven的结构搭建完整(main下创建java目录和resources)

4.编写一个Servlet程序

1.编写一个普通类

2.实现Servlet接口(Sun公司有默认的两个实现类:HttpServlet和GenericServlet)

package com.lyj.servlet;
​
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.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 {
        System.out.println("进入了DoGet方法");
        resp.setContentType("text/html;charset=utf-8");
        resp.setCharacterEncoding("UTF-8");
​
​
        // 只使用一种输出流(这里保留字符流用于文本输出)
        PrintWriter writer = resp.getWriter();
        writer.print("hello---Servlet啊啊啊啊");
​
        // 注意:如果需要输出二进制数据(如图片),才使用字节流:
        // ServletOutputStream outputStream = resp.getOutputStream();
        // outputStream.write(...)
    }
​
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 可以根据需要实现POST请求处理逻辑
        // 例如:调用doGet方法复用逻辑
        doGet(req, resp);
    }
}
​

5.编写Servlet的映射

原因:我们写的是Java程序,但是要通过浏览器访问,而浏览器需要连接web服务器,所以我们需要在wen服务中注册我们写的Servlet,还需要给他一个浏览器能够访问的路径

<?xml version="1.0" encoding="UTF-8"?>
<web-app 
    xmlns="https://jakarta.ee/xml/ns/jakartaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee 
                        https://jakarta.ee/xml/ns/jakartaee/web-app_6_0.xsd"
    version="6.0"> 
    <display-name>Welcome to Tomcat</display-name>
    <description>Welcome to Tomcat</description>
<!--    注册Servlet-->
    <servlet>
        <servlet-name>hiservlet</servlet-name>
        <servlet-class>com.lyj.servlet.HelloServlet</servlet-class>
    </servlet>
<!--    Servlet的请求路径-->
    <servlet-mapping>
        <servlet-name>hiservlet</servlet-name>
        <url-pattern>/hiservlet111</url-pattern> <!-- 修正为合法格式 -->
    </servlet-mapping>
</web-app>

6.配置Tomcat(参考)

7.启动测试

       resp.setContentType("text/html;charset=utf-8");
        resp.setCharacterEncoding("UTF-8");
//可以加上这个防止中文乱码

Servlet原理

Mapping问题

1.一个Servlet可以指定一个映射路径

<!--    Servlet的请求路径-->
    <servlet-mapping>
        <servlet-name>hiservlet</servlet-name>
        <url-pattern>/hiservlet111</url-pattern> <!-- 修正为合法格式 -->
    </servlet-mapping>

2.一个Servlet可以指定多个映射路径

<!--    Servlet的请求路径-->
    <servlet-mapping>
        <servlet-name>hiservlet</servlet-name>
        <url-pattern>/hiservlet111</url-pattern> <!-- 修正为合法格式 -->
    </servlet-mapping><!--    Servlet的请求路径-->
    <servlet-mapping>
        <servlet-name>hiservlet</servlet-name>
        <url-pattern>/hiservlet222</url-pattern> <!-- 修正为合法格式 -->
    </servlet-mapping>

3.一个Servlet可以指定通用映射路径

<!--    Servlet的请求路径-->
    <servlet-mapping>
        <servlet-name>hiservlet</servlet-name>
        <url-pattern>/hiservlet111/*</url-pattern> <!-- 修正为合法格式 -->
    </servlet-mapping>

4.默认请求路径(少用!)

<!--    Servlet的请求路径-->
    <servlet-mapping>
        <servlet-name>hiservlet</servlet-name>
        <url-pattern>/*</url-pattern> <!-- 修正为合法格式 -->
    </servlet-mapping>

5.指定一些后缀或者前缀等等...

<!--    Servlet的请求路径-->
    <servlet-mapping>
        <servlet-name>hiservlet</servlet-name>
        <url-pattern>*.asdads</url-pattern> <!-- 修正为合法格式 -->
    </servlet-mapping>

6.优先级问题

指定了固有映射路径优先级最高,如果找不到就会走默认的处理请求

<!--    Servlet的请求路径-->
    <servlet-mapping>
        <servlet-name>hiservlet</servlet-name>
        <url-pattern>/hiservlet111</url-pattern> <!-- 修正为合法格式 -->
    </servlet-mapping>
//这样子的优先级最高,因为指定了/hiservlet111这个路径

ServletContext

web容器在启动的时候,它会为每个web程序都创建一个对应的ServletContext对象,它代表了当前的web应用

  • 共享数据:我在这个Servlet中保存的数据,可以在另一个Servlet中拿到

1.共享数据

HelloServlet

package com.lyj.servlet;

import jakarta.servlet.ServletContext;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

import java.io.IOException;

public class HelloServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        ServletContext context = this.getServletContext();

        String username = "我的名字";
        context.setAttribute("username", username);
    }
}

GetServlet

package com.lyj.servlet;
​
import jakarta.servlet.ServletContext;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
​
import java.io.IOException;
​
public class GetServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        ServletContext context = this.getServletContext();
        String username = (String) context.getAttribute("username");
​
        resp.setContentType("text/html;charset=UTF-8");
        resp.setCharacterEncoding("UTF-8");
        resp.getWriter().print("名字"+username);
    }
}
​

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app
        xmlns="https://jakarta.ee/xml/ns/jakartaee"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee
https://jakarta.ee/xml/ns/jakartaee/web-app_6_0.xsd"
        version="6.0">
  <display-name>Welcome to Tomcat</display-name>
  <description>Welcome to Tomcat</description>
​
  <servlet>
    <servlet-name>hiservlet</servlet-name>
    <servlet-class>com.lyj.servlet.HelloServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>hiservlet</servlet-name>
    <url-pattern>/hiservlet02</url-pattern>
  </servlet-mapping>
​
  <servlet>
    <servlet-name>getservlet</servlet-name>
    <servlet-class>com.lyj.servlet.GetServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>getservlet</servlet-name>
    <url-pattern>/getservlet01</url-pattern>
  </servlet-mapping>
​
</web-app>

pom.xml

<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/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.example</groupId>
        <artifactId>MavenClear</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <artifactId>MavenWebapp02</artifactId>
    <packaging>war</packaging>
    <name>MavenWebapp02 Maven Webapp</name>
    <url>http://maven.apache.org</url>
    <dependencies>
        <!-- 测试依赖:仅在测试时生效 -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.1</version>
            <scope>test</scope>
        </dependency>
​
        <!-- Servlet API 依赖:由 Tomcat 提供,编译时需要 -->
        <dependency>
            <groupId>jakarta.servlet</groupId>
            <artifactId>jakarta.servlet-api</artifactId>
            <version>6.0.0</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>
    <build>
        <finalName>MavenWebapp02</finalName>
    </build>
</project>
​

2.获取初始化参数

ServletDemo03

package com.lyj.servlet;
​
import jakarta.servlet.ServletContext;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
​
import java.io.IOException;
​
public class ServletDemo03 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        ServletContext context = this.getServletContext();
​
        // 1. 定义要获取的初始化参数的名称(例如 "url",需与 web.xml 中配置一致)
        String paramName = "url";
​
        // 2. 通过参数名称获取对应的初始化参数值
        String paramValue = context.getInitParameter(paramName);
​
        // 3. 将结果输出到响应
        resp.setContentType("text/html;charset=UTF-8");
        resp.getWriter().print("初始化参数 [" + paramName + "] 的值为:" + paramValue);
    }
​
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // POST 请求可调用 doGet 处理,保持逻辑一致
        doGet(req, resp);
    }
}
​

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app
        xmlns="https://jakarta.ee/xml/ns/jakartaee"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee
https://jakarta.ee/xml/ns/jakartaee/web-app_6_0.xsd"
        version="6.0">
  <display-name>Welcome to Tomcat</display-name>
  <description>Welcome to Tomcat</description>
​
  <context-param>
    <param-name>url</param-name>
    <param-value>jdbc:mysql://localhost:3306/mmyyssqqll</param-value>
  </context-param>
​
  <servlet>
    <servlet-name>geturl</servlet-name>
    <servlet-class>com.lyj.servlet.ServletDemo03</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>geturl</servlet-name>
    <url-pattern>/geturl1</url-pattern>
  </servlet-mapping>
​
​
  <servlet>
    <servlet-name>hiservlet</servlet-name>
    <servlet-class>com.lyj.servlet.HelloServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>hiservlet</servlet-name>
    <url-pattern>/hiservlet02</url-pattern>
  </servlet-mapping>
​
  <servlet>
    <servlet-name>getservlet</servlet-name>
    <servlet-class>com.lyj.servlet.GetServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>getservlet</servlet-name>
    <url-pattern>/getservlet01</url-pattern>
  </servlet-mapping>
​
</web-app>

3.请求转发

ServletDemo04

package com.lyj.servlet;
​
import jakarta.servlet.RequestDispatcher;
import jakarta.servlet.ServletContext;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
​
import java.io.IOException;
​
public class ServletDemo04 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        ServletContext context = this.getServletContext();
        System.out.println("进入了 ServletDemo04.doGet");
​
        RequestDispatcher requestDispatcher = context.getRequestDispatcher("/geturl1");//转发的请求路径
        requestDispatcher.forward(req,resp);//调用forward实现请求转发
​
        //context.getRequestDispatcher("/geturl2").include(req,resp);//一段代码版
    }
}
​

4.读取资源文件

Properties

  • 在Java目录下新建properties

  • 在resources目录下新建properties

发现:都被打包到了同一个路径下:classes,我们俗称这个路径为class path

思路:需要一个文件流

package com.lyj.servlet;
​
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
​
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
​
public class ServletDemo05 extends HttpServlet {
​
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 设置响应编码,避免中文乱码
        resp.setContentType("text/html;charset=UTF-8");
​
        // 获取配置文件输入流
        InputStream is = this.getServletContext().getResourceAsStream("/WEB-INF/classes/db.properties");
​
        Properties prop = new Properties();
        prop.load(is);
​
        // 直接使用属性名获取值
        String username = prop.getProperty("username");
        String password = prop.getProperty("password");
​
        resp.getWriter().print(username + ":" + password);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值