欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

IDEA创建第一个javaweb项目——包含Java代码的项目

程序员文章站 2022-07-05 20:00:13
...

这篇文章我们主要介绍:
1.如果html文件中需要使用Java代码应如何做。
2.如何不通过html就能访问Java代码(其中包含了web项目中使用MySQL)。

一、前言(基础知识,可以直接跳过)

以上两个问题,都需要通过配置web.xml来实现。
我们先来了解一下web.xml中的内容,以及各个内容的含义。
IDEA创建第一个javaweb项目——包含Java代码的项目

1.XML概述和HTML的区别

XML 指可扩展标记语言(eXtensible Markup Language)。
XML和HTML的区别:
1)在大多数 Web 应用程序中,XML 用于传输数据,而 HTML 用于格式化并显示数据。
2)XML 允许创作者定义自己的标签和自己的文档结构(如<to> 、 <from>)。
HTML 中使用的标签都是预定义的。HTML 文档只能使用在 HTML 标准中定义过的标签(如 <p>、<h1> )。

2.XML格式介绍

IDEA中刚刚新建时web.xml中的代码如下:

<?xml version="1.0" encoding="UTF-8"?> //1)XML声明,定义XML的版本(1.0)和所使用的编码(UTF-8 : 万国码, 可显示各种语言)。

<web-app //2)描述文档的根元素。XML文档必须包含根元素。该元素是所有其他元素的父元素。

	//3)以下4行是XML元素的属性
	 xmlns="http://xmlns.jcp.org/xml/ns/javaee" //3.1)为元素定义默认的命名空间,防止两个带有不同内容和定义的 <web-app> 元素XML文档被一起使用,发生命名冲突。
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"//3.2)含有前缀的命名空间声明。前缀是“xsi”,之后在xml中就可以使用<xsi:table>而不会和其他xml文档中的<table>冲突。
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         //3.3)xsi命名空间对应的验证文件的地址,也就是xml书写时需要遵循的语法。两部分组成,1.命名空间的名字;2.验证文件的地址,表示把定义这个命名空间的schema文件给引用进来,好让工具能够解析和验证xml文件是否符合语法规范。
         version="4.0">//3.4)web.xml的版本,也是servlet的版本
	
	//<child> 4)根的第1个子元素
		//<subchild>.....</subchild> 5)根的第2个子元素
	//</child>
	
</web-app>//6)根元素的关闭标签。在XML中,所有元素都必须有关闭标签。

如果有小伙伴想详细了解XML,参见 菜鸟教程|XML教程

3.Servlet介绍

Servlet是一种运行在支持Java语言的服务器(如Tomcalt)上的组件。Servlet最常见的用途是扩展Java Web服务器功能,处理请求和发送响应。详见:Java Web----Servlet详解(其中的“三、编写Servlet”对理解Servlet很有帮助)

二、如果html文件中需要使用Java代码应如何做

下面我们以“提交表单”为例。

1.修改hello.html中的内容为:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>这里是一个标题</title>
</head>
<body>
<form action="HelloForm" method="GET">
    姓名:<input type="text" name="name">
    <br />
    年龄:<input type="text" name="age" />
    <input type="submit" value="提交" />
</form>
</body>
</html>

2.注意到<form action="HelloForm" method="GET">,我们需要新建一个Java类,名为HelloForm。
1)右键src新建Java类。
IDEA创建第一个javaweb项目——包含Java代码的项目2)命名为HelloForm,并确定。
3)复制以下代码到HelloForm.java。

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

**
 * Servlet implementation class HelloForm
 */
public class HelloForm extends HttpServlet {
    private static final long serialVersionUID = 1L;

    /**
     * @see HttpServlet#HttpServlet()
     */
    public HelloForm() {
        super();
        // TODO Auto-generated constructor stub
    }

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // 设置响应内容类型
    response.setContentType("text/html;charset=UTF-8");

    PrintWriter out = response.getWriter();
    String title = "使用 GET 方法读取表单数据";
    // 处理中文
    String name =new String(request.getParameter("name").getBytes("ISO-8859-1"),"UTF-8");
    String docType = "<!DOCTYPE html> \n";
    out.println(docType +
            "<html>\n" +
            "<head><title>" + title + "</title></head>\n" +
            "<body bgcolor=\"#f0f0f0\">\n" +
            "<h1 align=\"center\">" + title + "</h1>\n" +
            "<ul>\n" +
            "  <li><b>姓名</b>:"
            + name + "\n" +
            "  <li><b>年龄</b>:"
            + request.getParameter("age") + "\n" +
            "</ul>\n" +
            "</body></html>");
}
   // 处理 POST 方法请求的方法
    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }
}

4)复制后,会有好多红色,这是没有导入相关的jar包导致的。按提示下载就行。

3.此时,我们运行一下项目,输入hello.html并提交相应内容后,会出现如下: 这是因为服务器不知道“/webTestFinal_war_exploded/HelloForm”是什么意思,不知道遇到这个它该怎么做。
IDEA创建第一个javaweb项目——包含Java代码的项目
4.下面就需要配置web.xml,来使服务器认得“/webTestFinal_war_exploded/HelloForm”。
将web.xml修改如下:

<?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">
    <servlet>
        <!-- 类名 ,随便,一般是Servlet类名-->
        <servlet-name>HelloForm</servlet-name>
        <!-- 所在的包 ,Servlet的位置-->
        <servlet-class>HelloForm</servlet-class>
    </servlet>
    <servlet-mapping>
        <!-- 跟上面名字相同 -->
        <servlet-name>HelloForm</servlet-name>
        <!-- 访问的网址 ,浏览器通过该url找到Servlet,一定要加-->
        <url-pattern>/HelloForm</url-pattern>
    </servlet-mapping>
</web-app>

5.下面我们再运行一下。当当当当!!!成功啦!!!
IDEA创建第一个javaweb项目——包含Java代码的项目

三、如何不通过html就能访问Java代码

做项目时,访问数据库是必不可少的,下面我们以Javaweb项目如何使用MySQL为例,介绍如何不通过html就能访问Java代码。

1.IDEA连接数据库。
请见 后端开发配置全过程(IDEA中使用MySQL)。完成后,项目中会出现:

IDEA创建第一个javaweb项目——包含Java代码的项目

进行以下操作时,请确保数据库已打开,并确认数据库中有websites表。

2.新建一个名为DatabaseAccess的Java类,并将以下代码复制:

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.*;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class DatabaseAccess
 */
@WebServlet("/DatabaseAccess")
public class DatabaseAccess extends HttpServlet {
    private static final long serialVersionUID = 1L;
    // JDBC 驱动名及数据库 URL
    static final String JDBC_DRIVER = "com.mysql.cj.jdbc.Driver";
    static final String DB_URL = "jdbc:mysql://localhost:3306/footbed";

    // 数据库的用户名与密码,需要根据自己的设置
    static final String USER = "root";
    static final String PASS = "xxxx";
    /**
     * @see HttpServlet#HttpServlet()
     */
    public DatabaseAccess() {
        super();
        // TODO Auto-generated constructor stub
    }
/**
 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
 */
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    Connection conn = null;
    Statement stmt = null;
    // 设置响应内容类型
    response.setContentType("text/html;charset=UTF-8");
    PrintWriter out = response.getWriter();
    String title = "这是一个title";
    String docType = "<!DOCTYPE html>\n";
    out.println(docType +
            "<html>\n" +
            "<head><title>" + title + "</title></head>\n" +
            "<body bgcolor=\"#f0f0f0\">\n" +
            "<h1 align=\"center\">" + title + "</h1>\n");
    try{
        // 注册 JDBC 驱动器
        Class.forName(JDBC_DRIVER);

        // 打开一个连接
        conn = DriverManager.getConnection(DB_URL,USER,PASS);

        // 执行 SQL 查询
        stmt = conn.createStatement();
        String sql;
        sql = "SELECT id, name, url FROM websites";
        ResultSet rs = stmt.executeQuery(sql);

        // 展开结果集数据库
        while(rs.next()){
            // 通过字段检索
            int id  = rs.getInt("id");
            String name = rs.getString("name");
            String url = rs.getString("url");

            // 输出数据
            out.println("ID: " + id);
            out.println(", 站点名称: " + name);
            out.println(", 站点 URL: " + url);
            out.println("<br />");
        }
        out.println("</body></html>");

            // 完成后关闭
            rs.close();
            stmt.close();
            conn.close();
        }catch(SQLException se){
            // 处理 JDBC 错误
            se.printStackTrace();
        }catch(Exception e){
            // 处理 Class.forName 错误
            e.printStackTrace();
        }
    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        doGet(request, response);
    }
}

其中,这段代码非常重要,对应浏览器路径。
IDEA创建第一个javaweb项目——包含Java代码的项目
在web.xml中,我们也配置过一个浏览器路径,通过这两个路径都可以访问到DatabaseAccess.java,因此只配置一个就可以。切记:两个路径不要重名,否则反而会让Tomcat启动不了。也不要同时使用,不然有一个会用不了。
我们把两个路径配成不一样的,一会儿尝试一下是否都可以使用。

//web.xml
<url-pattern>/test/DatabaseAccess</url-pattern>
//DatabaseAccess.java
@WebServlet("/DatabaseAccess")

3.现在,我们运行一下项目,先尝试第一个。
修改url为http://localhost:8080/webTestFinal_war_exploded/test/DatabaseAccess
并没有出现我们预想的效果。
IDEA创建第一个javaweb项目——包含Java代码的项目
回过头来看看IDEA是否报错,发现真的报错了。
IDEA创建第一个javaweb项目——包含Java代码的项目

Class.forName(JDBC_DRIVER);

提示是这一行代码报错了,但是web项目的数据库连接和只有一个Java文件时的数据库连接,确实是按着同一个过程来的,为什么这里不行呢。

原来是tomcat找不到MYSQL JAR包!
必须把mysql-connector-java-8.0.19-bin.jar导入到tomcat的lib目录下面
java项目中,只需要引入mysql-connector-java-8.0.19-bin.jar就可以运行java项目。  
web项目中,当Class.forName(“com.mysql.cj.jdbc.Driver”);时,IDEA是不会去查找驱动的。所以要把mysql-connector-java-8.0.19-bin.jar拷贝到tomcat下lib目录。

4.移动好位置后,我们再来运行一下。成功啦!!!
IDEA创建第一个javaweb项目——包含Java代码的项目
5.修改一下web.xml中的类名,这次我们用第2个url尝试一下,也是可以的。
IDEA创建第一个javaweb项目——包含Java代码的项目

到这里使用IDEA创建第一个javaweb项目——包含Java代码的项目,就结束啦。
如果哪里有错误,欢迎大家批评指正。
如果能帮到您,麻烦小手点个赞哦~~~

相关标签: 后端开发