SpringBoot前期基础
什么是服务器?
- 服务器就是一台高性能的电脑
什么是Web服务器?
- 就是在高性能电脑上安装了Web服务软件,比如安装了Tomcat
什么是Web服务软件?
-
Web服务软件是不具备任何业务功能的, 可以理解为容器,用来装实现具体业务功能的组件(组件指Servlet,而Controller的作用是将多个Servlet整合到了一个类文件中)
-
Web服务软件做了哪些事儿?
-
- 负责搭建底层的网络连接
- 负责根据客户端请求的静态资源路径找到静态资源文件并响应给客户端
- 负责根据客户端请求的动态资源路径找到对应Controller里面的方法并且执行
SpringBoot框架
- 如果不使用SpringBoot工程, 创建Maven工程,工程里面如果需要添加其它框架,需要在pom.xml文件中添加大量的依赖信息然后个别的框架还需要添加xml配置文件,在配置文件中还需要添加大量的配置信息, 这些操作都需要程序员独立完成, 使用SpringBoot创建工程时如果需要引入其它框架只需要在创建时打钩的方式引入各种框架即可, 大大提高了构建工程的效率
- 如何创建SpringBoot工程:简单一点的可以点击创建新的项目,选择Spring Initialize,需要先查看Sever URL,可以选择https://start.springboot.io,之后需要修改点有三个,Group:组,选择你的公司或默认的服务器;Artifact:相当于你的工程名字,写完后项目的名字一般会一起修改;Java:需要根据自己的java版本选择,我的是java1.8,选择8,然后点击下一步,之后可以根据你要开发的项目来进行勾选,比如Webde 的项目可以选择Spring Web,之后点击完成Finish。创建完工程时需要看一下Build的Sync是否前面有绿色的对钩,没有的话可以尝试刷新一下Maven后重新查看,或者尝试重新创建工程。
客户端发出请求的几种方式:
-
地址栏中输入请求地址后回车发送请求 同步
-
通过超链接发送请求 同步
-
通过from表单发送请求 同步
//需要在项目的java包下新建controller包,并建立相应的连接 <form action="/hello"> <input type="text" name="info"> <input type="submit"> </form>
-
通过前端框架就发送请求 异步
服务端接受请求的几种方式:
-
通过HttpServletRequest对象获取参数,该技术之后基本不使用
@RequestMapping("/hello") @ResponseBody //次注解的作用是通过返回值方式给客户端相应数据 public String hello(HttpServletRequest request){ String info = request.getParameter("info"); return "Yes:"+info; }
-
通过在处理请求的方法参数列表处声明的方式接收参数
@RequestMapping("/hello") @ResponseBody //次注解的作用是通过返回值方式给客户端相应数据 public String hello(String info){ return "Yes:"+info; }
-
通过在处理请求的方法参数列表处声明自定义对象的方式接收参数
//准备一个对象类(user),有姓名、密码和昵称,准备tostring和get、set方法。 @RestController public class UserController { @RequestMapping("/reg") public String reg(User user){ System.out.println("user = " + user); return "注册成功"; } }
建立数据库连接:
可以看一下之前的DBCP的帖子,将里面的DBUtils类添加后在pom.xml文件上引入数据库的依赖。
<!-- 连接MySQL数据库的依赖 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.15</version>
</dependency>
<!-- 数据库连接池 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.21</version>
</dependency>
尝试将数据存入数据库:
-
在项目中添加index首页和注册页面并建立连接:
<!--首页代码--> <body> <h1>工程首页</h1> <a href="/hello">请求连接</a> <a href="reg.html">注册页面</a> </body> <!--注册页代码--> <body> <h1>注册页面</h1> <form action="/reg"> <input type="text" name="username" placeholder="姓名"> <input type="text" name="password" placeholder="密码"> <input type="text" name="nick" placeholder="昵称"> <input type="submit" value="注册"> </form> </body>
-
配置好数据库后在controller中实现相关方法:
@RestController public class UserController { @RequestMapping("/reg") public String reg(User user){ System.out.println("user = " + user); try (Connection conn = DBUtils.getConn()){ PreparedStatement ps = conn.prepareStatement("insert into user values(null,?,?,?)"); ps.setString(1, user.getUsername()); ps.setString(2, user.getPassword()); ps.setString(3, user.getNick()); ps.executeUpdate(); } catch (SQLException throwables) { throwables.printStackTrace(); } return "注册成功"; } }
-
在注册页面输入相关信息后点击看是否成功,成功后在数据库查询有数据即为成功。
尝试使用前期的Springboot建立一个商品管理系统(JDBC版本)
-
首先准备相关的页面:添加,商品列表,修改和删除暂时使用动态请求,在数据库添加商品表
<!--工程首页代码--> <body> <h1>工程首页</h1> <a href="/hello">请求连接</a> <a href="/reg.html">注册页面</a> <a href="/login.html">登录页面</a> <h1>商品管理系统</h1> <a href="/insert.html">添加商品</a> <a href="/select">商品列表</a> <a href="/update.html">修改商品</a> </body> <!--添加页面代码--> <body> <h1>添加商品页面</h1> <form action="/insert"> <input type="text" name="title" placeholder="商品标题"> <input type="text" name="num" placeholder="商品库存"> <input type="text" name="price" placeholder="价格"> <input type="submit" value="添加商品"> </form> </body> <!--修改页面代码--> <body> <form action="/update"> <input type="text" name="id" placeholder="修改id"> <input type="text" name="title" placeholder="修改标题"> <input type="text" name="num" placeholder="修改库存"> <input type="text" name="price" placeholder="修改价格"> <input type="submit" value="点击修改"> </form> </body> <!--数据库建立商品表代码 create table product(id int primary key auto_increment,title varchar(50),num int,price double(10,2)) 注:double(总长度,小数长度)例如上面的就是总长度为10,小数长度为2,写出后为3000.00元 -->
-
同样准备相关的controller页面
@RestController public class ProductController { @RequestMapping("/insert") public String insert(Product product){//添加功能 System.out.println("product = " + product); try (Connection conn = DBUtils.getConn()){ PreparedStatement ps = conn.prepareStatement("insert into product values(null,?,?,?)"); ps.setString(1,product.getTitle()); ps.setInt(2,product.getNum()); ps.setDouble(3,product.getPrice()); ps.executeUpdate(); } catch (SQLException throwables) { throwables.printStackTrace(); } return "添加完成!<a href='/'>返回首页</a>"; } @RequestMapping("/select") public String select(){//查询列表功能 ArrayList<Product> list = new ArrayList<>(); try (Connection conn = DBUtils.getConn()){ PreparedStatement ps = conn.prepareStatement("select * from product"); ResultSet rs = ps.executeQuery(); while(rs.next()){//遍历获得的结果对象 Product p = new Product();//将对象实例化,用来封装查到的数据 p.setId(rs.getInt(1)); p.setTitle(rs.getString(2)); p.setNum(rs.getInt(3)); p.setPrice(rs.getDouble(4)); list.add(p);//将对象装进集合中 } } catch (SQLException throwables) { throwables.printStackTrace(); } //将集合中的数据封装在表格中进行输出(仅为实验,后续不会这样写) String html = "<table border='1'>"; html+="<tr><th>id</th><th>标题</th><th>库存</th><th>价格</th><th>操作</th></tr>"; //遍历商品集合 for (Product p: list) { html+="<tr>"; html+="<td>"+p.getId()+"</td>"; html+="<td>"+p.getTitle()+"</td>"; html+="<td>"+p.getNum()+"</td>"; html+="<td>"+p.getPrice()+"</td>"; html+="<td><a href='/delete?id="+p.getId()+"'>删除</a></td>"; html+="</tr>"; } html+="</table>"; return html; } @RequestMapping("/delete") public String delete(int id){//删除功能 System.out.println("id = " + id); try (Connection conn = DBUtils.getConn()){ PreparedStatement ps = conn.prepareStatement("delete from product where id=?"); ps.setInt(1,id); ps.executeUpdate(); } catch (SQLException throwables) { throwables.printStackTrace(); } return "删除成功!<a href='/select'>返回列表页面</a>"; } @RequestMapping("/update") public String update(Product product){//修改功能,现在需要输入全部的内容才能修改,之后会有更好版本 System.out.println("product = " + product); try(Connection conn = DBUtils.getConn()) { PreparedStatement ps = conn.prepareStatement("update product set title=?,num=?,price=? where id=?"); ps.setString(1, product.getTitle()); ps.setInt(2,product.getNum()); ps.setDouble(3,product.getPrice()); ps.setInt(4,product.getId()); ps.executeUpdate(); } catch (SQLException throwables) { throwables.printStackTrace(); } return "修改完成!<a href='/'>返回首页</a>"; } }