Android中java與js交互是通過webView來交互的。
成都創(chuàng)新互聯(lián)公司專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于成都網(wǎng)站設(shè)計、網(wǎng)站建設(shè)、楊浦網(wǎng)絡(luò)推廣、微信平臺小程序開發(fā)、楊浦網(wǎng)絡(luò)營銷、楊浦企業(yè)策劃、楊浦品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運(yùn)營等,從售前售中售后,我們都將竭誠為您服務(wù),您的肯定,是我們最大的嘉獎;成都創(chuàng)新互聯(lián)公司為所有大學(xué)生創(chuàng)業(yè)者提供楊浦建站搭建服務(wù),24小時服務(wù)熱線:18980820575,官方網(wǎng)址:sd-ha.com
WebView(網(wǎng)絡(luò)視圖)能加載顯示網(wǎng)頁,可以將其視為一個瀏覽器。它使用了WebKit渲染引擎加載顯示網(wǎng)頁,實(shí)現(xiàn)WebView有以下兩種不同的方法:
第一種方法的步驟:
1.在要Activity中實(shí)例化WebView組件:WebView webView = new WebView(this);
2.調(diào)用WebView的loadUrl()方法,設(shè)置WevView要顯示的網(wǎng)頁:
互聯(lián)網(wǎng)用:webView.loadUrl("");
本地文件用:webView.loadUrl(""); 本地文件存放在:assets 文件中
3.調(diào)用Activity的setContentView( )方法來顯示網(wǎng)頁視圖
4.用WebView點(diǎn)鏈接看了很多頁以后為了讓W(xué)ebView支持回退功能,需要覆蓋覆蓋Activity類的onKeyDown()方法,如果不做任何處理,點(diǎn)擊系統(tǒng)回退剪鍵,整個瀏覽器會調(diào)用finish()而結(jié)束自身,而不是回退到上一頁面
5.需要在AndroidManifest.xml文件中添加權(quán)限,否則會出現(xiàn)Web page not available錯誤。
uses-permission android:name="android.permission.INTERNET" /
第二種方法的步驟:
1、在布局文件中聲明WebView
2、在Activity中實(shí)例化WebView
3、調(diào)用WebView的loadUrl( )方法,設(shè)置WevView要顯示的網(wǎng)頁
4、為了讓W(xué)ebView能夠響應(yīng)超鏈接功能,調(diào)用setWebViewClient( )方法,設(shè)置 WebView視圖
5、用WebView點(diǎn)鏈接看了很多頁以后為了讓W(xué)ebView支持回退功能,需要覆蓋覆蓋Activity類的onKeyDown()方法,如果不做任何處理,點(diǎn)擊系統(tǒng)回退剪鍵,整個瀏覽器會調(diào)用finish()而結(jié)束自身,而不是回退到上一頁面
6、需要在AndroidManifest.xml文件中添加權(quán)限,否則出現(xiàn)Web page not available錯誤。
uses-permission android:name="android.permission.INTERNET"/
java是屬于后臺代碼,作用是獲取前端的請求并處理邏輯和數(shù)據(jù)庫處理。一般來說與前端網(wǎng)頁數(shù)據(jù)交互有兩用方式,一,ajax請求數(shù)據(jù)接口,然后前端根據(jù)返回值處理數(shù)據(jù)。二,使用request方式將返回值直接帶給跳轉(zhuǎn)頁面。建議使用第一種。
spring中利用mvc框架就可以實(shí)現(xiàn)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包(這里為了方便我直接把全部都復(fù)制過去了);
把以上的jar包全部復(fù)制到項目的WebContent/WEB-INF/lib目錄中。
二、在/WEB-INF中添加web.xml文件,文件內(nèi)容如下:
?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配置文件結(jié)束 --
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="
"
!-- 默認(rèn)的注解映射的支持 -- ?
mvc:annotation-driven/
?
!-- 如果當(dāng)前請求為“/”時,則轉(zhuǎn)發(fā)到“/helloworld/index” --
mvc:view-controller path="/" view-name="forward:/helloworld/index"/
!-- 靜態(tài)資源映射 --
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/" /
!-- 當(dāng)上面要訪問的靜態(tài)資源不包括在上面的配置中時,則根據(jù)此配置來訪問 --
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/?開啟注解映射支持,它是為了簡化配置的縮寫形式,它相當(dāng)于以下2個配置:
bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/
bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/
由于我們在web.xml文件里面配置的是攔截所有的請求到該servlet,所以我們在這里要對靜態(tài)資源文件映射作一下配置,否則請求這些資源文件會返回404:
!-- 靜態(tài)資源映射 --
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/" /
!-- 當(dāng)上面要訪問的靜態(tài)資源不包括在上面的配置中時,則根據(jù)此配置來訪問 --
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類,類中內(nèi)容如下:
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所對應(yīng)的視圖名稱,解析視圖時會在springservlet-config.xml文件指定的視圖文件夾中尋找對應(yīng)的視圖。
添加視圖,在項目/WEB-INF文件夾下新建一個views文件夾,并在views中添加index.jsp視圖,視圖內(nèi)容如下:
%@ 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
運(yùn)行項目輸出結(jié)果:
HI我..
通過構(gòu)造方法就可以把那個引用傳過去了。。
如果你是在一個窗口干什么后打開另一個窗口的。。就是說你在一個窗口中打開另一個窗口的。。
TextFrame 類 這里面有個文本框和一個按鈕。。點(diǎn)擊按鈕就打開另一個窗口。。
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("點(diǎn)擊");
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 類。。這里面有個按鈕。點(diǎn)擊就可以設(shè)置這邊這個文本框的內(nèi)容了。。
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("點(diǎn)擊設(shè)置");
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);
}
}
如果兩個類都是單獨(dú)運(yùn)行的。。沒有任何關(guān)系的話(即不是在一個窗口中點(diǎn)擊上面東西或是干什么就打開另一個窗口)。。都是獨(dú)立運(yùn)行的。。
那就需要用到socket了哦。。
下面兩個類你都單獨(dú)運(yùn)行就是了哈。。
服務(wù)器端: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();
}
}
// 服務(wù)器進(jìn)程
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類 有個按鈕。。點(diǎn)擊彈出輸入框輸入內(nèi)容。。服務(wù)器的文本框就顯示你輸入的內(nèi)容
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("點(diǎn)擊設(shè)置");
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、服務(wù)端監(jiān)聽一個端口,其它客戶端都通過這個端口和服務(wù)端進(jìn)行通信。
2、每個客戶端連接上來,服務(wù)端給其一個標(biāo)識ID。然后向其它所有客戶端廣播一下有新客戶端接入,ID多少。
3、客戶端要向客戶端發(fā)送消息,可以以消息包的形式發(fā)送,就是把目的客戶端的標(biāo)識和發(fā)送的內(nèi)容組成一個數(shù)據(jù)包發(fā)往服務(wù)器,服務(wù)器讀取就知道要向哪 個客戶端發(fā)送數(shù)據(jù),然后把內(nèi)容往目的客戶端通道發(fā)送
新聞標(biāo)題:java代碼怎么實(shí)現(xiàn)交互,JAVA交互
本文URL:http://sd-ha.com/article40/hcoeeo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供小程序開發(fā)、網(wǎng)站收錄、軟件開發(fā)、定制網(wǎng)站、App開發(fā)、網(wǎng)站導(dǎo)航
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)