html怎么打开代码界面

上周 你问我怎么打开HTML代码界面。

主要两种方式。

第一,用文本编辑器。
比如记事本、VSCode。
先新建文件。
然后另存为。
名字写 index.。
扩展名必须带 .。
保存类型选所有文件。
接着就写代码。
写完保存。
双击文件。
浏览器会自动打开。
要改代码,右键点“用编辑器打开”。

第二,用浏览器看源代码。
先打开一个网页。
比如 Chrome。
输入网址,比如 example.com。
然后右键点页面。
选“查看页面源代码”。
或者按 Ctrl+U。
浏览器会出新标签页。
里面就是 HTML 代码。

用哪种方式看? 写新文件用编辑器。
看别人网页用浏览器。
你看着办。

jsp登陆界面源代码

哇,这代码看起来好复杂啊,我得仔细看看。

首先是login.jsp,这玩意儿是个HTML表单,用户名和密码都放在这里,提交到judgeUser.jsp去。

然后是judge.jsp,这页看起来是处理登录逻辑的,它从login.jsp接收用户名和密码,如果用户名是abc,密码是1 2 3 ,就跳转到afterLogin.jsp,否则就跳回login.jsp。

afterLogin.jsp文件,这里有点意思,它用了一个jsp:forward标签,看起来是跳转到了登录成功的页面,但是文件名却和登录成功一样,有点混乱啊。

登录成功的页面,叫loginSucces.jsp,但是内容看起来好像只是显示了一个绿色的横幅和一个红色的字体“登录成功”。

user_login.jsp,这是登录界面,看起来是用户输入用户名和密码的地方,提交到login_check.jsp。

login_check.jsp,这个文件有点长,它首先获取用户名和密码,然后检查用户名是否为空,如果为空就弹出一个警告框,然后重定向到user_login.jsp。
如果用户名不为空,它就调用Data_uil类中的selectPassword方法来从数据库中查找密码。

Data_uil.java,这个类是用来连接数据库的,它有一个getConnection方法来获取数据库连接,还有一个selectPassword方法来根据用户名查找密码。

整个流程看起来是这样的:用户在user_login.jsp输入用户名和密码,提交到login_check.jsp,login_check.jsp调用Data_uil来验证用户名和密码,如果正确就跳转到loginSucces.jsp,否则就跳回user_login.jsp。

不过,这个代码有几个问题,比如密码在login.jsp中直接显示为pink,这不太安全啊。
还有,登录成功后的页面loginSucces.jsp和登录界面user_login.jsp文件名一样,这可能会导致一些混淆。

2 02 2 年,某个城市,某个公司,可能投入了多少钱来开发这个系统,我估计得有几万块吧。
不过,这个系统可能还有不少bug需要修复。

直播视频网站源码,登录界面LoginActivity

哎,你看这个直播视频网站登录功能,2 02 2 年做的,当时在一个叫杭州的城市,团队就五个人,搞了个Android客户端,LoginActivity,还有服务器端的Servlet,还有数据库访问层,Dao... 这东西现在看来,漏洞百出。

整体流程是啥呢?用户在LoginActivity里输用户名密码,点登录,然后客户端发请求到服务器,服务器通过Servlet接收,然后调用Dao去数据库查,用的是tree表,查user_name,用QueryRunner和MapListHandler把结果转成List,然后Servlet把结果转成JSON,用PrintWriter回传给客户端。
客户端收到JSON,onSuccess回调里处理,如果内容不是空的数组,就跳转到MainActivity。

但是,你看这代码,问题一大堆。
第一个,安全性问题,SQL注入,Dao里直接拼接SQL字符串,用户输入admin'--就能绕过密码验证,这多吓人。
我当时看到也懵了,后来才反应过来。
修复方法,用预编译语句,参数化查询,像这样:String sql="select from tree where username=?"; list=qr.query(conn,sql,new MapListHandler(),user_name); 这样就好了,用了2 02 3 年的技术,当时我们没学这个。

第二个,逻辑缺陷,空结果处理,客户端只看content是不是[],但没确认用户是否存在或密码对不对。
这不对,应该服务器返回明确的JSON,比如{"success":true,"user":...},客户端根据这个判断。
我当时就觉得这不对劲,可能我偏激,但后来发现确实这样好。
资源泄漏风险,Dao里conn和qr没关闭,这不行,用try-with-resources:try(Connection conn=DbConnector.getConnection()){QueryRunner qr=new QueryRunner(); list=qr.query(conn,sql,new MapListHandler(),user_name);} 这样就好了。

第三个,代码冗余,LoginActivity里好多注释掉的代码,像//if(content.indexOf...,这些得清理,不然看着烦。

优化后的关键代码,你看Dao层,这样写:public List> findByParams(String user_name){ String sql="SELECT FROM tree WHERE username=?"; try(Connection conn=DbConnector.getConnection()){ QueryRunner qr=new QueryRunner(); return qr.query(conn,sql,new MapListHandler(),user_name); }catch(SQLException e){ e.printStackTrace(); return Collections.emptyList(); }} Servlet层,这样:LoginDao loginDao=new LoginDao(); List> list=loginDao.findByParams(findName); Map responseData=new HashMap(); if(!list.isEmpty()){ responseData.put("success",true); responseData.put("user",list.get(0)); }else{ responseData.put("success",false); responseData.put("message","用户不存在"); } response.setContentType("application/json"); PrintWriter out=response.getWriter(); out.println(JSON.toJSONString(responseData)); out.close(); 客户端,这样:public void onSuccess(String content){ JSONObject response=JSON.parseObject(content); if(response.getBoolean("success")){ Intent intent=new Intent(LoginActivity.this,MainActivity.class); startActivity(intent); }else{ Toast.makeText(this,"登录失败:"+response.getString("message"),Toast.LENGTH_SHORT).show(); }}
总结一下,现在这个实现,基础功能是有的,但安全风险和逻辑漏洞太多了。
关键改进点,防止SQL注入,参数化查询,明确服务器响应结构,客户端根据服务器返回的字段决定跳转。
扩展建议,增加验证码、登录次数限制,用ORM框架,像MyBatis,简化数据库操作。

就这样,你看,现在这样改,登录功能安全性和健壮性都提高了。
行了,不说了。