🙈作者简介:练习时长两年半的Java up主
🙉个人主页:老茶icon
🙊 ps:点赞👍是免费的,却可以让写博客的作者开兴好久好久😎
📚系列专栏:Java全栈,计算机系列(火速更新中)
💭 格言:种一棵树最好的时间是十年前,其次是现在
🏡动动小手,点个关注不迷路,感谢宝子们一键三连

课程名:JavaWeb

内容/作用:知识点/设计/实验/作业/练习

学习:在IDEA中创建基于Maven的Web项目

在IDEA中创建基于Maven的Web项目

1.新建webapp模板

在这里插入图片描述

2.在src目录下新建文件夹,之后在此创建java文件

在这里插入图片描述

选择main\java

在这里插入图片描述

3.修改项目中web.xml版本为4.0

打开项目结构
在这里插入图片描述

移除默认2.3版本的web.xml文件,移除后一定要apply应用

重新添加web.xml文件,选择4.0版本

在这里插入图片描述

4.配置tomcat服务器

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

5.将项目部署在tomcat中

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

6.启动项目

启动tomcat

在这里插入图片描述

默认启动成功后会自动打开浏览器访问项目,也可以通过"localhost:8080/项目名"访问。

这里看到的页面,是web项目中自带的index.jsp文件
在这里插入图片描述

web资源目录结构

webapp下如果有index文件,访问项目后会自动访问index文件,如果没有名为index的文件,就会出现404,表示index页面不存在

项目上下文路径

域名+端口+项目名 称为项目上下文路径

如localhost:8080/web01就是项目上下文路径,可以理解为项目根目录

webapp目录直接通过项目上下文路径访问,无需显式写出

在这里插入图片描述

更新了项目中的内容后,根据需要选择重启还是重新部署

在这里插入图片描述

修改项目编译时的jdk版本

修改web模块的jdk版本

在这里插入图片描述

修改当前项目的jdk版本

在这里插入图片描述

解决tomcat控制台中文乱码

在这里插入图片描述

在这里插入图片描述

重启IDEA

Servlet

Servlet表示Server+Applet,意味运行在服务器上的程序。是一个被动运行程序,每次请求都要执行。

BS结构客户端访问服务器端的流程

在这里插入图片描述

编写Servlet的步骤

1.在项目中导入Servlet所需依赖

在这里插入图片描述

<!-- servlet所需依赖 -->
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>4.0.0</version>
    <scope>provided</scope>
</dependency>

粘贴在pom.xml文件中的dependencies标签下

2.在项目的java目录下,新建一个类,继承HttpServlet,重写doGet和doPost方法

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

/*
 * 编写Servlet的步骤
 * 1.导入依赖
 * 2.创建一个类,继承HttpServlet,重写doGet和doPost方法
 * 3.在web.xml中设置访问该类的url映射
 * */
public class FirstServlet extends HttpServlet {
    //普通的控制台项目,需要主动运行main方法执行程序
    //web项目中的java程序,需要被动运行,在用户通过浏览器访问某个程序的url映射时执行

    /*
     * 当浏览器发送的是get类型的请求,执行这个方法
     * */
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) {
        System.out.println("get请求");
    }

    /*
     * 当浏览器发送的是post类型的请求,执行这个方法
     * */
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) {
        System.out.println("post请求");
    }
}

3.在web.xml文件下,配置Servlet

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">

    <!--xml是一个配置文件,属于一种标记语言,通过标签定义内容-->
    <!--声明Servlet-->
    <servlet>
        <!--servlet命名-->
        <servlet-name>firstServlet</servlet-name>
        <!--servlet类的全限定名(路径+文件名)-->
        <servlet-class>FirstServlet</servlet-class>
    </servlet>
    <!--定义Servlet的请求映射-->
    <servlet-mapping>
        <!--要映射的servlet名,与上方定义的servlet-name一致-->
        <servlet-name>firstServlet</servlet-name>
        <!--请求映射url,必须以/开头-->
        <!--之后通过项目上下文路径+该路径,就能访问FirstServlet类-->
        <url-pattern>/first</url-pattern>
    </servlet-mapping>
</web-app>

复制资源的相对路径
在这里插入图片描述

在这里插入图片描述

启动tomcat,访问"localhost:8080/项目路径/first"即可访问自定义servlet类中的doGet方法

解决tomcat控制台中输出中文时的乱码

在这里插入图片描述

三层架构

在这里插入图片描述

在软件开发中,并不是将所有的功能集成到一个类或文件中实现,而是要将其分层处理。从而达到"高内聚,低耦合"的目的。

低耦合是指降低各个模块之间的关联程度,便于开发和维护,各个模块各司其职。

高内聚指各个模块的功能不开再分。

通常所说的三层架构中的三层,指"数据访问层业务逻辑层视图表现层"

  • 数据访问层:用于连接操作数据库的类。对数据进行增删改查。
  • 业务逻辑层:用于处理业务逻辑,在适当的情况下访问数据访问层中的内容。
  • 视图表现层:用于展示和提供用户输入的渠道,在适当的情况下访问业务逻辑层中的内容

访问服务器某个URL的方式

  • 在浏览器的地址栏中输入对应URL,属于get请求
  • 使用a标签,在href中定义对应的URL,属于get请求
  • 使用form表单,在action中定义对应的URL,根据method属性的值控制get或post请求

页面向服务器端提交数据的方式

  • 使用form表单的name属性显式提交

    <form action="http://localhost:8080/web01/getOne" >
        <input type="text" name="id">
        <input type="submit">
    </form>
    

    提交的数据会暴露在浏览器的地址栏中

  • 使用form表单的name属性隐式提交

    <form action="http://localhost:8080/web01/getOne" method="post" >
        <input type="text" name="id">
        <input type="submit">
    </form>
    

    提交的数据不会暴露在浏览器的地址栏中

  • 通过"?参数1=值&参数2=值"方式显示提交

    • 在浏览器的地址栏中输入

      http://localhost:8080/web01/getOne?id=23
      
    • 使用a标签

      <a href="http://localhost:8080/web01/login?username=admin&password=123123">登录</a>
      

    提交的数据会暴露在浏览器的地址栏中

服务器端获取前端提交的数据

前端页面传递数据

<a href="URL?id=123">访问</a>

<form action="URL">
    <input name="id">
    <input type="submit">
</form>

在Servlet的doGet或doPost方法中,

通过**request.getParameter(“name值或?后的参数”)**获取数据,返回值为String

protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
	//获取页面提交的名为id的参数,返回值为String
    String id = req.getParameter("id");
    
    if (service.delete(Integer.parseInt(id))) {
        //跳转至另一个URL
        resp.sendRedirect("http://localhost:8080/Web01/queryEmps");
    } else {
        resp.getWriter().print("删除失败");
    }
}

解决请求和响应时的中文乱码

public class MServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //解决请求时的乱码
        req.setCharacterEncoding("utf-8");
		//解决响应时的乱码
        resp.setContextType("text/html;charset=utf-8");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

总结

   好好学习,天天向上。

往期专栏
Java全栈开发
数据结构与算法
计算机组成原理
操作系统
数据库系统
物联网控制原理与技术
Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐