首页 > 其他分享 >表单登录回显

表单登录回显

时间:2023-03-31 16:23:06浏览次数:37  
标签:回显 getUri String 登录 request 表单 file new public

表单登录回显页面

login.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>登录</title>
</head>
<body>
<h3>登录</h3>
<form action="login.do" method="get">
    <p>账号:<input type="text" name="account"></p>
    <p>密码:<input type="password" name="password"></p>
    <p><input type="submit" value="登 录"></p>
</form>

</body>
</html>

 

Request类

package web;

import com.sun.org.apache.xml.internal.utils.Hashtree2Node;

import java.util.HashMap;
import java.util.Map;

/**
 * 请求类
 */
public class Request {
    private String method;
    private String uri;
    private Map<String,String> paramMap = new HashMap<>();

    public String getMethod() {
        return method;
    }

    public void setMethod(String method) {
        this.method = method;
    }

    public String getUri() {
        return uri;
    }

    public void setUri(String uri) {
        this.uri = uri;
    }

    public Map<String, String> getParamMap() {
        return paramMap;
    }

    public void setParamMap(Map<String, String> paramMap) {
        this.paramMap = paramMap;
    }
}

 

package web;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class MyHttpServer {

    private static int count = 1;
    private static char arr[] = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};

    public static void main(String[] args) throws IOException {
        byte b = 0x3f;
        byte2(b);
        ServerSocket server = new ServerSocket(8080);
        System.out.println("服务器已经启动,监听端口在8080...");
        while (true){
            Socket socket = server.accept();
            InputStream is = socket.getInputStream();
            OutputStream os = socket.getOutputStream();
            byte[] buf = new byte[1024*1024];
            new Thread(new Runnable() {
                @Override
                public void run() {
                    int len = 0;
                    try {
                        len = is.read(buf);
                        if (len == -1) return;
                        System.out.println("读到的字节数量是:"+len);
                        String hexMsg = bytes2(buf, len);
                        System.out.println(hexMsg);
                        String s = new String(buf,0,len);
                        System.out.println(s);
                        Request request = parseRequest(s);
                        // HTTP1.1协议 状态码200 正确 回车换行
                        String line1 = "HTTP/1.1 200 OK\r\n";
                        // 内容的类型是普通文本,回车换行
                        String line2 = "Content-Type:text/plain\r\n";
                        // 回车换行
                        final String line3 = "\r\n";
                        String file = null;
                        if (request.getUri().equals("/") || request.getUri().equals("/index.html")){
                            line2 = "Content-Type:text/html\r\n";
                            file = "index.html";
                        }else  if (request.getUri().equals("/favicon.ico")){
                            line2 = "Content-Type: image/x-icon\r\n";
                            file = "favicon.ico";
                        }else if (request.getUri().endsWith(".jpg") || request.getUri().endsWith(".jpeg")){
                            line2 = "Content-Type: image/jpeg\r\n";
                            file = request.getUri().substring(1);//过滤首字母斜杠(/)
                        }else if (request.getUri().endsWith(".html")){
                            line2 = "Content-Type: text/html\r\n";
                            file = request.getUri().substring(1);//过滤首字母斜杠(/)
                        }else if (request.getUri().equals("/login.do")) {
                            String account = request.getParamMap().get("account");
                            String password = request.getParamMap().get("password");
                            line2 = "Content-Type: text/html\r\n";
                            if ("admin".equals(account) && "123".equals(password)) {
                                file = "index";
                            } else {
                                file = "login";
                            }
                            os.flush();
                            return;
                        }

                        // 固定的响应三行
                        os.write(line1.getBytes());
                        os.write(line2.getBytes());
                        os.write(line3.getBytes());
                        // 如果file不为空,说明需要回文件给浏览器
                        if (file != null){
                            FileInputStream fis = new FileInputStream(file);
                            while ((len=fis.read(buf)) !=-1){
                                os.write(buf,0,len);
                            }
                        }else {
                            // 返回浏览器的文本内容
                            os.write(("" + count).getBytes());
                            count++;
                        }
                        // 主动刷新一次
                        os.flush();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }finally {
                        if (socket != null){
                            try {
                                // 关闭资源
                                socket.close();
                            }catch (IOException e){
                                e.printStackTrace();
                            }
                        }
                    }
                }
            }).start();
        }
    }
    /**
     * 解析封装为Request对象
     * @param
     * @return
     */
    private static Request parseRequest(String s){
        Request req = new Request();
        String[] split = s.split("\r\n");
        String[] spl = split[0].split(" ");
        req.setMethod(spl[0]);
        if (spl[1].contains("?")){
            String[] split1 = spl[1].split("[?]");//因为?是特殊字符所以要用中括号给括起来
            req.setUri(spl[0]);
            String[] split2 = split1[1].split("&");
            for (String s1 :split2){
                int idx = s1.indexOf("=");
                req.getParamMap().put(s1.substring(0,idx),s1.substring(idx+1));
            }
        }else {
            req.setUri(spl[1]);
        }
        return req;
    }

    private static String bytes2(byte[] buf,int len){
        StringBuffer sBuffer = new StringBuffer();
        StringBuffer sb1 = new StringBuffer();
        StringBuffer sb2 = new StringBuffer();
        int cnt = 0;
        for(int i=0;i<len;i++){
            sb1.append(byte2(buf[i]) + " ");
            if (buf[i] >= 0x20 && buf[i] <= 0x7e){
                sb2.append((char)buf[i]);
            }else {
                sb2.append(".");
            }
            cnt++;
            if (cnt % 8 == 0) sb1.append(" ");
            if (cnt % 16 == 0) {
                sBuffer.append(sb1).append(sb2).append("\r\n");
                 sb1 = new StringBuffer();
                 sb2 = new StringBuffer();
                cnt = 0;
            }
        }
        if (cnt != 0) sBuffer.append(sb1).append("  ").append(sb2).append("\r\n");
        return sBuffer.toString();
    }
    private static String byte2(byte bt){
        int lo = bt & 0b00001111;
        int hi = (bt & 0b11110000) >> 4;//位移运算符 移四位,得到四个1
        char clo = arr[lo];
        char chi = arr[hi];
        return chi+ "" + clo;
    }
}

 

标签:回显,getUri,String,登录,request,表单,file,new,public
From: https://www.cnblogs.com/yu3304/p/17276605.html

相关文章

  • 回显主页和favicon
    回显主页和favicon 找一个图片   写index.html<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>主页</title></head><body><h1>主页</h1><hr></bod......
  • 【AGC】集成AGC认证服务facebook登录报错问题
    ​【关键字】认证服务、facebook、AGC 【问题描述】开发者反馈应用集成了AGC认证服务的facebook登录功能,在登录时遇到了一些问题。提示SERVER_ERROR:[code]1675030[message]:执行查询时出错,具体如下所述:开发接入集成认证服务中的fb登陆,目前我们有自己的google包,接入了f......
  • django admin 设置用户登录时效 cookie和session
    #在settings文件中添加以下配置SESSION_SAVE_EVERY_REQUEST=TrueSESSION_COOKIE_AGE=60*30#30分钟。SESSION_EXPIRE_AT_BROWSER_CLOSE=False会话cookie可以在用户浏览器中保持有效期。True:关闭浏览器,则Cookie失效。 ......
  • elementUI 表单input输入框限制整数和小数长度
    <el-inputv-model="input1"placeholder="请输入内容"@keyup.native="input1=limitControlLine(input1,5,2)"></el-input>limitControlLine(val,zs,xs){letvalue=val;if(isNaN(val)){value=String(val).replace(/[......
  • django admin 自动选择登录用户
    Django为我们提供了一个很好的管理界面。但是当我们只使用默认值时,用户需要自己选择他们是谁。我们想为他们自动选择,他们不能假装是其他人。classNotesAdmin(admin.Mode......
  • 钥匙环服务,打造无缝的跨设备登录体验
    近些年来,随着手机技术迭代更新越来越快,用户更换手机的周期也在缩短,在这样的背景下,开发者不得不面临以下问题:同一开发者旗下常常有多个安卓应用和多形态应用(快应用和Web应用......
  • element+vue2的查询form表单封装成组件复用
    <template><el-form:inline="true"style="display:flex;flex-direction:row;flex-wrap:wrap;flex:1;"class="formClass"label-width="90px......
  • Flask框架 之Flask-WTF表单扩展
    pipinstallflask-wtf 一、WTForms支持的HTML标准字段字段对象说明StringField文本字段TextAreaField多行文本字段PasswordField密码文本字段Hid......
  • SpringBoot 项目使用 Sa-Token 完成登录认证
    一、设计思路对于一些登录之后才能访问的接口(例如:查询我的账号资料),我们通常的做法是增加一层接口校验:如果校验通过,则:正常返回数据。如果校验未通过,则:抛出异常,告知其需......
  • element 新增表单中自定义表格
    自定义表格<divclass="formtable"><divclass="row"><divclass="col1">序号</div><divclass="col2">数值</div><divclass="col3">温度</div>......