導航:首頁 > 操作系統 > android訪問servlet

android訪問servlet

發布時間:2022-09-04 08:17:32

1. android項目servlet放哪兒

進入正題之前還是先回答你的問題,servlet當然是放在javaWeb項目裡面了,web項目又放哪裡呢,部署在web伺服器上,在伺服器支持的系統平台上,只要是電腦都可以安裝web伺服器,在測試階段常用的是TomCat伺服器。從狹義上講你的android項目和web項目是分開的,各是各的平台,從業務需求上是一體的,android項目負責與用戶交互,web項目負責後台服務業務處理,二者完成項目需求。
貌似在你學習Android時候對javaWeb學習不夠,如果這方面知識不掌握,android聯網部分會很吃力。

2. android中如何載入servlet-api.jar到項目 新手 沒什麼經驗 請大神們 講詳細點

導入JAR包和j2ee中一樣啊!如圖所示,然後選擇你要加入的jar文件就ok了

3. android客戶端如何接受伺服器端servlet響應的中文字元

首先我們要知道的是

Android客服端與伺服器數據交換的方式是一般用json,只是一般在設置字元集的時候用utf8,因為Android是基於Linux內核的,用utf8方便接收中午的時候不會亂碼

原因是JSON(JavaScript Object Notation) 是一種輕量級的數據交換格式。它基於ECMAScript的一個子集。 JSON採用完全獨立於語言的文本格式。json解析也容易

json是一種key /value鍵值對的數據存儲方式的類似於Map

下面的是伺服器端輸出的json代碼

這里不寫詳細的 代碼,因為伺服器用的框架不同是不一樣的

下面的是Servlet的代碼片段

//設置響應的編碼
this.response.setContentType("text/html;charset=utf-8");
this.response.setCharacterEncoding("UTF-8");//設置utf8方便接受中文的時候不會亂碼
//獲取客戶端的請求信息
Stringusername=this.request.getParameter("username");
JSONObjectjson=newJSONObject();//定義一個JSONObject
json.put("message","success");//添加數據
response.getWriter().println(json.toString());//輸出響應的數據

然後就要在android客服端接受數據了

要接受伺服器的返回的數據就要先與伺服器起得連接

{
/**.*/
//模擬器自己把自己當成localhost了,伺服器應該為10.0.2.2

@Override
publicvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
getPDAServerData(url);
}

/**
*請求服務
*@paramurl
*/
privatevoidgetPDAServerData(Stringurl){
url+="?username=123456";
HttpClientclient=newDefaultHttpClient();
HttpPostrequest;
try{
request=newHttpPost(newURI(url));//使用post方式
HttpResponseresponse=client.execute(request);//執行連接到伺服器
//判斷請求是否成功
if(response.getStatusLine().getStatusCode()==200){
HttpEntityentity=response.getEntity();
if(entity!=null){
Stringout=EntityUtils.toString(entity);//獲取伺服器端返回的結果是json字元串,android有自帶的json解析框架包,不用另外導入的
newAlertDialog.Builder(this).setMessage(out).create().show();
}
}

}catch(URISyntaxExceptione){
e.printStackTrace();
}
catch(ClientProtocolExceptione){
e.printStackTrace();
}catch(IOExceptione){
e.printStackTrace();
}
}
}

4. 如何搭建本地伺服器Tomcat用於安卓編程

android客戶端訪問tomcat搭建的servlet伺服器並互傳數據的步驟:

  1. 伺服器軟體環境的搭建安裝apache tomcat伺服器。

  2. 環境搭建好了部署java web項目。

  3. 啟動tomcat伺服器,並測試在瀏覽器能否訪問。

  4. 手機通過電腦的ip地址去訪問tomcat的web項目即可。

5. android fragment連接servlet

1.建立/res/values-large/refs.xml引用資源文件 為了開發兼顧屏幕解析度的應用,我們需要建立一個引用資源文件,專門用於定義各種引用項。refs.xml引用資源文件中定義了一項引用,其作用就是標明activity_book_list實際引用(@)/res/layout/activity_book_twopane.xml界面布局文件。 之所以這樣使用,目的是為了在Activity載入R.layout.activity_book_list時將會根據運行平台的屏幕大小自動選擇界面布局文件:在大屏幕的平板電腦上,R.layout.activity_book_list將會變成/res/layout/目錄小的activity_book_twopane界面布局文件;在小屏幕的手機上,R.layout.activity_book_list依然引用/res/layout/目錄下的activity_book_list.xml界面布局文件。源碼如下:<?xml version="1.0" encoding="utf-8"?>
<resources>
<!--定義activity_book_list實際引用@layout/activity_book_twopane資源 -->
<item type="layout" name="activity_book_list">
@layout/activity_book_twopane</item>
</resources>
2.建立/res/layout/activity_book_list.xml小屏幕界面布局文件 該布局文件僅僅是顯示BookListFragment組件(android:name="包名.BookListFragment"),即該界面布局文件中只是顯示圖書列表。源碼如下:<?xml version="1.0" encoding="utf-8"?>
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
android:name="com.example.android_fragment_1.BookListFragment"
android:id="@+id/book_list"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginRight="16dp"
android:layout_marginLeft="16dp"/>
3.建立/res/layout/activity_book_twopane.xml大屏幕界面布局文件
這個布局文件就定義了Activity的顯示界面:左邊將會顯示一個ListFragment,右邊只是一個FrameLayout容器。其中FrameLayout容器將會動態更新其中顯示的Fragment。<?xml version="1.0" encoding="utf-8"?>
<!-- 定義一個水平排列的LinearLayout,並指定使用中等分隔條 -->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
android:layout_marginLeft="16dp"
android:layout_marginRight="16dp"
android:divider="?android:attr/dividerHorizontal"
android:showDividers="middle">
<!-- 使用資源文件方式:添加一個fragment到Activity中 -->
<fragment
android:name="com.example.android_fragment_1.BookListFragment"
android:id="@+id/book_list"
android:layout_height="match_parent"
android:layout_width="0dp"
android:layout_weight="1"/>
<!-- 添加一個FrameLayout容器,用於顯示圖書詳細信息 -->
<FrameLayout
android:id="@+id/book_detail_container"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="3"/>
</LinearLayout>

4.建立/src/../BookListActivity.java主Activity 實現BookListActivity將會針對不同屏幕解析度來載入不同的界面布局文件,即通過獲取界面資源文件"activity_book_list",判定該界面布局文件中是否包含有ID為book_detail_containner的組件。如果有,則說明為大屏幕使用的是activity_book_twopane.xml界面布局文件;否則,為activity_book_list.xml界面布局文件。源碼如下:package com.example.android_fragment_1;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
public class BookListActivity extends Activity implements
BookListFragment.Callbacks
{
//1.定義一個旗標,用於標識是否該應用是否支持大屏幕
private boolean mTwoPane;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//2.指定載入activity_book_list對應的界面布局文件,實際上會根據解析度選擇相應的布局界面
setContentView(R.layout.activity_book_list);
//3.如果載入的界面布局文件中包含ID為book_detail_container的組件,則說明支持大屏幕
if(findViewById(R.id.book_detail_container)!=null)
{
mTwoPane=true; //支持大屏幕
((BookListFragment)getFragmentManager()
.findFragmentById(R.id.book_list))
.setActivateOnItemClick(true);
}

}
//4.實現Fragment與Activity交互方法
@Override
public void onItemSelected(Integer id) {
/*如果載入的是大屏幕布局界面文件*/
if(mTwoPane)
{
//a.創建Bundle,准備向Fragment傳入參數(將鍵值對綁定到arguments對象中)
Bundle arguments=new Bundle();
arguments.putInt(BookDetailFragment.ITEM_ID,id);
//b.創建BookDetailFragment對象,並向Fragment傳入參數
BookDetailFragment fragment=new BookDetailFragment();
fragment.setArguments(arguments);
//c.使用fragment替換book_detail_container容器當前顯示的Fragment
getFragmentManager().beginTransaction()
.replace(R.id.book_detail_container, fragment).commit();
}
/*如果載入的是小屏幕布局界面文件*/
else
{
//a.創建啟動BookDetailActivity的Intent
Intent detailIntent=new Intent(this,BookDetailActivity.class);
//b.設置傳遞給BookDetailActivity參數,並啟動Activity
detailIntent.putExtra(BookDetailFragment.ITEM_ID, id);
startActivity(detailIntent);

}
}
}

5.建立/src/../BookDetailActivity.java顯示圖書詳情Activity BookDetailActivity主要用於顯示小屏幕圖書詳情,他將直接復用已有的BookDetailFragment。主要完成兩個功能:一是當用戶當即Activity某個列表項時,會Intent跳轉到該Activity並將打包的某圖書詳情顯示在Activity上;二是,該Activity還啟用了ActionBar上的應用程序圖標,允許用戶點擊該圖標返回到程序的主Activity。package com.example.android_fragment_1;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.MenuItem;
public class BookDetailActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
//1.指定載入/res/layout目錄下的activity_book_detail.xml布局文件
setContentView(R.layout.activity_book_detail);
//2.將ActionBar上應用圖標轉換成可點擊的按鈕
getActionBar().setDisplayHomeAsUpEnabled(true);
if(savedInstanceState==null)
{
//a.創建BookDetailFragment對象
BookDetailFragment fragment=new BookDetailFragment();
//b.創建Bundle對象
Bundle arguments=new Bundle();
arguments.putInt(BookDetailFragment.ITEM_ID, getIntent()
.getIntExtra(BookDetailFragment.ITEM_ID,0));
//c.向Fragment傳入參數
fragment.setArguments(arguments);
//d.指定fragment添加到book_detail_container容器中
getFragmentManager().beginTransaction()
.add(R.id.book_detail_container, fragment).commit();
}
}
//3.按下圖標響應
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// TODO Auto-generated method stub
if(item.getItemId()==android.R.id.home)
{
//a.創建啟動BookListActivity的Intent
Intent intent=new Intent(this,BookListActivity.class);
//b.添加額外的Flag,將Activity棧中處於FirstActivity之上的Activity彈出
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
//c.啟動intent對應的Activity
startActivity(intent);

6. Android連接servlet的問題

。。你的IP是區域網伺服器的IP,首先你先確定你的手機或者你的設備連接的WIFI是和你的伺服器是同一個區域網的。如果手機使用的是3G/4G網路是不能訪問的。

7. android後台服務用servlet怎麼搭建

開始搭建的話直接寫一個servlet,在doGet()或者doPost()里response.getWriter().print(「xxx」);你就知道了,android訪問直接以http://ip+埠+servlet名稱作為路徑

8. android注冊時信息怎樣傳到servlet

問題概述

android手機端注冊主要寫在Activity中,servlet為web端實現。所以你的問題可以理解為android與server端servlet交互。

涉及的知識點

  1. android端Activity代碼實現。

  2. server端Servlet代碼實現。

具體實現

server端代碼:

{	
=314719472293387358L;
@Override
protectedvoiddoPost(HttpServletRequestreq,HttpServletResponseresp) throwsServletException,IOException{ //登陸成功標志
StringLOGIN_FLAG="";
//獲得客戶端提交用戶名密碼
Stringusername=req.getParameter("username");
Stringpassword=req.getParameter("password");
//調用UserDAO中isLogin方法判斷數據中用戶名密碼是否正確
booleanflag=UserDAO.isLogin(username,password); try{ DataOutputStreamoutput=newDataOutputStream(resp.getOutputStream()); if(flag){ LOGIN_FLAG="success";
output.writeUTF("伺服器端數據:"+LOGIN_FLAG);
System.out.println(LOGIN_FLAG);
output.writeInt(1);
output.close();
}else{
//登錄失敗
LOGIN_FLAG="failure"; System.out.println(LOGIN_FLAG);
output.writeUTF("伺服器端數據:"+LOGIN_FLAG);
output.close();
}
}catch(Exceptione){
e.printStackTrace();
}

}
}

android端代碼:

{	
//privatestaticfinalintREQUEST_CODE=2;
HttpPosthttpRequest=newHttpPost(UriAPI.HTTPCustomer);
EditTextet_name;
EditTextet_pwd;
TextViewshow_login;
Buttonbtn_login;
Buttonbtn_cancle;
ProgressDialogprogressDialog;
/**.*/
@Override
publicvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//初始化登陸界面
btn_login=(Button)findViewById(R.id.btn_login);
btn_cancle=(Button)findViewById(R.id.btn_cancle);
et_name=(EditText)findViewById(R.id.et_name);
et_pwd=(EditText)findViewById(R.id.et_pwd);
show_login=(TextView)findViewById(R.id.show_login);

progressDialog=newProgressDialog(this);
btn_login.setOnClickListener(newOnClickListener(){
@SuppressWarnings("unchecked")
@Override
publicvoidonClick(Viewv){ //通過AsyncTask類提交數據非同步顯示
newAT().execute(et_name.getText().toString(),et_pwd.getText().toString());
}
});

}
publicclassUriAPI{
/**定義一個Uri**/
="http://10.0.1.9:8026/JSONDemo/servlet/CustomerServlet";
}
@SuppressWarnings("rawtypes") classATextendsAsyncTask{

Stringresult="";
@Override
protectedvoidonPreExecute(){
//載入progressDialog
progressDialog.show();
}

@Override
protectedObjectdoInBackground(Object...params_obj){ CharSequenceusername=""; CharSequencepassword="";

username=et_name.getText();

password=et_pwd.getText(); if(!username.equals("")&&!password.equals("")){ //請求數據
HttpPosthttpRequest=newHttpPost(UriAPI.HTTPCustomer); //創建參數
List<NameValuePair>params=newArrayList<NameValuePair>();
params.add(newBasicNameValuePair("username",username.toString()));
params.add(newBasicNameValuePair("password",password.toString())); //params.add(newBasicNameValuePair("flag","0"));
try{ //對提交數據進行編碼
httpRequest.setEntity(newUrlEncodedFormEntity(params,HTTP.UTF_8)); HttpResponsehttpResponse=newDefaultHttpClient().execute(httpRequest); //獲取響應伺服器的數據
if(httpResponse.getStatusLine().getStatusCode()==200){ //利用位元組數組流和包裝的綁定數據
byte[]data=newbyte[2048]; //先把從服務端來的數據轉化成位元組數組
data=EntityUtils.toByteArray((HttpEntity)httpResponse.getEntity()); //再創建位元組數組輸入流對象
ByteArrayInputStreams=newByteArrayInputStream(data); //綁定位元組流和數據包裝流
DataInputStreamdis=newDataInputStream(s);
//將位元組數組中的數據還原成原來的各種數據類型,代碼如下:
result=newString(dis.readUTF());
Log.i("伺服器返回信息:",result);
}
}catch(ClientProtocolExceptione){
e.printStackTrace();
}catch(UnsupportedEncodingExceptione){
e.printStackTrace();
}catch(IOExceptione){
e.printStackTrace();
}

} returnresult;
}

@Override
protectedvoidonPostExecute(Objectresult){

//獲得伺服器返回信息成功後
show_login.setText(result.toString());
//取消進度條
progressDialog.cancel();
}

}
}

總結說明

二者之間的交互運用十分廣泛,android需要後台時就涉及到數據的交互。

注意事項

  1. android端訪問網路需要用到非同步載入,因為訪問網路為耗時操作。

  2. 注意Activity端傳出數據操作。

  3. 注意Servlet端接收數據操作。

參考實例

開源中國社區:android與server端servlet交互

9. android 接受servlet 響應的json字元串 格式不對

看下servlet返回的數據 是不是就已經加了空格之類的特殊字元,json串有嚴格要求,不能亂加空格的

10. android應用如何嵌入獨立的ijetty的servlet容器

2、server部分編譯出:i-jetty-server-3.1.jar;
3、總共對外依賴的包需要如下這些:
其中,xmlParserAPIs-2.6.2.jar和xpp3-1.1.4.jar因為某些原因會導致出錯,故可以剔除出去,並不影響ijetty的運行。為了簡介,這些類可以解壓後重新打包到一起,至少jetty的部分可以這么做。
4、web工程需要編譯成android可以解析的dex格式zip包,需要注意的是,第三方的lib需要剔除不需要的,尤其是servlet-api-2.5.jar,因為容器中已經包含一個了。
打包命令舉例:
dx.bat --dex --output=E:\demo\classes.zip E:\demo\WEB-INF\classes E:\demo\WEB-INF\lib025、把classes.zip包放到lib下,刪除原先的jar包,class下的類需要保留,然後打成war包:
jar cvf ppweb.war *.*
026、把ppweb放到jetty目錄下的webapps下即可,重啟程序即可訪問了。
027、基於ijetty的web需要注意,對外部context的引用需要用android系統的,不能用原先web工程那種方式獲取。
028、集成ijetty最重要的是用到IJettyservice這個類,以及Ijetty中定義的一些環境常量,用默認值即可很好運行。注意Ijetty中的如下代碼:static {__JETTY_DIR = new File(Environment.getExternalStorageDirectory(),
"jetty");// Ensure parsing is not validating - does not work with android
System.setProperty("org.eclipse.jetty.xml.XmlParser.Validating",
"false");
// Bridge Jetty logging to Android logging
System.setProperty("org.eclipse.jetty.util.log.class",
"org.mortbay.ijetty.AndroidLog");

閱讀全文

與android訪問servlet相關的資料

熱點內容
r720伺服器什麼年代 瀏覽:971
本地電腦怎麼設置傳奇伺服器 瀏覽:1000
安卓10框架怎麼製作 瀏覽:957
程序員退休工資待遇 瀏覽:607
湛江中文編程數控系統代理 瀏覽:417
openglandroid書 瀏覽:170
奇妙組件安卓版叫什麼 瀏覽:729
微信授權什麼app權重最高 瀏覽:11
php循環數組foreach 瀏覽:78
zip和app有什麼區別 瀏覽:633
乖法快速演算法 瀏覽:871
日本程序員一年工資 瀏覽:199
出國做程序員怎麼樣 瀏覽:735
rar鎖定壓縮文件 瀏覽:871
安卓id號碼怎麼更換 瀏覽:524
db2如何連接伺服器資料庫 瀏覽:630
wordtopdf轉換 瀏覽:840
雲伺服器在哪設置ftp 瀏覽:622
黑客社會工程學攻擊pdf 瀏覽:998
專業中穎單片機程序開發 瀏覽:426