您当前的位置: 首页 > 学无止境 > 心得笔记 网站首页心得笔记
37_网页html的查看器
发布时间:2021-02-22 18:02:05编辑:雪饮阅读()
建立web网页
既然前面搭建了tomcat的服务,这个服务一般为JAVA EE服务,JAVA EE典型的后端网页就是jsp,那么就需要建立一个jsp网页。
下载eclipse如eclipse-jee-indigo-SR2-win32-x86_64.zip解压后并运行里面的eclipse.exe如:D:\eclipse-jee-indigo-SR2-win32-x86_64\eclipse\eclipse.exe
打开后在工作空间右侧顶部这个框框右上角有个加号的地方点击下出现下拉后选择“Other…”
![html.png](/d/file/xuewuzhijing/xindebiji/cc34a3cbf4bb67b4b07dd210d60100f8.png)
然后在弹出的菜单里面选择java ee
![html.png](/d/file/xuewuzhijing/xindebiji/26c3cf3c14ddc9c051dcb38293b22ba0.png)
然后就切换到java ee中了,并且右上角也出现了java ee按钮了,下次可以直接从右上角这个Java ee进入了
![html.png](/d/file/xuewuzhijing/xindebiji/fff20d2564a776cd3208a0e7bb1d7c13.png)
然后建立动态web项目(左侧空白区域鼠标右键)
![html.png](/d/file/xuewuzhijing/xindebiji/c25ea69c371709ae7119ef5008516166.png)
项目名称随便取一个。
第一次创建要至少new 一个runtime…,前面搭建tomcat服务时候搭建的是tomcat7,所以就选择下面这个
![html.png](/d/file/xuewuzhijing/xindebiji/d47a5b87cdd9ad64ddae7d36b034585f.png)
建立runtime…时候需要选择tomcat安装目录
![html.png](/d/file/xuewuzhijing/xindebiji/5d55cf9c2190e781e278d9d70c30cf39.png)
![html.png](/d/file/xuewuzhijing/xindebiji/460400f6773e1fc9c7c3aa3d72b27678.png)
然后直接finish
然后在新建立的项目中WebContent中新建立jsp文件
![html.png](/d/file/xuewuzhijing/xindebiji/6a832b78c286188bbbceddc65f9d7cee.png)
同样的名字随便起一个咯
![html.png](/d/file/xuewuzhijing/xindebiji/b73ed26fbee245b70efd568c6f46e23a.png)
这里按简单的来,选择一个html模板
![html.png](/d/file/xuewuzhijing/xindebiji/9dbd7d20a4e28754f35f768883a0717a.png)
然后将建立的jsp文件中的编码修改为最常见的utf-8编码,并随便在body中填写一些内容,有中文更好,后面可以测试中文的gbk与utf8的处理乱码情况
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Insert title here</title>
</head>
<body>
<p>kasumi---霞</p>
<p>ayane---凌音</p>
<p>hayabusa---隼龙</p>
</body>
</html>
然后将jsp运行到服务
![html.png](/d/file/xuewuzhijing/xindebiji/8834d42bc849663ccdf3981591ccbc2a.png)
同样是前面建立的7.0版本
![html.png](/d/file/xuewuzhijing/xindebiji/ebe6c665bb7d790538fa850b2f24541d.png)
允许下,这里应该会有两个弹窗都允许下
![html.png](/d/file/xuewuzhijing/xindebiji/c276dba5428c28db7ba600a2535fd736.png)
有时候可能不会出现这个环节,有可能会出现报错,比如前面部署tomcat,做网络图片获取器的时候,有在命令行中执行过startup.bat,导致tomcat服务已经开启,所以这里再次开启就冲突了端口,默认端口都是8080,那么只需要以同样方式在命令行中再次运行shutdown.bat命令就可以关闭之前的tomcat服务了。然后重新按照上面的步骤操作即可。
正常出来之后效果应是这样的
![html.png](/d/file/xuewuzhijing/xindebiji/1ee50ebb430d84ff719d43e5399a3e96.png)
这里的访问地址可见是http://localhost:8080/javaweb/web.jsp,则在安卓设备中访问地址结合当前获取的ip地址如192.168.5.30,则安卓设备中访问地址应该是http:// 192.168.5.30:8080/javaweb/web.jsp
如果jsp代表修改了,只需要直接刷新浏览器或客户端重新请求即可得到最新的页面内容响应。
如果是在当前这个eclipse中则是点击右边这个箭头也能获取最新的页面内容响应
并且在刷新后为了确认的确是刷新了的,则可以在空白区域鼠标右键查看源中看到具体的响应代码,当然动态部分肯定是被解析掉了的
网页html的查看器(源代码)
网页搭建好了之后,则接下来在建立安卓项目实现网页的html查看器
同前面的网络图片查看器一样,则具体实现如:
AndroidManifest.xml:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.htmlview">
<uses-permission android:name="android.permission.INTERNET"/>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.HtmlView"
android:usesCleartextTraffic="true"
>
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.htmlview">
<uses-permission android:name="android.permission.INTERNET"/>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.HtmlView"
android:usesCleartextTraffic="true"
>
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
activity_main.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="请输入网页的地址" />
<EditText
android:id="@+id/et_address"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:lines="2"
android:text="http://192.168.5.30:8080/javaweb/web.jsp" />
<Button
android:id="@+id/bt_view"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="查看" />
<!--滚动视图 内容过多 溢出时候可以在该视图内滚动显示出哪些多余的不在视野内的内容-->
<ScrollView
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<TextView
android:id="@+id/tv_content"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />
</ScrollView>
</LinearLayout>
MainActivity.java:
package com.example.htmlview;
import androidx.appcompat.app.AppCompatActivity;
import android.annotation.SuppressLint;
import android.annotation.TargetApi;
import android.os.Build;
import android.os.Bundle;
import android.os.StrictMode;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private EditText mEtAddress;
private Button mBtView;
private TextView mTvView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mBtView = (Button) this.findViewById(R.id.bt_view);
mEtAddress = (EditText) this.findViewById(R.id.et_address);
mTvView = (TextView) this.findViewById(R.id.tv_content);
mBtView.setOnClickListener(this);
}
@TargetApi(Build.VERSION_CODES.GINGERBREAD)
@SuppressLint("NewApi")
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.bt_view:
//按钮对应的点击事件
String address = mEtAddress.getText().toString().trim();
if("".equals(address)){
Toast.makeText(this, "地址不能为空", Toast.LENGTH_SHORT).show();
return;
}
try {
StrictMode.ThreadPolicy policy=new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
String html = NetUtil.getHtml(address);
mTvView.setText(html);
} catch (Exception e) {
e.printStackTrace();
Log.i("Toast.LENGTH_SHORT", String.valueOf(Toast.LENGTH_SHORT));
Log.i("Toast.LENGTH_SHORT", String.valueOf(Toast.LENGTH_LONG));
//duration使用Toast.LENGTH_SHORT等同于0,其静态值就是0
Toast.makeText(this, "获取数据失败", 0).show();
}
break;
}
}
}
NetUtil.java与MainActivity.java同一个目录:
package com.example.htmlview;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
public class NetUtil {
public static String getHtml(String address) throws Exception {
URL url = new URL(address);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setReadTimeout(5000);
conn.setRequestMethod("GET");
int code = conn.getResponseCode();
if (code == 200) {
InputStream is = conn.getInputStream();
byte[] result = StreamTool.getBytes(is);
//new String时候单参构造是没有指定字符集的,则默认使用的是utf-8
String temp = new String(result);
//为防止获取出来的内容在TextView中乱码,特别是中文字符最容易乱码
// 这里简单判断源代码字符串中是否包含gbk字符,若包含了,则以gbk相关字符集进行编码,否则返回默认的(utf-8编码)
//所以这里只是简单的处理了gbk与utf-8两种编码的兼容,且仅仅只是用源代码中是否包含指定编码关键字的方式来判断
//实际严谨的判断应该是取源代码中类似“<meta charset="utf-8">”这样的标签来做判断处理,据说360智能浏览器就是这样处理的,这就是所谓智能的原理...
//所谓的智能就仅仅是自动匹配编码吗?我看不一定吧
if (temp.contains("gbk")) {
return new String(result, "gb2312");
} else {
return temp;
}
} else {
throw new IllegalStateException("访问网络失败("+code+")");
}
}
}
StreamTool.java与MainActivity.java同一个目录:
package com.example.htmlview;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
public class StreamTool {
public static byte[] getBytes(InputStream is) throws Exception{
ByteArrayOutputStream bos = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len = 0;
while((len = is.read(buffer))!=-1){
bos.write(buffer, 0, len);
}
is.close();
bos.flush();
byte[] result = bos.toByteArray();
System.out.println(new String(result));
return result;
}
}
运行并测试utf-8和gbk编码都不乱码
关键字词:网页,html,android