struts原理:
在一个servlet中实现多个功能
分层次:
dao层增删改查操作
Biz层调用dao层的操作完成需求
action层调用Biz层完成某种操作
本例采用MVC的开发模式
M-Model javaBean以及对javabean的操作
V—View视图,jsp/Html
C-control,Servlet
servlet的作用:
请求数据封装数据
调用service处理业务逻辑
跳转
struts的原理是采用mvc的开发模式把ervlet的业务逻辑抽取出来,并利用配置文件进行全局控制,实现一个servlet对多个action的操作。
struts.xml:
<?xml version="1.0" encoding="UTF-8"?>
<package>
<action name="login" class="framwork.action.LoginAction" method="excute">
<result name="loginSuccess">/success.jsp</result>
<result name="loginFail">/fail.jsp</result>
</action>
<action name="register" class="framwork.action.RegisterAction" method="execute">
<result name="">/success.jsp</result>
</action>
</package>
解析xml文件的帮助类actionManager
这里写代码片
实体层:把配置文件设置成两个javabean对象
public class Result {
public String resultName;
public String resultPage;
...
public class ActionMapping {
public String actionName;
public String actionClass;
public String actionMethod;
...
servlet层:调用action层的方法,获取该方法返回值,跳转到指定页面
//第一步:获取那个Uri
String reqUri=req.getRequestURI();
//第二步:取出那个login出来
String actionName = reqUri.substring(reqUri.lastIndexOf("/")+1,reqUri.indexOf(".action"));
//第三步:通过名字吧ActionMapping找到
ActionMapping actionMapping = manager.getActionMapping(actionName);
//第四步:通过ActionMapping找到类
String actionClassName=actionMapping.getActionClass();
//第五步:通过类的名字 通过反射创建对象
Class clazz=null;
String returnValue=null;
try {
//通过类的全路径获取类的字节码对象
clazz=Class.forName(actionClassName);
//通过字节码对象创建类的对象
Object obj=clazz.newInstance();
//第六步:获取方法的名称
String methodName=actionMapping.getActionMethod();
//第七步:通过类的对象获取里面的方法
Method method = clazz.getMethod(methodName,HttpServletRequest.class,HttpServletResponse.class);
//第八步:调用方法给我返回数据
returnValue=(String) method.invoke(obj, req,resp);
} catch (Exception e) {
e.printStackTrace();
}
//第九步:通过返回值找到ActionMapping中对应的那个页面
Result result = actionMapping.getResult().get(returnValue);
//第十步:通过result找到这个页面 进行跳转
String resultPage = result.getResultPage();
System.out.println(resultPage);
//第十一步:跳转
resp.sendRedirect(req.getContextPath()+resultPage);
action层:请求数据,获取传入值,调用biz层
//1、请求数据
request.getParameter("");
//2、set数据
User user = new User();
//3、访问数据库
try {
//登陆成功
userBiz.login(user);
return "loginSuccess";
} catch (Exception e) {
//登录失败
return "loginFail";
}
Biz层:
public interface UserBiz {
User login(User user);
boolean register(User user);
}
dao层:对数据库进行增删改查的操作
public interface IUserDao {
User findUserExitsOfNot(User user);
boolean saveUser(User user);
}
结论:使用struts框架,可以不用每个action斗创建一个servlet,编写的代码量变少了。