Android中java与js交互是通过webView来交互的。
成都创新互联公司专注为客户提供全方位的互联网综合服务,包含不限于成都网站设计、网站建设、杨浦网络推广、微信平台小程序开发、杨浦网络营销、杨浦企业策划、杨浦品牌公关、搜索引擎seo、人物专访、企业宣传片、企业代运营等,从售前售中售后,我们都将竭诚为您服务,您的肯定,是我们最大的嘉奖;成都创新互联公司为所有大学生创业者提供杨浦建站搭建服务,24小时服务热线:18980820575,官方网址:www.cdcxhl.com
WebView(网络视图)能加载显示网页,可以将其视为一个浏览器。它使用了WebKit渲染引擎加载显示网页,实现WebView有以下两种不同的方法:
第一种方法的步骤:
1.在要Activity中实例化WebView组件:WebView webView = new WebView(this);
2.调用WebView的loadUrl()方法,设置WevView要显示的网页:
互联网用:webView.loadUrl("");
本地文件用:webView.loadUrl(""); 本地文件存放在:assets 文件中
3.调用Activity的setContentView( )方法来显示网页视图
4.用WebView点链接看了很多页以后为了让WebView支持回退功能,需要覆盖覆盖Activity类的onKeyDown()方法,如果不做任何处理,点击系统回退剪键,整个浏览器会调用finish()而结束自身,而不是回退到上一页面
5.需要在AndroidManifest.xml文件中添加权限,否则会出现Web page not available错误。
uses-permission android:name="android.permission.INTERNET" /
第二种方法的步骤:
1、在布局文件中声明WebView
2、在Activity中实例化WebView
3、调用WebView的loadUrl( )方法,设置WevView要显示的网页
4、为了让WebView能够响应超链接功能,调用setWebViewClient( )方法,设置 WebView视图
5、用WebView点链接看了很多页以后为了让WebView支持回退功能,需要覆盖覆盖Activity类的onKeyDown()方法,如果不做任何处理,点击系统回退剪键,整个浏览器会调用finish()而结束自身,而不是回退到上一页面
6、需要在AndroidManifest.xml文件中添加权限,否则出现Web page not available错误。
uses-permission android:name="android.permission.INTERNET"/
java是属于后台代码,作用是获取前端的请求并处理逻辑和数据库处理。一般来说与前端网页数据交互有两用方式,一,ajax请求数据接口,然后前端根据返回值处理数据。二,使用request方式将返回值直接带给跳转页面。建议使用第一种。
spring中利用mvc框架就可以实现jsp和java交互了。
以下用spring mvc输出hello world为例来说明:
一、项目依赖的jar包:
1.Spring框架依赖的jar包:
日志:commons-logging-1.1.3.jar;
JSTL支持:jakarta-taglibs-standard-1.1.2中的jstl.jar和standard.jar;
2.Spring的jar包:
spring-framework-3.2.5.RELEASE/libs中的jar包(这里为了方便我直接把全部都复制过去了);
把以上的jar包全部复制到项目的WebContent/WEB-INF/lib目录中。
二、在/WEB-INF中添加web.xml文件,文件内容如下:
?xml version="1.0" encoding="UTF-8"?
web-app xmlns:xsi="" xmlns="" xmlns:web="" xsi:schemaLocation=" " id="WebApp_ID" version="3.0"
display-nameSpringMVCLesson/display-name
servlet
servlet-nameSpringMVCLesson/servlet-name
servlet-classorg.springframework.web.servlet.DispatcherServlet/servlet-class
init-param
param-namecontextConfigLocation/param-name
param-valueclasspath:springservlet-config.xml/param-value
/init-param
load-on-startup1/load-on-startup!-- load-on-startup必须放在最后 --
/servlet
!-- Spring MVC配置文件结束 --
servlet-mapping
servlet-nameSpringMVCLesson/servlet-name
url-pattern//url-pattern
/servlet-mapping
/web-app
三、springservlet-config.xml文件配置:
在项目中新建一个resources的Source Folder文件夹,并添加springservlet-config.xml文件。
?xml version="1.0" encoding="UTF-8"?
beans xmlns=""
xmlns:xsi=""
xmlns:p=""
xmlns:context=""
xmlns:util=""
xmlns:mvc=""
xsi:schemaLocation="
"
!-- 默认的注解映射的支持 --
mvc:annotation-driven/
!-- 如果当前请求为“/”时,则转发到“/helloworld/index” --
mvc:view-controller path="/" view-name="forward:/helloworld/index"/
!-- 静态资源映射 --
mvc:resources mapping="/js/**" location="/WEB-INF/js/" /
mvc:resources mapping="/css/**" location="/WEB-INF/css/" /
mvc:resources mapping="/fonts/**" location="/WEB-INF/fonts/" /
mvc:resources mapping="/plugins/**" location="/WEB-INF/plugins/" /
mvc:resources mapping="images/**" location="/WEB-INF/images/" /
!-- 当上面要访问的静态资源不包括在上面的配置中时,则根据此配置来访问 --
mvc:default-servlet-handler/
!-- 开启controller注解支持 --
!-- use-default-filters="false" 只扫描指定的注解 --
context:component-scan base-package="com.demo.web.controllers" use-default-filters="false"
context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/
/context:component-scan
!-- 视图解析器 --
bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"
property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/
property name="contentType" value="text/html"/
property name="prefix" value="/WEB-INF/views/"/
property name="suffix" value=".jsp"/
/bean
/beans
mvc:annotation-driven/ 开启注解映射支持,它是为了简化配置的缩写形式,它相当于以下2个配置:
bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/
bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/
由于我们在web.xml文件里面配置的是拦截所有的请求到该servlet,所以我们在这里要对静态资源文件映射作一下配置,否则请求这些资源文件会返回404:
!-- 静态资源映射 --
mvc:resources mapping="/js/**" location="/WEB-INF/js/" /
mvc:resources mapping="/css/**" location="/WEB-INF/css/" /
mvc:resources mapping="/fonts/**" location="/WEB-INF/fonts/" /
mvc:resources mapping="/plugins/**" location="/WEB-INF/plugins/" /
mvc:resources mapping="images/**" location="/WEB-INF/images/" /
!-- 当上面要访问的静态资源不包括在上面的配置中时,则根据此配置来访问 --
mvc:default-servlet-handler/
开启Controller注解支持,并配置只扫描指定包下面的Controller:
context:component-scan base-package="com.demo.web.controllers" use-default-filters="false"
context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/
/context:component-scan
配置视图解析器,并指定视图所在的文件夹:
bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"
property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/
property name="contentType" value="text/html"/
property name="prefix" value="/WEB-INF/views/"/
property name="suffix" value=".jsp"/
/bean
添加HelloWorldController,在项目中新建一个web的Source Folder文件夹,并在文件夹下面添加com.demo.web.controllers包,在包中添加一个HelloWorldController类,类中内容如下:
package com.demo.web.controllers;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;
@Controller
@RequestMapping(value = "/helloworld")
public class HelloWorldController {
@RequestMapping(value="/index", method = {RequestMethod.GET})
public ModelAndView index(){
ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("message", "Hello World!");
modelAndView.setViewName("index");
return modelAndView;
}
}
其中@Controller 注解把该class指定为controller,controller 上的@RequestMapping 注解的 value值指定该controller所映射的请求。
方法上的@RequestMapping 注解指定该方法为一个action,value 值指定该action所映射的请求,method 中的RequestMethod.GET指定该action只接受get请求。
ModelAndView 中的setViewName指定了该action所对应的视图名称,解析视图时会在springservlet-config.xml文件指定的视图文件夹中寻找对应的视图。
添加视图,在项目/WEB-INF文件夹下新建一个views文件夹,并在views中添加index.jsp视图,视图内容如下:
%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%
!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" ""
html
head
meta http-equiv="Content-Type" content="text/html; charset=UTF-8"
titleInsert title here/title
/head
body
${message}
/body
/html
运行项目输出结果:
HI我..
通过构造方法就可以把那个引用传过去了。。
如果你是在一个窗口干什么后打开另一个窗口的。。就是说你在一个窗口中打开另一个窗口的。。
TextFrame 类 这里面有个文本框和一个按钮。。点击按钮就打开另一个窗口。。
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class TextFrame extends JFrame {
public JTextField jt;
/**
* @param args
*/
public TextFrame() {
JLabel jl = new JLabel("文本框:");
this.jt = new JTextField(15);
JButton jb = new JButton("点击");
jb.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
new ButtonFrame(TextFrame.this);
}
});
JPanel jp = new JPanel();
jp.add(jl);
jp.add(jt);
jp.add(jb);
this.add(jp);
this.setBounds(100, 100, 100, 100);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
public static void main(String[] args) {
new TextFrame();
}
}
ButtonFrame 类。。这里面有个按钮。点击就可以设置这边这个文本框的内容了。。
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
public class ButtonFrame extends JFrame {
private TextFrame jf;
public ButtonFrame(TextFrame frame) {
this.jf = frame;
JButton jb = new JButton("点击设置");
jb.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
String str = JOptionPane.showInputDialog("请输入", null);
ButtonFrame.this.jf.jt.setText(str);
}
});
JPanel jp = new JPanel();
jp.add(jb);
this.add(jp);
this.setBounds(250, 250, 100, 100);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
}
如果两个类都是单独运行的。。没有任何关系的话(即不是在一个窗口中点击上面东西或是干什么就打开另一个窗口)。。都是独立运行的。。
那就需要用到socket了哦。。
下面两个类你都单独运行就是了哈。。
服务器端:SocketManager类。这里面有个文本框。。
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class SocketManager extends JFrame {
/**
* @param args
* @throws IOException
*/
private JTextField jt;
public static void main(String[] args) {
SocketManager manager = new SocketManager();
manager.doListen();
}
public SocketManager() {
JLabel jl = new JLabel("文本框:");
this.jt = new JTextField(15);
JPanel jp = new JPanel();
jp.add(jl);
jp.add(jt);
this.add(jp);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
public void doListen() {
ServerSocket server;
try {
server = new ServerSocket(9991);
while (true) {
Socket client = server.accept();
new Thread(new SSocket(client)).start();
}
} catch (IOException e) {
e.printStackTrace();
}
}
// 服务器进程
class SSocket implements Runnable {
Socket client;
public SSocket(Socket client) {
this.client = client;
}
public void run() {
DataInputStream input;
while (true) {
try {
input = new DataInputStream(client.getInputStream());
try {
String listMsg = input.readUTF();
SocketManager.this.jt.setText(listMsg);
} catch(Exception e) {
break;
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
客户端:Client类 有个按钮。。点击弹出输入框输入内容。。服务器的文本框就显示你输入的内容
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
public class Client extends JFrame {
private static Socket socket;
OutputStream netOut;
DataOutputStream doc;
public Client() {
try {
socket = new Socket("127.0.0.1", 9991);
this.netOut = socket.getOutputStream();
this.doc = new DataOutputStream(netOut);
} catch(Exception e) {
e.printStackTrace();
}
JButton jb = new JButton("点击设置");
jb.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
String str = JOptionPane.showInputDialog("请输入", null);
try {
doc.writeUTF(str);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
JPanel jp = new JPanel();
jp.add(jb);
this.add(jp);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
public static void main(String[] args) {
new Client();
}
}
1、服务端监听一个端口,其它客户端都通过这个端口和服务端进行通信。
2、每个客户端连接上来,服务端给其一个标识ID。然后向其它所有客户端广播一下有新客户端接入,ID多少。
3、客户端要向客户端发送消息,可以以消息包的形式发送,就是把目的客户端的标识和发送的内容组成一个数据包发往服务器,服务器读取就知道要向哪 个客户端发送数据,然后把内容往目的客户端通道发送