我们先搭建服务器

这边我在知道需要哪些依赖架包时,一次性直接添加 (pom.xml):
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.zking</groupId> <artifactId>XmlParser</artifactId> <packaging>war</packaging> <version>0.0.1-SNAPSHOT</version> <name>XmlParser Maven Webapp</name> <url>http://maven.apache.org</url> <!--spring版本--> <properties> <spring.version>4.3.3.RELEASE</spring.version> </properties> <dependencies> <!-- MyBatis依赖 --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.2.5</version> </dependency> <!-- MySql --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.38</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.8.1</version> <scope>test</scope> </dependency> <!-- Servlet --> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> </dependency> <!-- Log4J --> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency> <!-- 整合Spring,包含SpringMVC --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-oxm</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-tx</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aop</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>${spring.version}</version> </dependency> <!-- 引用c3p0 依赖 start--> <dependency> <groupId>com.mchange</groupId> <artifactId>c3p0</artifactId> <version>0.9.2.1</version> </dependency> <!-- 引用c3p0 依赖 end--> <!-- 引用插件依赖:MyBatis整合Spring --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>1.3.0</version> </dependency> <!-- JSTL --> <dependency> <groupId>jstl</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency> <!-- JACKSON Start--> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.6.3</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>2.6.3</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId> <version>2.6.3</version> </dependency> <!-- JACKSON end--> </dependencies> <build> <finalName>XmlParser</finalName> </build></project>person.java实体类
package com.zking.entity;public class Person { private int pid; private String pname; private int page; public int getPid() { return pid; } public void setPid(int pid) { this.pid = pid; } public String getPname() { return pname; } public void setPname(String pname) { this.pname = pname; } public Person() { super(); // TODO Auto-generated constructor stub } public int getPage() { return page; } public void setPage(int page) { this.page = page; } public Person(int pid, String pname, int page) { super(); this.pid = pid; this.pname = pname; this.page = page; } public Person(String pname, int page) { super(); this.pname = pname; this.page = page; } @Override public String toString() { return "Person [pid=" + pid + ", pname=" + pname + ", page=" + page + "]"; }}PersonDao接口:
package com.zking.dao;import java.util.List;import java.util.ArrayList;import com.zking.entity.Person;public interface PersonDao { public void addPerson(Person person); public List<Person> getPersons();}person映射xml:
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.zking.dao.PersonDao"> <insert id="addPerson" parameterType="com.zking.entity.Person" > insert into person values(null,#{pname},#{page}); </insert> <select id="getPersons" resultType="com.zking.entity.Person"> select * from person </select> </mapper>SqlsessionFactoryBuilder().build(Resources.getResourceAsStream(“MyBatisConfig.xml”));拿到Session工厂,具体代码就不贴了
添加一个日志管理 log4j.properties
# Global logging configurationlog4j.rootLogger=DEBUG, stdout# MyBatis logging configuration...log4j.logger.org.mybatis.example.BlogMapper=TRACE# Console output...log4j.appender.stdout=org.apache.log4j.ConsoleAppenderlog4j.appender.stdout.layout=org.apache.log4j.PatternLayoutlog4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n这边先来一个数据连接的配置文件:
uname=root##用户名upass=tiger##密码driver_class=com.mysql.jdbc.Driver##mysql驱动类url=jdbc:mysql://localhost:3306/test//连接urlinitPoolSize=5//数据连接池初始最小5个maxPoolSize=10//数据连接池最大10个applicationContext.xml如下:
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd"> <!-- 1.加载properties文件 --> <context:property-placeholder location="classpath:db.properties"/> <!--2.引用数据源 --> <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> <property name="user" value="${uname}"></property> <property name="password" value="${upass}"></property> <property name="jdbcUrl" value="${url}"></property> <property name="driverClass" value="${driver_class}"></property> <property name="initialPoolSize" value="${initPoolSize}"></property> <property name="maxPoolSize" value="${maxPoolSize}"></property> </bean> <!-- 03.配置SQLSessionFactory --> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <!-- 3.1引用数据源 --> <property name="dataSource" ref="dataSource" ></property> <!-- 3.2加载MyBatis配置文件 --> <property name="configLocation" value="classpath:MyBatisConfig.xml"></property> <!-- 3.3关联Mybatis映射文件 --> <property name="mapperLocations" value="classpath:com/zking/entity/*.xml"></property> </bean> <!-- 配置所有的Dao所在的包 --> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="com.zking.dao"></property> </bean></beans>springMVC.xml 这里记得把注解驱动放进去,如果不加,则会报406的错
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd"> <!-- 配置扫描器 --> <context:component-scan base-package="com.zking"></context:component-scan> <!-- 注解驱动 --> <mvc:annotation-driven></mvc:annotation-driven> <!-- 视图解析器 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/"></property> <property name="suffix" value=".jsp"></property> </bean> </beans>PersonContorller.java:
package com.zking.contorller;import java.util.List;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.ResponseBody;import org.springframework.web.servlet.ModelAndView;import com.zking.dao.PersonDao;import com.zking.entity.Person;import com.zking.entity.Teacher;//声明为控制器类@Controllerpublic class PersonContorller { //拿到接口对象 @Autowired PersonDao personDao; //XML @RequestMapping("/getPersons") public ModelAndView getPersons(){ List<Person> mypersons= personDao.getPersons(); ModelAndView andView=new ModelAndView(); andView.addObject("mypersons",mypersons); andView.setViewName("success"); return andView; } //Json格式 @RequestMapping("/getPersonJson") @ResponseBody public Teacher getPersonsJson(){ Teacher teacher= new Teacher(); teacher.setSchool("天王盖地虎"); teacher.setNumber(20); List<Person> mypersons= personDao.getPersons(); teacher.setPersons(mypersons); return teacher; } }如果是XML格式的,我们需要生成xml文件: success.jsp:
<%@ page language="java" contentType="text/xml; charset=UTF-8"pageEncoding="UTF-8"%><%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %><%@page isELIgnored="false" %><persons> <c:forEach items="${mypersons}" var="hh"> <person id="${hh.pid }" name="${hh.pname }"> <age>${hh.page }</age> </person> </c:forEach></persons>如果是Json格式的,就只需在Contorller方法上面加上注解@ResponseBody,返回你需要的对象就行了
最后在来一个页面测试一下数据访问
getperson.jsp:
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%><%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %><!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> <a href="getPersons.action">获取xml数据</a> <a href="getPersonJson.action">获取Json数据</a></body></html>最后web.xml配置如下:
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd" ><web-app> <display-name>Archetype Created Web Application</display-name> <!-- needed for ContextLoaderListener --> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:applicationContext.xml</param-value> </context-param> <!-- Bootstraps the root web application context before servlet initialization --> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <!-- The front controller of this Spring Web application, responsible for handling all application requests --> <servlet> <servlet-name>springDispatcherServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:springMVC.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <!-- Map all requests to the DispatcherServlet for handling --> <servlet-mapping> <servlet-name>springDispatcherServlet</servlet-name> <url-pattern>*.action</url-pattern> </servlet-mapping></web-app>下面在Android app中分为两种方式去拿数据,一种是解析json,一种是解析XML (6.1)、首先我们先解析json:
package com.example.android30_jsonparser;import android.os.AsyncTask;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.util.Log;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.ImageView;import android.widget.ListView;import android.widget.TextView;import com.alibaba.fastjson.JSON;import com.example.android30_jsonparser.entity.Person;import com.example.android30_jsonparser.entity.Teacher;import com.example.android30_jsonparser.uitl.ItemTag;import com.google.gson.Gson;import org.json.JSONArray;import org.json.JSONException;import org.json.JSONObject;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.net.HttpURLConnection;import java.net.MalformedURLException;import java.net.URL;import java.util.List;import static android.os.Build.VERSION_CODES.M;import static com.alibaba.fastjson.JSON.parSEObject;public class MainActivity extends AppCompatActivity { private Teacher teacher; private View vHead;//头部 private ListView lv_json; private MyAdpter myAdpter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); lv_json = (ListView) findViewById(R.id.lv_json); } public void getJson(View view){ new MyAsyncTask().execute(); } class MyAdpter extends BaseAdapter{ @Override public int getCount() { return teacher.getPersons().size(); } @Override public Object getItem(int i) { return teacher.getPersons().get(i); } @Override public long getItemId(int i) { return i; } @Override public View getView(int i, View view, ViewGroup viewGroup) { if(view==null){//优化对象的重用 view= LayoutInflater.from(MainActivity.this).inflate(R.layout.item_listview,null); ItemTag itemTag=new ItemTag(); itemTag.tv_pid= (TextView) view.findViewById(R.id.tv_item_listview_pid); itemTag.tv_pname= (TextView) view.findViewById(R.id.tv_item_listview_pname); itemTag.tv_page= (TextView) view.findViewById(R.id.tv_item_listview_page); view.setTag(itemTag); } ItemTag itemTag= (ItemTag) view.getTag(); itemTag.tv_pid.setText(""+teacher.getPersons().get(i).getPid()); itemTag.tv_pname.setText(teacher.getPersons().get(i).getPname()); itemTag.tv_page.setText(""+teacher.getPersons().get(i).getPage()); return view; } } class MyAsyncTask extends AsyncTask{ @Override protected Object doInBackground(Object[] objects) {//耗时操作 String path="http://193.168.2.212:8080/XmlParser/getPersonJson.action"; try { //获取路径 URL url=new URL(path); HttpURLConnection huc= (HttpURLConnection) url.openConnection(); huc.setRequestMethod("GET"); huc.setConnectTimeout(5000); if(huc.getResponseCode()==200){ InputStream is= huc.getInputStream(); BufferedReader br=new BufferedReader(new InputStreamReader(is)); StringBuffer sb=new StringBuffer(); String str=null; while ((str=br.readLine())!=null){ sb.append(str); } br.close(); is.close(); //原生态解析(JSONSObject,JSONArray)// JSONObject jb=new JSONObject(sb.toString());// String school=jb.getString("school");// int number=jb.getInt("number");// Log.i("test",school+" "+number);// JSONArray ja= jb.getJSONArray("persons");// for (int i=0;i<ja.length();i++){// JSONObject jbPerson= ja.getJSONObject(i);// int pid= jbPerson.getInt("pid");// String pname= jbPerson.getString("pname");// int page= jbPerson.getInt("page");// Log.i("test",pid+" "+pname+" "+page);// } //阿里巴巴json解析(导入架包以及引用架包) teacher= JSON.parseObject(sb.toString(), Teacher.class);// Log.i("test","alibaba:"+teacher.getSchool()+" "+teacher.getNumber());// for (Person person : teacher.getPersons()) {// Log.i("test",""+person);// } //Gson(google自带 需要f4引用架包)// Gson gson=new Gson();// Teacher teacher= gson.fromJson(sb.toString(), Teacher.class);// Log.i("test","google:"+teacher.getSchool()+" "+teacher.getNumber());// for (Person person : teacher.getPersons()) {// Log.i("test",""+person);// } } } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return null; } @Override protected void onPostExecute(Object o) { super.onPostExecute(o); vHead= View.inflate(MainActivity.this, R.layout.item_main, null); TextView iv_school= (TextView) vHead.findViewById(R.id.iv_school); TextView iv_number= (TextView) vHead.findViewById(R.id.iv_number); iv_school.setText(teacher.getSchool()); iv_number.setText(""+teacher.getNumber()); // 头布局放入listView中 lv_json.addHeaderView(vHead); myAdpter = new MyAdpter(); lv_json.setAdapter(myAdpter); myAdpter.notifyDataSetChanged();//通知适配器发生改变 } } }(6.2)、布局文件: activity_main.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="com.example.android30_jsonparser.MainActivity"> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:text="获取JSON" android:onClick="getJson" /> <ListView android:layout_width="match_parent" android:id="@+id/lv_json" android:layout_height="wrap_content"> </ListView></LinearLayout>(6.3)、别忘了在清单文件加网络权限
<uses-permission android:name="android.permission.INTERNET"></uses-permission>效果图 
布局文件:
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:orientation="vertical" tools:context="com.example.android29_xmlparser.MainActivity"> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:text="解析xml" android:onClick="getxml" /> <ListView android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/lv_xml" ></ListView></LinearLayout>好了,请求以及解析代码上面都写的很详细了,其他的代码只是作一个展示作用。
新闻热点
疑难解答