Java Web项目(一)

发布于:2025-04-21 ⋅ 阅读:(17) ⋅ 点赞:(0)

框架

java web项目总工分为两部分:客户端(前端)和服务端(后端)

客户端发起请求,服务端接受请求并进行处理

发起请求的方式:from表单、jQuery + ajax

from表单 造成全局的变化,在发起请求时所有的数据都会被修改

jQuery + ajax 可以做到局部更新

tomcat是一个服务器,时刻等待请求到来

关系如图所示

项目的工作流程类似于去饭店吃饭,

url 是请求路径,相当于找指定的饭店,找到指定的服务员

type 是请求参数(有get  post 等),相当于指定服务方式

data 是携带的参数,相当于特定要求

success 是成功的回调函数,相当于上菜

服务端

接收参数,相当于接受菜单

逻辑处理,提供对应的服务,相当于后厨的加工

(如果需要)操作数据库,数据库就相当于仓库

返回数据,即上菜

注:所有的信息不是存在后端,而是存在数据库

get和post的区别

1.传参方式不同

   post 传参用data域

   get  则在url中传参 

   格式    url:" 对应Servlet类文件名?要传的参数=参数值 "

   当参数不止一个时,用&  等连接符

2.发起范围不同

   get :只要能写地址的地方都可以发起get请求(包括url 、浏览器的地址栏、前端中的<a href="  "></a>标签.....)

   post: 请求发起需要ajax+jquery   或者form表单(现不用)

3.常用作用范围

get常用于查找

post 常用于查找以外的功能,如添加、修改、删除等

servlet

servlet 相当于小服务员,同时处理服务端的多种操作,对少量数据进行处理,数据量太大时效果不好

有软件可将servlet的角色拆分开,分成controller 、 service 、 dao

controller专门接受客户端的信息,和客户端进行交互

service 进行各种各样的逻辑处理

dao 专门操作数据库,做处理后将内容返回service

service再将信息返回controller

controller再返回到客户端

Navicat 

Mysql      数据库

Navicat   数据库的可视化工具

表中一般有一个"id" 作为主键,一般默认勾选使用"不是null键",即自动递增

数据库中的表的关系

一对一

该情况下经常把两个表合并成一张表,即将

妻子表
id name age
1 qqq 26
2 www 36
3 eee 27
丈夫表
id name age
1 aaa 34
2 sss 27
3 ddd 28

变为

id Wname Wage Mname Mage
1 qqq 26 sss 27
2 eee 27 aaa 34
3 www 36 ddd 28

但方法不唯一,包括存外键、新建表格等

外键就是当前表格中的一个字段,但其取值有严格要求,必须来自于对应的另一张表中的主键

一对多

合成一张表时数据冗余

常用方法:把多的表设置外键,(少的表设置外键也会数据冗余)

有时也额外创造一张表存储关系,但是效率不如上述方法高

如:学生表和班级表

班级表
id c_name 总分
1 一班 30
2 二班 36
3 三班 27
学生表
id name age c_id
1 aaa 13 1
2 sss 14 3
3 ddd 15 2
4 zzz 12 3
5 xxx 14 1
6 ccc 15 2

多对多

无论是两张表合并,还是在一张表上单独加外键,都会造成数据只能使用新建表存外键的方式

例如:学生表和课程表

课程表
id c_name 总分
1 java 30
2 数据结构 36
3 python 27
学生表
id name age
1 aaa 13
2 sss 14
3 ddd 15
4 zzz 12
5 xxx 14
6 ccc 15

选课表

s_id c_id
1 3
1 2
3 3
4 1
... ...

操作数据库

操作数据库需要对应的驱动,

比如: Mysql驱动Mysql数据库

            SqlServerl驱动SqlServerl数据库

因此为了简化操作,对驱动进行了规范:JDBC

操作数据库步骤:

1.加载驱动

Class.forName("com,mysql.jdbc.Driver")   ----5.版本

Class.forName("com,mysql.cj.jdbc.Driver")   ----8.版本

可能会报错,因为没有驱动

解决方法:

<1>异常抛出

   但是在调方法时可能再次产生异常,所以可以调方法时继续抛出异常,也可以使用方法二

<2>try....catch....捕获异常

   使用该方法时,正常情况下执行try中的内容,一旦有异常时,异常会被捕获并执行catch中的内容

catch(捕获指定异常内容)

eg:catch(ClassNotFoundException e)  指定捕获没有找到class的异常

        catch(SQLException e)  指定捕获sql的异常

        catch(Exception e)  捕获所有的异常

2.添加用户信息和url

            String url="jdbc:mysql://localhost:端口号/需要连接的数据库";
            String username ="root";    --->   账号一般情况下默认为root
            String password ="10027018";   ----> 密码自设

3.驱动管理类调用方法进行连接,得到连接对象(一般继续抛出异常)

驱动管理类     ----->   DriverManager

调方法            ----->   DriverManager.getConnection(url,username,password);

连接类            ----->   Connection

4.创建执行sql的对象

   其对应的类为Statement

   用createStatement()方法

5.执行sql语句

    executeQuery(sql)         ---->执行查找的方法

    executeUpdate(sql)       ---->执行修改的方法,会返回受影响的行数

    

    ResultSet    ---->结果集   用于处理结果

6.对结果进行处理

    获取指定某项下的数据,需要调方法getInt("数据名")   Int根据数据类型变化

7.关闭/释放资源

   资源名.close()


网站公告

今日签到

点亮在社区的每一天
去签到