留给自己用的


package com.huawei.sdtrp.command;

import java.util.logging.Logger;

/**
* <pre>
* 命令解析器,默认实现
* 方法一:
* 使用ClassLorder来加载(包名+CMD+"Command")命令类路径
* 具有包名限制
* 方法二:
* 在实际Action中,采用Spring注入包名称属性,再使用命令解析器实例化,具体的命令对象(可行,但是设计不太合理[不是Action要做的事情])
* 方法三:
* 有没有另外的方式,来构造命令对象???(只知道命令字符串)
* </pre>
* @author cWX194449
*
*/
public class CommandParserImpl implements CommandParser {

private static Logger log = Logger.getLogger(CommandParserImpl.class.getCanonicalName());

private String packageNameSpace = "com.huawei.sdtrp.command";//命令实现类包路径

@Override
public Command parse(String command) {
//这种方法,包名定死了
// String packageNameSpace = "com.huawei.sdtrp.command" ;
String suffix = "Command";
String fullCommandName = packageNameSpace.concat(".").concat(command).concat(suffix);

try {
// return (Command)Class.forName(fullCommandName).newInstance();
return (Command)this.getClass().getClassLoader().loadClass(fullCommandName).newInstance();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}catch(Exception e){
e.printStackTrace();
}

return null;


/*
String suffix = "Command";

ActionContext ac = ActionContext.getContext();
ac.

WebApplicationContext ctx = WebApplicationContextUtils
.getWebApplicationContext(config.getServletContext());

return (Command)ctx.getBean(command.concat(suffix));

return null;
*/
}

}


//Action
package com.huawei.sdtrp.action;

import com.huawei.sdtrp.command.Command;
import com.huawei.sdtrp.command.CommandParser;
import com.huawei.sdtrp.model.ExecutedResult;
import com.huawei.sdtrp.model.Terminal;
import com.opensymphony.xwork2.ActionSupport;

/**
* 基本Action
* @author cWX194449
*
*/
public abstract class BaseAction extends ActionSupport {

private static final long serialVersionUID = 1L;

private Terminal terminal ;//表单属性搜集

public Terminal getTerminal() {
return terminal;
}

public void setTerminal(Terminal terminal) {
this.terminal = terminal;
}

private CommandParser commandParser ;//注入

public CommandParser getCommandParser() {
return commandParser;
}

public void setCommandParser(CommandParser commandParser) {
this.commandParser = commandParser;
}

private ExecutedResult executedResult ;

public ExecutedResult getExecutedResult() {
return executedResult;
}

public void setExecutedResult(ExecutedResult executedResult) {
this.executedResult = executedResult;
}

@Override
public String execute() throws Exception {
// Object object = this.commandParser.parse(this.terminal.getTerminalData().getCmd()).execute();
// Object object = this.generateCommand(terminal).execute();
// return null == object ?"NULL":object.toString();
if(this.validateParameters()){
this.executedResult = this.generateCommand(terminal).execute();
}
if(null == this.executedResult){//异常,构造命令执行结果
// String msg = this.terminal.getTerminalData().getCmd().concat("命令请求异常");
// throw new Exception(msg);
//TODO 异常命令执行结果,构造
this.executedResult = new ExecutedResult();
}
/*以流的形式,响应终端*/
this.responseTerminal();
// return this.executedResult.getResultStatus();
return null;
}

/**
* 抽象工厂CommandParser产生Command对象
* @param terminal
* @return
*/
public Command generateCommand(Terminal terminal){
// return this.commandParser.parse(this.terminal.getTerminalData().getCmd());
// Command command = this.commandParser.parse(this.terminal.getTerminalData().getCmd());
Command command = this.commandParser.parse(this.terminal.getCmd());
command.init(terminal);
return command ;
};

/**
* 请求参数,检验(default:true相当于不验证)
* 若false,需要重新赋值给命令执行结果
* (过滤非法请求)
* @return
*/
public boolean validateParameters(){
return true;
}

/**
* <pre>
* 以流的形式,写回到终端
* 根据每个每个命令,返回的内容不一样,需要自已定义实现化
* </pre>
*/
public abstract void responseTerminal();
}

//Action
package com.huawei.sdtrp.action;

import java.io.IOException;
import java.io.OutputStream;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts2.ServletActionContext;

import com.huawei.sdtrp.model.ExecutedResult;
import com.opensymphony.xwork2.ActionContext;

/**
* 注册动作
* 1、请求数据校验
* 2、授权检查
* @author cWX194449
*
*/
public class RegisterationAction extends BaseAction {

private static final long serialVersionUID = -4767244117752570601L;

private String encoding = "UTF-8";

@Override
public boolean validateParameters() {
// TODO Auto-generated method stub
return true;
}

@Override
public void responseTerminal() {
ActionContext context = ActionContext.getContext();
HttpServletRequest request = (HttpServletRequest) context.get(ServletActionContext.HTTP_REQUEST);
HttpServletResponse response = (HttpServletResponse) context.get(ServletActionContext.HTTP_RESPONSE);
Map session = context.getSession();

ExecutedResult executedResult = this.getExecutedResult();
try {
OutputStream out = response.getOutputStream();
byte[] cmdBytes = "Cmd=".concat(executedResult.getCmd()).getBytes(encoding);
out.write(cmdBytes);//命令回写
out.write("&".getBytes(encoding));//分隔符

byte[] codeBytes = "Code=".concat(executedResult.getCode()).getBytes(encoding);
out.write(codeBytes);//状态回写
out.write("&".getBytes(encoding));//分隔符

byte[] descriptionBytes = "Description=".concat(executedResult.getDescription()).getBytes(encoding);
out.write(descriptionBytes);
// out.write("&".getBytes(encoding));//分隔符

out.flush();
// out.close();
} catch (IOException e) {
e.printStackTrace();
}catch(Exception e){
e.printStackTrace();
}
}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值