通过servlet 推理struct框架实现

1.简单的servlet可以实现直接的页面与后台数据的交互,但是对于我们复杂系统来说这是远远不够的,它存在很多的弊端,在此不详细叙说,那么我们首先看一个简单例子:

package com.cai.szpl.servlet;


import java.io.IOException;


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


public class userServlet extends HttpServlet{


@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//获取页面参数
String username = request.getParameter("user_name");
//获取uri进行具体业务控制
String uri = request.getRequestURI();
//根据servlet配置截取我们的业务相关字符串 http:localhpst:8080/struectWeb/servlet/*
String path =uri.substring(uri.indexOf("/", 1),uri.lastIndexOf("."));
String forward = "";
UserManger userManger = new UserManger();
if("/servlet/addUser".equals(path)){
userManger.addUser(username);
//业务处理
forward = "addSuccess.jsp";
}else if("/servlet/delUser".equals(path)){
userManger.delUser(username);
forward = "delSuccess.jsp";
}//后面具体业务延续
request.getRequestDispatcher(forward).forward(request, response);

}


@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
      
}

//从上面代码中我们可以很清楚得知servlet的缺点,那么我们进行改造,我们实现一个接口,通过实现此接口进行不同页面的跳转及业务处理,进行改造

protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//获取页面参数
String username = request.getParameter("user_name");
//获取uri进行具体业务控制
String uri = request.getRequestURI();
//根据servlet配置截取我们的业务相关字符串 http:localhpst:8080/struectWeb/servlet/*
String path =uri.substring(uri.indexOf("/", 1),uri.lastIndexOf("."));
String forward = "";
UserManger userManger = new UserManger();
/*if("/servlet/addUser".equals(path)){
userManger.addUser(username);
//业务处理
forward = "addSuccess.jsp";
}else if("/servlet/delUser".equals(path)){
userManger.delUser(username);
forward = "delSuccess.jsp";
}//后面具体业务延续
request.getRequestDispatcher(forward).forward(request, response);*/
Action action = null;
if("/servlet/addUser".equals(path)){
//业务处理
action = new AddUserAction();

}else if("/servlet/delUser".equals(path)){
action = new DelUserAction();
}//后面具体业务延续
request.getRequestDispatcher(action.execute(request, response)).forward(request, response);

}

这样虽然我们精简了代码及分开处理业务,但是这样仍然不够灵活,那么我们就会想到我们xml配置,在这里我们约定一个标准比如

<action-config>
   <action path="/servlet/addUser" type="com.cai.szpl.AddUserAction" >
     <forward name="success">/addSuccess.jsp</forward>
     <forward name="error">/addError.jsp</forward>
   </action>

</action-config>

这样我们可以通过我们的约定进行参数的获取,我们通过我们的约定可以获取到我们的配置信息,此时我们想到了java中一个集合Map ,我们将path作为key,然后其他信息作为value,那么像type,forward等多个信息,我们可以封装为一个实体类

package com.cai.szpl.servlet;


import java.util.Map;


public class ActionMapping {
   private String path;
   private String type;

   private Map forward;//key 为xml 配置中 name value 为值

/**

forward : key --->name success value -->/addSuccess.jsp

**/

public String getPath() {
return path;
}
public void setPath(String path) {
this.path = path;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public Map getForward() {
return forward;
}
public void setForward(Map forward) {
this.forward = forward;
}
   
   

}

此时我们可以获取到map(path,actionMapping)这样的对象,然后我们通过path获取到对应的actionMapping,获取到actionMapping时,我们可以通过getType比如例子“com.cai.szpl.AddUserAction”,通过反射获取到我们 的具体的action实现,通过getForward()获取一个map,通过我们的业务逻辑通过key获取我们页面跳转这样我们就不用判断繁琐的业务及跳转。这样我们的就可以作为一个简单的MVC小框架了。那个此过程可以参考流程图


struct的简单时序图:




  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值