本文旨在让刚入门Java的新手能够创建第一个web项目,能够对Javaweb开发有一个基本的认识和了解。
本文所用工具:Intellij IDEA,可在官网下载社区版或专业版,社区版是免费的。
环境:jdk 12.0.2
web服务器软件:tomcat 9.0.30
数据库:MySQL 8.0.18 (不需数据库只需跳过后面部分即可)
Java数据库连接驱动:jdbc 8.0.18
jdbc下载教程:JDBC下载安装
选择 file->new->project,选择JavaEnterprise,一般jdk环境会默认根据系统环境
tomcat如果没有点击new,选择自己的tomcat路径(bin文件所在的目录),OK即可。
选择项目名,项目路径,然后点finish
打开侧边栏project,展开项目目录,结构如下
其中.idea是整个项目的配置文件
src是存放Java源码的目录
web目录一般是存放jsp或前端代码,以及字节码文件和web配置文件
点击右上角Edit Configurations(由于我的已经配置好,所以会显示tomcat)
在Templates下找到tomcat
点击local
下拉选择服务器,设置端口号,然后点击Apply应用,OK
双击index.jsp,打开文件,JSP是一种能够在前端HTML代码里面嵌入Java代码的文件格式,用<% %>标签将Java代码包起来即可,其中,表达式用<%=表达式%>。编写如下代码
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>第一个web</title> <!-- 标题 -->
</head>
<body>
<%-- 内容都写在body,如果不太懂HTML可以先找几篇博客看一下,也简单--%>
<h1>这是我第一个web</h1>
<%-- 下面嵌入Java代码--%>
<%
int a=1,b=2,c;
c=a+b;
out.println("1+2的和是:");//out是内置对象,所以不用写System.out
%>
<%--jsp中Java表达式--%>
<%=c%>
</body>
</html>
配置项目结构,在WEB-INF下创建两个文件夹classes和lib,一般用来存放编译好的Java字节码文件和依赖的库(比如后面用到的JDBC)
点击file -> project structure,将输出路径选为刚创建的classes,点击Apply,OK
配置服务器,点击Edit Configurations
把Myweb_war_exploded/删掉,http://localhost:8080/表示你运行项目时,浏览器上显示的url
切换Development下,下方的Myweb_war_exploded/也删掉,只流一条斜线,点击Apply,然后点OK
配置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">
<!-- 这里表示启动时,浏览器默认打开的页面-->
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
点击右上角的绿色三角形,运行
运行结果如下
至此,就已经对基本的web项目流程搞清楚了,前后端都可以在jsp中写,不同功能写不同的页面(当然这是比较原始的方法,对于大型项目不合适)。
----------------------分割线----------------------------
如果还没准备好数据库环境的同学就到此结束了,关于MySQL的环境配置这里不多讲,网上有很多。
jdbc是Java用来连接数据库的驱动,要添加依赖到web项目才能使用,首先解压下载的jdbc,找到.jar文件,把它拷贝到刚才建的lib文件目录下:
然后打开file->project structure,点击+号,选择第一个jar
选择刚才拷贝的jar文件
点击Apply,OK
创建一个简单的学生表数据库
编写连接数据库的代码,在src中新建package conn,再新建一个Dao类,返回的是一个connection。
编写连接数据库代码,Dao类里写如下代码:
package conn;
import java.sql.*;
public class Dao {
String driverClass = "com.mysql.cj.jdbc.Driver";
String serverIp = "localhost";//主机名,一般默认localhost
String databaseName = "myweb";//数据库的名字
String userName = "root";
String pwd = "123456";//数据库密码
String jdbcUrl = "jdbc:mysql://"+serverIp+":3306/"+databaseName+"?serverTimezone=Asia/Shanghai&useSSL=true";
Connection con=null;
public Connection connection(){
Connection con=null;
try {
//读取JDBC
Class.forName(driverClass);
//链接数据库
con = DriverManager.getConnection(jdbcUrl,userName,pwd);
this.con = con;
} catch (Exception e) {
e.printStackTrace();
}
return con;//返回Connection对象
}
}
再新建一个package,添加一个测试类Test,测试一下数据库连接,写入以下内容:
package test;
import conn.Dao;//包含Dao类
import java.sql.*;
public class Test {
public static void main(String args[]){
Dao dao = new Dao();//创建Dao对象
Connection con = dao.connection();//获得连接对象
String tableName = "test";//数据库中的一个表的表名
if (con != null)
System.out.print("数据库连接成功!");
else
System.out.print("数据库连接失败");
try {
Statement statement = con.createStatement();
String sql = "SELECT * FROM test";//定义一个查询语句
ResultSet rs = statement.executeQuery(sql);//执行查询语句
while (rs.next()){
System.out.print("ID:"+rs.getString("id"));
System.out.print("姓名:"+rs.getString("name"));
System.out.print("年龄:"+rs.getString("age"));
System.out.println();
}
}catch (Exception e){
System.out.print("异常:"+e);
}
}
}
运行一下测试类,注意,不要点之前的绿色三角形,因为那是运行web项目的,现在我们要运行Java代码。
选择要运行的类
运行结果,控制台会输出表test中的所有信息,
刚刚只是在控制台测试了一下数据库连接,发现能正常连接,现在我们要在网页上显示数据库内容,只需吧测试代码放到index.jsp中即可,不要忘了导入Dao类。对了,这里说一下,虽然index.jsp与Dao类不在同一目录下,但由于src目录是被设置为了根目录(文件夹颜色一般是蓝色),所以在项目任何地方都能直接访问src下的包。index.jsp中编写代码如下:
<%@ page import="conn.Dao" %>
<%@ page import="java.sql.Connection" %>
<%@ page import="java.sql.Statement" %>
<%@ page import="java.sql.ResultSet" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>第一个web</title> <!-- 标题 -->
</head>
<body>
<%-- 内容都写在body,如果不太懂HTML可以先找几篇博客看一下,也简单--%>
<h1>这是我第一个web</h1>
<%-- 下面嵌入Java代码--%>
<%
Dao dao = new Dao();//创建Dao对象
Connection con = dao.connection();//获得连接对象
String tableName = "test";//数据库中的一个表的表名
if (con != null)
System.out.println("数据库连接成功!");
else
System.out.println("数据库连接失败");
try {
Statement statement = con.createStatement();
String sql = "SELECT * FROM test";//定义一个查询语句
ResultSet rs = statement.executeQuery(sql);//执行查询语句
%>
<table border="1">
<tr><th>ID</th><th>姓名</th><th>年龄</th></tr>
<%
while (rs.next()){
%>
<tr>
<td><%=rs.getString("id")%></td><!--获取字段-->
<td><%=rs.getString("name")%></td>
<td><%=rs.getString("age")%></td>
</tr>
<% }
}catch (Exception e){
System.out.print("异常:"+e);
}
%>
</table>
</body>
</html>
运行web项目,要选择tomcat运行
结果
如果能成功,恭喜你已经了解了基本的Javaweb项目建立和数据库连接等相关操作,如果有什么问题欢迎在下方留言。
文章浏览阅读1.6k次。3D知识:3D电影的技术原理及制作流程3D电影,即立体电影,1952年,世界电影史上第一部真正的3D电影《非洲历险记》诞生。此后,虽然3D电影的技术以及电影制作都在得到蓬勃的发展,但是直到1982年的《黑色星期五》才让3D电影真正复苏。80年代期间,好莱坞出现了不少3D电影,如《大白鲨3》、《魔晶战士》等,但都由于其质量的问题,没有取得预期中的良好效果。3D电影《异星..._1.查询3d电影有史以来各个时期的制作原理
文章浏览阅读320次。题目描述:给定一个非负整数num,反复将各个位上的数字相加,直到结果为一位数。示例:输入: 38输出: 2解释: 各位相加的过程为:3 + 8 = 11, 1 + 1 = 2。 由于 2 是一位数,所以返回 2。解题思路:直接循环取出每一位上的数字,求和后,判断是否满足结束条件,若不满足,则继续对求和后的数字计算,知道满足条件为止。代码实现(java):class Solution {publi..._java 给定一个代表每个格子得分的非负整数数组,计算能够得到的
文章浏览阅读730次。转:http://blog.csdn.net/coslay/article/details/43131645字节码格式字节码是JVM的机器语言。JVM加载类文件时,对类中的每个方法,它都会得到一个字节码流。这些字节码流保存在JVM的方法区中。在程序运行过程中,当一个方法被调用时,它的字节码流就会被执行。根据特定JVM设计者的选择,它们可以通过解释的方式,即时编译(Jus_java 7e 01 0c 00 4b
文章浏览阅读638次,点赞24次,收藏22次。默认密码是什么?没有默认密码,通过重置密码的方式来设置新的密码。阿里云服务器默认用户名Linux系统是root,Windows系统是administrator。阿里云服务器默认密码阿里云服务器没有默认密码,购买云服务器时没有创建密码,那么云服务器就没有密码。想要远程登录云服务器,需要先通过重置实例密码的方式来设置新的密码,然后通过设置的密码的登录。阿里云服务器没有默认密码阿里云服务器没有默认密码。_刚买的阿里云linux 密码多少
文章浏览阅读2.8w次,点赞222次,收藏605次。前段时间我妈突然问我:儿子,爬虫是什么?我当时既惊讶又为难,惊讶的是为什么我妈会对爬虫好奇?为难的是我该怎么给她解释呢?老板:小明给你个重要任务。小明:就算996我也在所不辞(第一次接到老板的直接需求)!老板:你能不能搞到竞争对手的商品价格?小明:没问题(牛逼先吹出去),小事!老板:这可不是小事,只要你能持续获取竞品价格,我们就可以标价低于他们,持续如此大家就知道我们的价格肯定是比他们..._爬虫是什么
文章浏览阅读1.8k次。1、前端通过FormData进行传递,代码如下。2、后端通过如下方式进行接收和解析。_multipartfile前端怎么传
文章浏览阅读1.7k次,点赞6次,收藏22次。7-1 PWM驱动LED呼吸灯
文章浏览阅读5.3k次,点赞3次,收藏16次。前言通常来说,开启线程能够提高程序的并发能力,而Thread 类里并没有任何方法可以获取到线程的执行结果。接下来,我们将一步步分析如何拿到线程的执行结果。通过本篇文章,你将了解到:1、原始方式 获取线程执行结果2、FutureTask 获取线程执行结果3、线程池 获取线程执行结果1、原始方式 获取线程执行结果public class ThreadRet { private int sum = 0; public static void main(String args[]
文章浏览阅读9.1k次,点赞19次,收藏58次。一、DFS的概念 {DFS的定义 DFS的搜索方式 DFS采用的数据结构 DFS的特点} 二、DFS的实战应用 {1.排列数字 2.n-皇后问题}_dfs
文章浏览阅读1k次。3大阶段 + 4 大要点,打造软件供应链整体安全。_gitlab可以防止第三方人员泄露代码吗
文章浏览阅读1.6w次,点赞24次,收藏230次。无刷电机一般是三相这里控制电机靠的是三相六臂全桥电路。注意不能同侧导通,那就短路了,整个控制过程就是通过霍尔传感器的状态,判断在那一个位置,后按电机旋转真值表来控制。使用 PWM 控制直流无刷电机的策略包括PWM-ON、ON-PWM、H_PWM-L_ON、H_ONL_PWM 和 H_PWM-L_PWM。这 5 种控制策略,均是电机处于 120° 运行方式下进行的这 5 种调制方式为:PWM-ON 型。在 120° 导通区间,各开关管前 60° 采用 PWM 调制,后 60° 则恒通。_无刷直流电机六步换相的初始角标定
文章浏览阅读351次。慧聚行业英才,聚焦产业升级的CDEC2019中国数字智能生态大会暨第十二届中国软件渠道大会上海站已落下帷幕。会上有27家企业脱颖而出,入选“CDEC2019中国最具影响力...