Struts学习第一天

  实现一个简单的加法运算.  自己写的一个类struts的框架.便于更好的理解struts的实现原理.

 

第一步: 由于struts把所有的请求都交给了一个核心控制器,   所以我们也定义了一个核心控制器Controller

package org.servlet;

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

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

import org.action.Action;
import org.action.addAction;

public class Controller extends HttpServlet {

private static final long serialVersionUID = 1L;
Map<String, Action> map;

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

@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// 得到请求路径
String urlStr = req.getServletPath();
urlStr = urlStr.substring(urlStr.lastIndexOf("/")+1, urlStr.length() - 3);
System.out.println(urlStr);
// 得到具体的action
Action action = map.get(urlStr);
// 跳转
if (action != null) {
req.getRequestDispatcher(action.exec(req, resp)).forward(req, resp);
}
}

@Override
public void init() throws ServletException {
map = new HashMap<String, Action>();
map.put("add", new addAction());
}

}

第二步:接着我们在web.xml配置所有的请求都交给这个 Servlet处理.

<servlet>
<servlet-name>Controller.do</servlet-name>
<servlet-class>org.servlet.Controller</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Controller.do</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>


 

第三步:定义一个action的接口用来描述我们的操作

package org.action;

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

public interface Action {
/**
* 接口
*
* @return
*/
public String exec(HttpServletRequest request, HttpServletResponse response);
}


第四步: 实现Action接口

package org.action;

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

import org.biz.testBiz;

import com.sun.corba.se.impl.orb.ParserTable.TestBadServerIdHandler;

public class addAction implements Action {

@Override
public String exec(HttpServletRequest request, HttpServletResponse response) {

testBiz test = new testBiz();
int num = test.addTest(Integer.parseInt(request.getParameter("num1")),
Integer.parseInt(request.getParameter("num2")));
request.setAttribute("num", num);
return "test.jsp";
}
}
第五步:在biz里面写具体的加法逻辑.

package org.biz;
public class testBiz {

public int addTest(int num1, int num2) {
return num1 + num2;
}
}


现在详细说明相关实现细节:
 
a.Controller这个核心控制里,我们首先获取了请求的url:

String urlStr = req.getServletPath();
urlStr = urlStr.substring(urlStr.lastIndexOf("/")+1, urlStr.length() - 3);

 我们根据这个url当作了Map的key 去找相应的action, 如果找到我们就调用相应的方法实现加法.

 在这里如果我们请求的url为:add.do那么Action action = map.get(urlStr); sction就不为空,我们在servlet的init()的方法里面定义的map 新建了一个addAction对象

public void init() throws ServletException {
map = new HashMap<String, Action>();
map.put("add", new addAction());
}

得到action后我们就可以调用相应的方法.






 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值