• web开发


    在读本篇文章之前,读者应具备javaSE的基础知识,前端网页的基本知识(能制作简单样式即可)。

    所谓web开发,指的就是从网页向后端程序发送请求,后端做出响应,即前端与后端程序进行交互。

    那么前端程序如何才能够访问到后端程序?通过web服务器解决,后端程序为了能让前端能够远程访问到,需要将后端的程序部署在服务器上,这样就可以远程访问,并且向前端做出响应。

    什么是服务器?Web服务器是指驻留于因特网上某种类型计算机的程序,可以向浏览器等Web客户端提供文档,也可以放置网站文件,让全世界浏览; 它是一个容器,是一个连接用户与程序之间的中间件。 WEB服务器有很多,流行的WEB服务器有Tomcat 、 WebSphere 、 WebLogic、Jboss等。

    本篇文章所使用的服务器为Tomcat, 在小型的应用系统或者有特殊需要的系统中,该服务器支持全部JSP以及Servlet规范。Tomcat由Apache所创造,作为一个程序员,Apache是必须了解的内容之一,Apache(Apache Software Foundation)是一个软件基金会,是专门为运作一个开源软件项目的Apache的团体提供支持的非盈利性组织。

    后端开发准备工作

    1.安装jdk 配置JAVA_HOME path,注意:配置到jdk的根目录,即bin目录的上一级

    2.下载安装Tomcat服务器,进入到bin目录,双击startup.bat启动tomcat服务器,启动后不要关闭,

    Tomcat下载

    3.在浏览器中访问ip+端口,127.0.0.1:8080(8080是默认端口号),如看到如图所示,则说明服务器可以正常使用。

    4.修改服务器默认端口号,vue项目的默认端口号也是8080,与Tomcat服务器端口号冲突

    Tomcat目录层次结构

    将默认的8080端口号改为其他的端口号,如8088,8090,不冲突即可。

    上述做了那么多的准备工作,那么前端与后端的交互的到底是怎么实现的,大致流程图如下图所示

    上手操作:

    1.创建一个web后端项目

    项目创建完成后,再按照如图所示完成配置

    至此基本的准备工作已经完成,现在已经将项目部署到了Tomcat服务器中。

    在后端编写实现指定业务逻辑的代码,然后启动程序即可。

    既然要接收前端发送的请求,那就必须先了解一下前端发送请求的方式(get请求和post请求)。

    客户端连上服务器后,向服务器请求某个web资源,称之为客户端向服务器发送了一个http请求。一次请求中包含三个部分:请求行,请求头,请求体

    请求行:包含请求方式(get/post),请求的资源(地址)等,由浏览器自动发送

    请求头:包含客户端的一些环境信息(浏览器版本,客户端ip 等),由浏览器自动发送

    请求体:包含的是post请求向后端发送的数据

    两种请求方式:get和post

    get请求:超链接发送的默认是get请求,表单中method="get"发送的是get请求,主要用于从后端获取数据,也可以向后端发送少量数据,发送的数据再请求地址中包含,不在请求体重,发送的数量会有限制,也不安全。

    post请求:表单method="post"发送的是post请求,主要是从前端像后端发送数据,数据不在地址栏,在请求体中,可以发送大量数据,且相对于get请求能安全一些。

    前端基本html表单形式发送post请求示例

    1. html>
    2. <html>
    3. <head>
    4. <meta charset="utf-8">
    5. <title>title>
    6. head>
    7. <body>
    8. <form action="http://127.0.0.1:8090/demo/test" method="post">
    9. 账号:<input type="text" name="account" placeholder="请输入账号" />
    10.             <br />
    11. 密码:<input type="password" name="password" /><br />
    12. <input type="submit" value="登录" />
    13. form>
    14. body>
    15. html>

    后端处理请求类

    1.创建一个类继承javax.servlet.http包下的HttpServlet,对于servlet的生命周期放入了代码,读者阅读代码对应的注释即可

    重写的方法的说明

    除上述所示,还有一个重要的方法,就是当前servlet类的构造方法

    1. import javax.servlet.ServletException;
    2. import javax.servlet.annotation.WebServlet;
    3. import javax.servlet.http.HttpServlet;
    4. import javax.servlet.http.HttpServletRequest;
    5. import javax.servlet.http.HttpServletResponse;
    6. import java.io.IOException;
    7. import java.io.PrintWriter;
    8. /**
    9. * 功能描述:后端接受请求
    10. * 1.创建一个类,并继承HttpServlet,这样我们的类也就遵守了javaEE规范
    11. * 2.重写父类中的方法
    12. * 3.在web.xml文件中配置Servlet
    13. */
    14. // 注解的方式配置servlet服务,也可以在web.xml文件中配置
    15. @WebServlet(urlPatterns = "/test")
    16. public class Test extends HttpServlet {
    17.    /*
    18.     * 服务器启动后,进入网页调用(创建)一次后不再重复创建对象
    19.     * 什么时候调用:
    20.     * 1.第一次向"/test"发送请求
    21.     * 2.服务器启动时,web.xml中配置1
    22.     * */
    23.    public Test() {
    24.        System.out.println("我是构造器");
    25.   }
    26.    /*
    27.     * 服务器启动后,进入网页调用(创建)一次后不再重复创建对象,同构造器
    28.     * 初始化
    29.     * 是servlet规范中必须要调用的方法
    30.     * 如果没有可以初始化执行的,可以不重写,默认的构造方法
    31.     */
    32.    @Override
    33.    public void init() throws ServletException {
    34.        System.out.println("初始化,只执行一次");
    35.   }
    36.    /*
    37.        HttpServletRequest 表示请求对象, 服务器将请求到的数据封装到HttpServletRequest对象中
    38.        通过HttpServletRequest对象, 就可以获得请求中任意的数据
    39.     */
    40.    @Override
    41.    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    42.        System.out.println("处理post请求");
    43.        String account = req.getParameter("account");
    44.        String password = req.getParameter("password");
    45.        System.out.println("account = " + account);
    46.        System.out.println("password = " + password);
    47.        resp.setContentType("text/html;charset=utf-8");// 设置响应字符集
    48.        PrintWriter writer = resp.getWriter();
    49.        writer.print("Test成功");
    50.   }
    51.    
    52.    /*
    53.     * 服务器关闭时调用
    54.     * 最终要执行的代码写在此方法中
    55.     * 如果没有需要执行的的操作,可以不重写,默认调用父类中的此方法
    56.     */
    57.    @Override
    58.    public void destroy() {
    59.        System.out.println("服务器关闭时调用");
    60.   }
    61. }
     
    

    通过前端向后端发送请求测试

    前端网页中进行第一次提交

    提交后的结果

    前端网页中进行第二次提交

    提交后的结果

    后端测试输出

    由上图测试结果可知,构造器和初始化均只执行一次,第二次请求时不在调用这两个方法

    服务器关闭时

    对于其他的信息,读者可自行测试,此处只对部分进行说明

  • 相关阅读:
    Boost ASIO: Coroutines
    springboot(13):spring 过滤器和拦截器的区别
    性能测试场景设计之 阶梯性能场景(负载测试场景)
    redisson使用过程常见问题汇总
    eventfd和__thread的应用
    循环神经网络RNN
    chrome 外网很多网站提示验证错误进不去问题
    spring boot项目一次性能测试的总结
    c++ 指针
    差分+差分矩阵(更适合新手宝宝体质)
  • 原文地址:https://blog.csdn.net/2301_77713282/article/details/138034932