使用struts2制作做webservice
昨天去青软那边,认识到自己的不足,只做Android是不行的.前几天公司也让做服务器.于是今天开始拿起javaEE 以后还是好好做JavaEE+Android吧
看了一下黎老师的WebService,还是很典型的应用(黎老师的课程确实很棒啊!受益一生),可惜的是他用的struts做的 也是今天中午移植到struts2 也算是练手+重温了.
进正题>
做Struts2 首先是配置工程 这个很烦人,和Android比差的很远.
首先是
web.xml没什么好说的其实就是配置struts2
[html] <?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
[html]
<?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处理后输出
[html]
<%@ 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
[html]
<%@ 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了
[java]
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);
补充:综合编程 , 其他综合 ,