Day one
一、JAVA常用快捷键
ctrl + shift + t
ctrl + shift + r
ctrl + alt + v
二、java web
网络上一切电子设备都可以叫终端,其中能提供服务的叫服务器
端口与监听器:相当古代的城门和士兵
1.tomcat:
bin 为运行文件-----------------------------------startup
webapp 放文件
服务器软件 (打开端口)
2.cpolar 内网穿透
把 cpolar.exe 放到c/windows/system32中去
windows:
链接用户:
cpolar authtoken NmI5NjIzYTQtYTZjZS00MTQzLTljMzEtY2VjMDg0YzEzYmE4
启动http通道
cpolar http 80
------------------------------------------------------------------------------------------------------------
Linux:
链接用户:
./cpolar authtoken NmI5NjIzYTQtYTZjZS00MTQzLTljMzEtY2VjMDg0YzEzYmE4
启动http通道(开启80端口)
./cpolar http 80
三、面向对象
1.面向对象和面向过程
面向过程:完事亲力亲为,过程要一步步的实现出来;
面向对象:调用对象本身具备的功能来实现;
2.类和对象
java中的类
public class Person {
String name;
int age;
char sex;
public void eat(){
}
public void sleep(){
}
public void playGame(){
}
}
Java中的对象
public class Demo {
public static void main(String[] args) {
Person person = new Person();
Person p1 = new Person();
Person p2 = new Person();
A a = new A();
}
}
给属性赋值
person.name = "胡磊";
person.age = 21 ;
person.sex ='男';
调用对象的方法
System.out.println(person.name);
System.out.println(person.age);
System.out.println(person.sex);
综上代码:
运行文件(demo):
public class Demo {
public static void main(String[] args) {
Person person = new Person();
Person p1 = new Person();
Person p2 = new Person();
A a = new A();
person.name = "胡磊";
person.age = 21 ;
person.sex ='男';
System.out.println(person.name);
System.out.println(person.age);
System.out.println(person.sex);
person.eat();
person.sleep();
person.playGame();
}
}
类文件(person):
public class Person {
String name;
int age;
char sex;
public void eat(){
System.out.println("别问了,在吃饭!");
}
public void sleep(){
System.out.println("别看了,在睡觉!");
}
public void playGame(){
System.out.println("别骂了,在打游戏!");
}
}
类中的方法
实例方法:
public void eat(){
}
调用方法:
new 对象();
对象名.方法名
静态方法:
public static void say(){
}
调用方法:
类名.方法
案例1:
类文件(A):
public class A {
int v =100;
int num;
public void guess(){
if (num>v){
System.out.println("大了");
}
else if(num<v){
System.out.println("小了");
}else{
System.out.println("猜测成功");
}
}
}
案例2:
类文件(circle):
public class Circle {
public static final double PI = 3.1415926 ;
double r;
public void area(){
System.out.println(PI * r * r);
}
public void zc(){
System.out.println(2 * PI * r);
}
}
运行文件(main):
package test1;
public class demo {
public static void main(String[] args) {
Circle circle = new Circle();
circle.r = 5;
circle.area();
circle.zc();
}
}
3.构造方法:
初始化对象的属性
类文件(first):
package twoclass;
public class first {
String name;
int age;
public first(String name,int age){
this.name = name;
this.age = age;
}
}
主文件demo:
package twoclass;
public class first {
String name;
int age;
public first(String name,int age){
this.name = name;
this.age = age;
}
}
Day two
1.servlet
小程序服务,让程序不是下载而是运行。
**idea 中集成 tomcat **
步骤:
右上角编译处选择 + --> tomcat --> local --> fix --> 修改路径
继承HttpServlet类:
import com.sun.net.httpserver.HttpsServer;
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;
@WebServlet("/demo")
public class DemoServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("hello web");
}
}
步骤:
继承 HttpServlet --> 快捷键service --> 加入映射( @webservlet("/路径") )
2.servlet 写入浏览器
@WebServlet("/demo")
public class DemoServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("hello web");
resp.getWriter().write("hello!!!!!");
}
}
3.servlet处理登录表单:
在 service 类中 resp 表示回应内容
<--文件放在web文件夹下面-->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>登录</title>
</head>
<body>
<form action="/login">
<input name="name">
<input name="psw">
<input type="submit" value="登录">
</form>
</body>
</html>
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;
@WebServlet("/login")
public class LoginServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("succeed!!!");
resp.getWriter().write("you win !");
}
}
Day three
一、Mysql数据库
1.mysql 的安装
2.mysql 连接工具的安装
sqlyog
3.创建数据库和表
注意事项:字符集设置成UTF8
创建表: 跟excel中的表一样,必须要有id字段
#显示所有的数据库
show databases;
#使用某个数据库
use xxxx;
# 显示当前数据库下面的所有的表
show tables;
#帮助命令
help 命令
4.对数据库表的CRUD
增删改查
#插入数据
#insert into 表名(属性值,...) value(值 , ... )
#修改数据
#updae 表名 set 字段 = '值' where 字段 = '条件值'
#查询user表中的所有记录:
#select 列名(*) from 表名
SELECT * FROM goods WHERE NAME = '华为';
#删除记录
#delete from 表名 [where 条件]
问题:
char 与 varchar 的区别是什么?
答:
char 为定长类型
varchar 为变长长度
二、JDBC
JDBC是 Java 连接数据库的一套标准API。无论连接什么样的数据表库,都可以叫 JDBC
Java Database Connectivity ,简称 JDBC ;
1.java 导包方式:
(所有的java包都可以找到)
搜索 mysql maven ------------------------------找到需要的包
导包:两种方式
1.建立lib文件夹,把包拖入, add as library
2.右上角添加文件,+ 加入包。
2.jdbc步骤 :
1加载驱动类
就是找到包的路径,然后添加进去。
// 代码: Class.forName("com.mysql.jdbc.Driver");
2建立连接 (无返回值)
// 代码:DriverManager.getConnection("url","user","password");
- url: 表示要连接的数据库: jdbc:mysql://ip:port/数据库名称(mysql)
- user: 数据库的用户名
- password: 数据库的密码
3.获取预处理对象 (有返回值)
sql相关的操作语句。
代码:
PreparedStatement preparedStatement = connection.prepareStatement( "sql语句" 中间的值用?来代替);
4.给参数赋值
给前面的问号赋值
代码:
preparedStatement。set类型(指代前面的 ? 的位置 ,给该问号赋的值 )
5.执行语句
//增删改用 execute() 方法,该方法没有返回值
代码部分:
JDBC 插入:
Class.forName("com.mysql.jdbc.Driver");
DriverManager.getConnection("jdbc:mysql://localhost:3306/mysql","root","root");
PreparedStatement preparedStatement = connection.prepareStatement("insert into goods
(name,price,place,class,brand,date) " + "values (?,?,?,?,?,?)");
preparedStatement.setString(1,"华为荣耀");
preparedStatement.setString(2,"320");
preparedStatement.setString(3,"上海");
preparedStatement.setString(4,"手机");
preparedStatement.setString(5,"华为");
preparedStatement.setString(6,"2021.3.1");
preparedStatement.execute();
JDBC 查询:
package com.day3.test;
import java.sql.*;
public class demo {
public static void main(String[] args) throws ClassNotFoundException, SQLException {
Class.forName("com.mysql.jdbc.Driver");
Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/mysql", "root", "root");
PreparedStatement preparedStatement = connection.prepareStatement("select * from goods where id = ?");
preparedStatement.setInt(1,1);
ResultSet resultSet = preparedStatement.executeQuery();
while (resultSet.next()){
int id = resultSet.getInt("id");
String name = resultSet.getString("name");
String place = resultSet.getString("place");
double price = resultSet.getDouble("price");
String aClass = resultSet.getString("class");
Date date = resultSet.getDate("date");
System.out.println(id);
System.out.println(name);
System.out.println(place);
System.out.println(price);
System.out.println(aClass);
System.out.println(date);
}
}
}
lib放到web inf下面
项目实战:
<!DOCTYPE html>
<html lang="ch">
<head>
<meta charset="UTF-8">
<title>注册</title>
<style>
table{
margin: 0px auto;
}
</style>
</head>
<body>
<form action="/register">
<table style="margin-top:5% ">
<tr>
<td>用户名:</td>
<td><input name="username" type="text"></td>
<tr/>
<tr>
<td>密码:</td>
<td><input name="password" type="password"></td>
</tr>
<tr>
<td>
<input type="submit" value="注册">
</td>
</tr>
</table>
</form>
</body>
</html>
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.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
@WebServlet("/register")
public class RegisterServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String username = req.getParameter("username");
String password = req.getParameter("password");
try {
Class.forName("com.mysql.jdbc.Driver");
Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/demo","root","root");
PreparedStatement preparedStatement = connection.prepareStatement("insert into user (username,password) values (?,?)");
preparedStatement.setString(1,username);
preparedStatement.setString(2,password);
preparedStatement.execute();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
Day four
一、封装函数
1.object对象
传参的时候 … ------>表示可变参数,即可传0个或多个
例如:
public execute(String sql , object... obj) {
内容
}
Java 中所有的类都继承了 object 类。
封装函数实例:
调用封装的函数:
String username = req.getParameter("username");
String password = req.getParameter("password");
execute("insert into user (username,password) values (?,?)",username,password);
封装上述步骤:
public void execute(String sql,Object... obj){
try {
Class.forName("com.mysql.jdbc.Driver");
Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/demo","root","root");
PreparedStatement preparedStatement = connection.prepareStatement(sql);
for(int i = 0 ; i < obj.length ; i ++){
preparedStatement.setObject(i+1,obj[i]);
}
preparedStatement.execute();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}
综上代码:
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.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
@WebServlet("/register")
public class RegisterServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String username = req.getParameter("username");
String password = req.getParameter("password");
execute("insert into user (username,password) values (?,?)",username,password);
}
public void execute(String sql,Object... obj){
try {
Class.forName("com.mysql.jdbc.Driver");
Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/demo","root","root");
PreparedStatement preparedStatement = connection.prepareStatement(sql);
for(int i = 0 ; i < obj.length ; i ++){
preparedStatement.setObject(i+1,obj[i]);
}
preparedStatement.execute();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
2. 注册判断
封装查询函数,如果查询后账号存在,则不允许注册,否则注册成功。
封装的函数:
public ResultSet executeQuery(String sql, Object... obj){
try {
Class.forName("com.mysql.jdbc.Driver");
Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/demo","root","root");
PreparedStatement preparedStatement = connection.prepareStatement(sql);
return preparedStatement.executeQuery();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
总代码:
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.sql.*;
@WebServlet("/register")
public class RegisterServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String username = req.getParameter("username");
String password = req.getParameter("password");
ResultSet resultSet = executeQuery("select * from user where username = ?", username);
try {
if(resultSet.next()){
resp.getWriter().write("user name has existed!");
}else{
resp.getWriter().write("register success!");
}
} catch (SQLException e) {
e.printStackTrace();
}
}
public void execute(String sql,Object... obj){
try {
Class.forName("com.mysql.jdbc.Driver");
Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/demo","root","root");
PreparedStatement preparedStatement = connection.prepareStatement(sql);
for(int i = 0 ; i < obj.length ; i ++){
preparedStatement.setObject(i+1,obj[i]);
}
preparedStatement.execute();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}
public ResultSet executeQuery(String sql, Object... obj){
try {
Class.forName("com.mysql.jdbc.Driver");
Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/demo","root","root");
PreparedStatement preparedStatement = connection.prepareStatement(sql);
for(int i = 0 ; i < obj.length ; i ++){
preparedStatement.setObject(i+1,obj[i]);
}
return preparedStatement.executeQuery();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
}
二、JSP
全称 java 服务器页面。动态网页技术标准。
JSP = HTML +Servlet
Servlet 可以写 HTML 代码。
为什么要把 html 改成 jsp 呢 ?
el 表达式:
${}
1.Servlet 高级 API
jsp文件:
<%-- Created by IntelliJ IDEA. --%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>hhhhh</title>
</head>
<body>
<form action="/register">
<table style="margin-top:5% ">
<tr>
<td>用户名:</td>
<td><input name="username" type="text"></td>
<tr/>
<tr>
<td>密码:</td>
<td><input name="password" type="password">${msg}</td>--------------------------------与 html 区别
</tr>
<tr>
<td>
<input type="submit" value="注册">
</td>
</tr>
</table>
</form>
</body>
</html>
转发API:
//将数据放入request作用域(放入一个临时的包裹箱里)
req.setAttribute("msg"," 用户名已存在 ! ");
//转发
req.getRequestDispatcher("路径").forward(req,resp);
特征:
地址栏不会发生改变
只发起一次请求
在服务器就完成操作之后在返回浏览器
可以获得request的内容
说人话就是:这个刷新了之后就回到最开始的页面了
重定向API:
resp.sendRedirect("路径");
地址回发生改变
发起两次请求
从服务器先返回浏览器,在重新请求服务器完成操作
不能获得 request 的内容
这个刷新了不会返回到以前的页面
上述的路径均是从 web 目录开始算起
转发是操作的 request 对象
转发实例:
req.getRequestDispatcher("index.jsp").forward(req,resp);
重定向实例:
resp.sendRedirect("login.jsp");
问:什么时候用转发?什么时候用重定向?
答:看 request 作用域,request 只能作用域本次请求,因此如果想要在本次请求获得上次的结果则需使用转发,否则需要用重定向。
问:为什么每次打开页面都是显示的index文件
因为系统自动回去寻找index文件;可在 文件夹 web ---------> web-inf--------------->web.xml文件中进行修改。
welcome-file中就是默认文件路径,依次从上往下进行文件搜索。
例:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<welcome-file-list>
<welcome-file>login.jsp</welcome-file>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
</web-app>
项目总代码:
login.jsp:
<%-- Created by IntelliJ IDEA. --%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>登录</title>
</head>
<body>
<h1>登录</h1>
<form action="/register">
<table style="margin-top:5% ">
<tr>
<td>用户名:</td>
<td><input name="username" type="text"></td>
<tr/>
<tr>
<td>密码:</td>
<td><input name="password" type="password">${msg}</td>
</tr>
<tr>
<td>
<input type="submit" value="注册">
</td>
<td>
<a href="index.jsp">注册</a>
</td>
</tr>
</table>
</form>
</body>
</html>
index.jsp:
<%-- Created by IntelliJ IDEA. --%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>hhhhh</title>
</head>
<body>
<form action="/register">
<table style="margin-top:5% ">
<tr>
<td>用户名:</td>
<td><input name="username" type="text"></td>
<tr/>
<tr>
<td>密码:</td>
<td><input name="password" type="password">${msg}</td>
</tr>
<tr>
<td>
<input type="submit" value="注册">
</td>
<td><a href="login.jsp">去登陆</a></td>
</tr>
</table>
</form>
</body>
</html>
RegisterServlet :
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.sql.*;
@WebServlet("/register")
public class RegisterServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String username = req.getParameter("username");
String password = req.getParameter("password");
ResultSet resultSet = executeQuery("select * from user where username = ?", username);
try {
if(resultSet.next()){
req.setAttribute("msg"," 用户名已存在 ! ");
req.getRequestDispatcher("index.jsp").forward(req,resp);
}else{
execute("insert into user (username,password) values (?,?)",username,password);
resp.sendRedirect("login.jsp");
}
} catch (SQLException e) {
e.printStackTrace();
}
}
public void execute(String sql,Object... obj){
try {
Class.forName("com.mysql.jdbc.Driver");
Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/demo","root","root");
PreparedStatement preparedStatement = connection.prepareStatement(sql);
for(int i = 0 ; i < obj.length ; i ++){
preparedStatement.setObject(i+1,obj[i]);
}
preparedStatement.execute();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}
public ResultSet executeQuery(String sql, Object... obj){
try {
Class.forName("com.mysql.jdbc.Driver");
Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/demo","root","root");
PreparedStatement preparedStatement = connection.prepareStatement(sql);
for(int i = 0 ; i < obj.length ; i ++){
preparedStatement.setObject(i+1,obj[i]);
}
return preparedStatement.executeQuery();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
}
实体类:
对所有的属性都要强制生成 get , set 方法(快捷键 alt + insert)
容器,用来装数据
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)