Web前端(九)-创建SpringBoot项目、web服务器(WebServer、Servlet、Controller)、SpringBoot介绍(处理静态、动态资源请求、客户端发出请求的几种方式、获取客户端传递参数的方式)

创建SpringBoot项目步骤

  1. 第一步:新建一个工程/项目:File-->New-->Project,选择Spring Initializr 默认选项即可, 如果下一步一直转圈或显示timeout超时,则使用下面备用的地址:https://start.springboot.io

  2. 第二步:设置Group(域名反写)、Artifact、选择jdk版本(JDK8)

  3. 第三步:选择Web,勾选 Spring Web(默认Tomcat服务器),然后下一步完成即可!

注意:

  • 工程创建完之后如果报错, 进入到boot1-1里面的pom.xml,刷新maven ;

  • 如果还是不行,检查maven是否配置正确

  • 如果确定maven配置没问题 , 把.m2下的repository文件夹删除,然后再次刷新maven,直到工程中不报错为止。

老师SpringBoot地址:https://gitee.com/teduliu/springboot05.git

服务器

  • 服务器就是一台高性能电脑

web服务器

  • 就是在一台高性能电脑上面安装了web服务软件(WebServer)

  • 传奇老师带大家写的WebServer工程不仅包含了WebServer相关的功能,还包含了一些业务功能

WebServer做了哪些事儿?

  • 负责建立了底层的网络连接

  • 负责根据客户端请求的静态资源地址找到对应的静态资源文件,并返回给客户端

    j举例:http://localhost:8088/myweb/login.html,webServer负责找到login.html文件返回给客户端

  • 负责根据客户端请求的动态资源路径找到对应的Servlet,并执行

什么是Servlet?

  • WebServer是一个容器, WebServer本身不具备任何业务功能, 而Servlet是用于扩展WebServer业务功能的组件, Servlet就是用来实现具体业务功能的组件。

什么是Controller?

  • SpringMVC框架引入的Controller控制器的概念, 可以将多个有相关性的Servlet进行整合, 整合到一个Controller中, 可以大大提高开发效率

    • 举例: RegServlet、LoginServlet、SelectServlet ,可以将以上三个Servlet整合到一个UserController中

SpringBoot

  • SpringBoot是目前主流的开发框架, 使用此框架可以非常便捷的将目前常用的一些其它框架引入到自己的工程中,省去了大量配置工作;

  • SpringBoot的核心思想: 约定大于配置 , 程序员不需要关心每一个框架具体的配置过程,直接使用SpringBoot所约定好的内容即可.

  • 我们常说的SSM三大框架指的是 Spring, SpringMVC, Mybatis 这三个框架, 使用SpringBoot框架是为了更便捷的将三个框架引入到自己的工程之中, 使用SpringBoot引入这三个框架省去了很多配置操作。

处理静态资源请求

  • 把静态资源文件放到工程的src/main/resources/static目录下, 启动工程,不需要添加任何代码,static里面的文件都可以被客户端访问到。

处理动态资源请求

  1. 在cn.tedu.boot11包下面创建controller包,并在里面创建HelloController

  2. 在类名上面添加 @Controller注解

  3. 在类里面创建一个hello方法,通过RequestMapping注解进行修饰,代码如下:

 package com.example.boot11.controller;
 
 import com.example.boot11.entity.Emp;
 import com.example.boot11.entity.User;
 import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.ResponseBody;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
 import java.io.PrintWriter;
 
 @Controller //告诉编译器当前类为一个控制器
 public class HelloController {
     /**
      * 当客户端向/hello地址发出请求时由此方法进行处理
      * @param info
      * @param response
      * @throws IOException
      */
     @RequestMapping("/hello")
     public void hello(String info, HttpServletResponse response) throws IOException {
         //request表示请求对象
         //response表示响应对象
 
         //获取传递过来的参数
         //String info = request.getParameter("info");//等于上面的String info
 
         System.out.println("服务器接收到请求了!");
         //测试路径:http://localhost:8080/hello
 
         //设置响应类型 告诉浏览器返回的内容是文本或html标签 字符集为utf-8
         response.setContentType("text/html;charset=utf-8");
         //获取输出对象 异常抛出
         PrintWriter pw = response.getWriter();
         //给客户端输出数据
         pw.print("恭喜你!测试成功!info="+info);
         //关闭资源
         pw.close();
    }
 }
 

运行工程时提示端口被占用

  1. 如果当前运行着一个web工程,此时再运行另外一个web时会报错, 关闭另外一个工程后再运行即可;

  2. 当工程异常关闭时也可能出现端口被占用, 此时没有可关闭的工程,有三种解决办法:

    1. 重启电脑

    2. 修改当前工程的端口号, 不再使用默认被占用的8080端口

      • 找到application.properties配置文件

      • 在里面添加 server.port=808x ,注意后面不要加“;”

    3. 可以百度查询 "8080端口被占用",找到如何查看占用8080端口的进程id,然后杀掉该进程(不推荐)

客户端发出请求的几种方式

  1. 在浏览器的地址栏中输入请求地址

  2. 在html页面中通过超链接发出请求

  1. 在html页面中通过form表单发出请求

     <!DOCTYPE html>
     <html lang="en">
     <head>
         <meta charset="UTF-8">
         <title>首页</title>
     </head>
     <body>
     <h1>Hello SpringBoot!</h1>
     
     <!--相对路径-->
     <a href="hello">相对路径</a>
     <!--绝对路径-->
     <a href="/hello">绝对路径1</a>
     <!--只有访问站外资源时才推荐使用下面这种方式-->
     <a href="http://localhost:8080/hello">绝对路径2</a>
     
     <h3>通过form表单发请求</h3>
     <form action="/hello">
         <input type="text" name="info">
         <input type="submit">
     </form>
     </body>
     </html>

获取客户端传递参数的几种方式

  1. 通过HttpServletRequest对象获取参数

     String info = request.getParameter("info");
  2. SpringMVC框架提供的方式:

    1. 直接在处理请求的方法参数列表位置声明传递过来的参数名的方式

    2. 将传递过来的参数直接封装到对象中

@ResponseBody

  • 此注解是SpringMVC中提供的注解, 作用: 可以以返回值的方式给客户响应数据,相比较PrintWriter要简单很多。

 package com.example.boot11.controller;
 
 import com.example.boot11.entity.Emp;
 import com.example.boot11.entity.User;
 import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.ResponseBody;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
 import java.io.PrintWriter;
 
 @Controller //告诉编译器当前类为一个控制器
 public class HelloController {
     /**
      * 当客户端向/hello地址发出请求时由此方法进行处理
      * @param info
      * @param response
      * @throws IOException
      */
     @RequestMapping("/hello")
     public void hello(String info, HttpServletResponse response) throws IOException {
         //request表示请求对象
         //response表示响应对象
 
         //获取传递过来的参数
         //String info = request.getParameter("info");//等于上面的String info
 
         System.out.println("服务器接收到请求了!");
         //测试路径:http://localhost:8080/hello
 
         //设置响应类型 告诉浏览器返回的内容是文本或html标签 字符集为utf-8
         response.setContentType("text/html;charset=utf-8");
         //获取输出对象 异常抛出
         PrintWriter pw = response.getWriter();
         //给客户端输出数据
         pw.print("恭喜你!测试成功!info="+info);
         //关闭资源
         pw.close();
    }
 
     /**
      * 处理登录请求
      * @param username
      * @param password
      * @param response
      * @throws IOException
      */
     @RequestMapping("/login")
     public void login(String username,String password,HttpServletResponse response) throws IOException {
         //直接声明传递过来的参数
         //设置响应类型
         response.setContentType("text/html;charset=utf-8");
         //获取输出对象
         PrintWriter pw = response.getWriter();
         //输出数据
         pw.print("接收到了username="+username+",password="+password);
         //关闭资源
         pw.close();
    }
 
     /**
      * 处理注册请求
      * @param username
      * @param password
      * @param nick
      * @param age
      */
     @RequestMapping("/reg")
     @ResponseBody //添加此注解后可以通过返回值的方式给客户端响应数据
     public String reg(User user){
         System.out.println("user = " + user);
         return "接受到请求了";
    }
 
     /**
      * 处理员工添加请求
      * @param emp
      * @return
      */
     @RequestMapping("/add")
     @ResponseBody
     public String add(Emp emp){
         return "我叫"+emp.getName()+",工作是"+emp.getJob()+",工资是"+emp.getSalary()+"元";
    }
 }

练习:

  1. 创建一个add.html页面,里面添加一个form表单,提交地址为/add,表单中有三个文本框,分别获取用户输入的员工姓名name,工资salary,工作job和一个添加按钮

  2. 在HelloController中声明一个add方法,通过RequestMapping注解处理/add请求,在entity包下面创建Emp员工实体类(包含name,salary,job属性 还有set、get方法、tostring方法),在add方法参数列表的位置直接声明Emp emp对象接收传递过来的参数 , 把接收到的参数以以下格式返回给客户端, 通过刚才接触的@ResponseBody注解给客户端返回数据。

    以:我叫xxx工作是xxx月薪xxxx 形式返回。

晚课练习: 在作业平台上提交今天的作业

  1. 创建一个新工程boot1-2 , 把11改8 , 打钩Spring Web

  2. 在static里面创建一个reg.html页面 , 创建form表单,提交地址为/reg,包含username、password、nick、age输入框,submit注册按钮

  3. 创建一个controller包(这个包一定要在cn.tedu.boot12包里面创建), 在包里面创建UserController, 记得在类名上面添加@Controller注解, 添加reg方法通过RequestMapping注解配置请求地址/reg, 把接收到的参数封装到entity包下面的User实体类中(此时创建User实体类(属性:username、password、nick、age)并提供set、get和tostring方法) , 通过返回值的方式响应数据(添加@ResponseBody注解) 给客户端返回 "我叫xxx 注册已成功!"

  4. 创建boot1-3工程 把前三步重复一遍!

  5. 创建boot1-4工程 把前三步重复一遍!

  6. 创建boot1-5工程 把前三步重复一遍!

  7. ...... 直到做到能默写为止

 

posted @ 2021-08-04 21:00  Coder_Cui  阅读(399)  评论(0编辑  收藏  举报