历史上的今天
返回首页

历史上的今天

今天是:2025年03月29日(星期六)

2020年03月29日 | JSP向Servlet传递数据以及与STM32、ESP8266通信过程

2020-03-29 来源:eefocus

工作流程:

login.jsp->ValidateTest.java->ControlTest.jsp和SocketTest.java->Control.java->8266->STM32


以上文件中后缀名为.jsp的就是JSP文件,Control.java和ValidateTest.java就是所谓的Servlet文件,SocketTest.java就是普通的Java Class文件。即只要是和JSP文件有数据传递关系的都得创建Servlet文件,而不是创建Class文件,当然了,你创建Class文件也行,只不过里面还是都得有Servlet文件所必须的doPost之类的方法。


Servlet是用来和JSP进行通信的文件,Servelt与JSP关系


工作流程文字描述:

第一步:进入登录页面login.jsp,输入账号和密码

第二步:进入账号密码验证程序ValidateTest.java,验证成功后进入第三步,验证失败返回第一步

第三步:先进入控制系统页面ControlTest.jsp,然后再进入创建服务器并等待客户端的连接请求SocketTest.java,若有客户端连接成功,则进入第四步,若一直没有客户端连接请求,则一直在这里等待客户端的连接,直至人为终止程序

第四步:点击控制按钮,向客户端发送数据

第五步:客户端即工作在透传模式下的ESP8266把收到的数据传递给STM32

第六步:STM32解析并处理数据


首先运行第一个登录页面:

login.jsp


<%@ page language="java" contentType="text/html; charset=utf-8"

    pageEncoding="utf-8"%>

登录

   

Login

   

   

   

   

   

   

   

   

   

   

   

   

   

   



运行结果:

在这里插入图片描述

输入账号密码之后,数据会通过

这句话来进行相应的跳转,action后面的参数就是指的是要把用户输入的账号和密码传输到哪一个程序中执行,method后面的参数是指采用哪种传输方式,传输方式有post和get。

ValidateTest.java


package servlet;


import java.io.IOException;

import java.io.PrintWriter;


import javax.servlet.RequestDispatcher;

import javax.servlet.ServletException;

import javax.servlet.annotation.WebServlet;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;


/**

 * Servlet implementation class LoginServlet

 */

//@WebServlet是采用注入的方式表示这是一个Servlet类,采用此方法比较方便,因为此方法不用再去配置web.xml文件

@WebServlet("/ValidateTest")

public class ValidateTest extends HttpServlet {

private static final long serialVersionUID = 1L;

       

    /**

     * @see HttpServlet#HttpServlet()

     */

    public ValidateTest() {

        super();

        // TODO Auto-generated constructor stub

    }


/**

* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)

*/

    //doGet响应get请求,doPost响应post请求,为了保证不管在login.jsp中选择post方法还是get方法,在这里都能有所回应,所以

    //这里只在doPost中写相应的代码,而在doGet中直接调用doPost函数即可

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

doPost(request, response);

// response.getWriter().append(info);

}


private void alert(String string) {

// TODO Auto-generated method stub

}


/**

* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)

*/

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

// TODO Auto-generated method stub

//从login页面中获取用户名和密码

String name = request.getParameter("Username");

String password = request.getParameter("password");

response.setCharacterEncoding("utf-8");

response.setContentType("text/html");

if(name == null || password == null || name.equals("") || password.equals("")) {

response.getWriter().append("账号/密码不能为空");

return;

}else {

if(name.equals("asddssdf") && password.equals("sdjfhjhffjshbfgk")) {

RequestDispatcher dispatcher = getServletContext().getRequestDispatcher("/ControlTest.jsp");//这句话的意思是当验证账号密码都正确后,要继续跳转到哪一个页面,这里是跳转到ControlTest页面

dispatcher.forward(request, response);

SocketTest.getSocket();//这句话是用来创建一个服务器等待客户端(连接在STM32上的8266)的连接,连接成功后生成一个Socket用来双方的通信。注意创建Socket以及等待客户端连接一定要在页面跳转到控制页面之后进行,因为等待客户端连接是一个阻塞函数,程序会一直死在那里等待客户端的连接

}else {

//response.sendRedirect("login.jsp");//直接重定向到登录页面,无任何提示信息

//有登录失败的提示信息,但是跳到了一个新页面,点击确定之后重新回到登录页面回到指定页面

PrintWriter out = response.getWriter();

out.print("");

}

}

}

}


ControlTest.jsp


<%@ page language="java" contentType="text/html; charset=utf-8"

    pageEncoding="utf-8"%>

控制系统

这里是控制系统