去青軟那邊,認識到自己的不足,只做Android是不行的.前幾天公司也讓做服務器.於是今天開始拿起javaEE 以後還是好好做JavaEE+Android吧
看了一下黎老師的WebService,還是很典型的應用(黎老師的課程確實很棒啊!受益一生),可惜的是他用的struts做的 也是今天中午移植到struts2 也算是練手+重溫了.
進正題>
做Struts2 首先是配置工程 這個很煩人,和Android比差的很遠.
首先是
web.xml沒什麼好說的其實就是配置struts2
- <?xml version="1.0" encoding="UTF-8"?>
- <web-app version="2.5"
- xmlns="http://java.sun.com/xml/ns/javaee"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
- http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
- <display-name></display-name>
- <welcome-file-list>
- <welcome-file>index.jsp</welcome-file>
- </welcome-file-list>
-
- <filter>
- <!-- 定義核心Filter的名稱 -->
- <filter-name>struts2</filter-name>
- <!--定義核心Filter的實現類 -->
- <filter-class>
- org.apache.struts2.dispatcher.FilterDispatcher
- </filter-class>
- </filter>
-
- <filter-mapping>
- <!--核心Filter的名稱 -->
- <filter-name>struts2</filter-name>
- <!--使用該核心Filter來接受所有的Web請求 -->
- <url-pattern>/*</url-pattern>
- </filter-mapping>
- </web-app>
struts.xml相當於Android中的AndroidManifest.xm
l 就一個action,返回兩個結果,json和xml 貌似Android中現在很流行json的WebService
- <?xml version="1.0" encoding="UTF-8" ?>
-
- <!DOCTYPE struts PUBLIC
- "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
- "http://struts.apache.org/dtds/struts-2.0.dtd">
-
- <struts>
- <package name="struts2" extends="struts-default">
- <action name="List" class="com.su.action.VideoListAction">
- <result name="xml">/videos.jsp</result>
- <result name="json">/jsonvideos.jsp</result>
- </action>
- </package>
- </struts>
然後就是結果返回頁面,先看xml的:跳轉到videos.jsp 注意這裡有一個struts的迭代器 可以把獲取的videos處理後輸出
- <%@ page language="java" contentType="text/xml; charset=UTF-8" pageEncoding="UTF-8"%><%@taglib prefix="s" uri="/struts-tags"%><?xml version="1.0" encoding="UTF-8"?>
- <videos>
- <s:iterator value="#request.videos" id="video">
- <video id="<s:property value="#video.id"/>">
- <title><s:property value="#video.title"/></title>
- <timelength><s:property value="#video.time"/></timelength>
- </video>
- </s:iterator>
- </videos>
如果返回的是json那麼是jsonviedos.jsp
- <%@ page language="java" contentType="text/plain; charset=UTF-8" pageEncoding="UTF-8"%>${videos}
需要注意!xml文件中
<%@ page language="java" contentType="text/xml; charset=UTF-8" pageEncoding="UTF-8"%><%@taglib prefix="s" uri="/struts-tags"%><?xml version="1.0" encoding="UTF-8"?>
這裡尖括號直接不要有空格不然在chrome裡不能識別為xml文件 我想在解析的時候會報錯(什麼沒有文件頭什麼的吧)
然後是java代碼部分了
首先是VideoListAction.java也就是主action 相當於activity了
- package com.su.action;
-
- import java.io.OutputStream;
- import java.io.PrintWriter;
- import java.util.List;
-
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
-
- import org.apache.struts2.ServletActionContext;
-
- import com.opensymphony.xwork2.ActionContext;
- import com.opensymphony.xwork2.ActionSupport;
- import com.su.domain.Video;
- import com.su.service.VideoService;
- import com.su.service.impl.VideoServiceBean;
-
- public class VideoListAction extends ActionSupport {
- private VideoService service = new VideoServiceBean();
- private String format;
- public String getFormat() {
- return format;
- }
- public void setFormat(String format) {
- this.format = format;
- }
-
- @Override
- public String execute() throws Exception {
- List<Video> videos = service.getLastVideos();
- if (format.equals("json")) {
- StringBuilder json = new StringBuilder();
- json.append('[');
- for(Video video : videos){ // {id:76,title:"xxxx",timelength:80}
- json.append('{');
- json.append("id:").append(video.getId()).append(',');
- json.append("title:\"").append(video.getTitle()).append("\",");
- json.append("timelength:").append(video.getTime());
- json.append('}').append(',');
- }
- json.deleteCharAt(json.length()-1);
- json.append(']');
- ServletActionContext.getRequest().setAttribute("videos", json);
- System.out.println("1111111111111111111111111111");
- return "json";
- }
- else {
- ServletActionContext.getRequest().setAttribute("videos", videos);
- return "xml";
- }
-
- }
- }
很簡單json就是從videos裡拼接把String放到servleactioncontext ; xml就更簡單了,直接返回的list