Struts基本原理解释(学习笔记)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ouyanggengcheng/article/details/77771348

最近在学习java ee开发,主要是看韩老师的视频,了解与学习Struts框架做了一些笔记记录下。虽然现在很流行Spring MVC,但是学习总是有个过程,弄明白了再去对比,接下来的学习当然也会去了解Spring MVC,从而去选择更适合的框架学习。对于Struts与Spring MVC的理解,简单一句话就是规范化MVC开发模式。


一、Struts原理图



二、Struts框架实例说明

1.先引包,分别是struts、servlet的jar包,下载地址https://pan.baidu.com/s/1nv9iK0T


2.写一个jsp页面,用登录为例

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="/StrutsDemo/login.do" method="post">
用户名:<input type="text" name="username"><br/>
密   码: <input type="password" name="password"><br/>
<button type="submit">登录</button>
</form>
</body>
</html>


3.写一个ActionForm类,用来存请求的数据

public class UserForm extends ActionForm {

/**
* 这里需要注意两点:
* 1.get与set的方法名必须是get+属性名、set+属性名,这个属性名必须与请求数据的属性名一致
* 2.get与set后的属性名第一个字母必须大写
*/

private String username;
private String password;

public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}

}


4.写Action,简单的servlet

public class UserAction extends Action {

/**
* 重写一个方法,execute这个方法有点类型与servlet中doGet、doPost方法
* 1.主要每次请求到了Action,则execute就会自动被调用
*/
@Override
public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request,
HttpServletResponse response) throws Exception {
// TODO Auto-generated method stub

UserForm userform = (UserForm)form;
UserServer userserver = new UserServer();

return mapping.findForward(userserver.CheckUser(userform.getUsername()));
}


}


5.再写两个jsp,登录成功与失败的页面

(1)welcome.jsp

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Insert title here</title>
</head>
<body>
欢迎您
</body>
</html>

(2)error.jsp

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Insert title here</title>
</head>
<body>
对不起,登录错误,请重新登录
</body>
</html>


5.struts-config.xml设置

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.3//EN" "http://struts.apache.org/dtds/struts-config_1_3.dtd">
<struts-config>
<!-- 配置表单actionform -->
<form-beans>
<!-- name表示表单的名字,一般是写表单类名的小写 -->
<!-- type表示表单的全路径,包名+类名 -->
<form-bean name="userform" type="com.struts.form.UserForm"/>
</form-beans>
<!-- 配置action -->
<action-mappings>
<!-- 配置具体的action -->
<!-- path表示将来访问action的uri,也就是资源名 -->
<!-- name则要与actionform的name一致,表示对应关联关系 -->
<!-- type表示该action的全路径,包名+类名 -->
<action path="/login" name="userform" type="com.struts.action.UserAction">
<!-- 配置action结果的跳转关系 -->
<!-- name表示action处理的结果名称,path则是根据结果转发的页面 -->
<forward name="ok" path="/WEB-INF/welcome.jsp" />
<forward name="error" path="/WEB-INF/error.jsp" />
</action>
</action-mappings>
</struts-config>


6.web.xml的设置

<servlet>
  <servlet-name>action</servlet-name>
  <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
  <!-- 配置struts-config的路径 -->
  <init-param>
  <param-name>config</param-name>
  <param-value>/WEB-INF/struts-config.xml</param-value>
  </init-param>
  </servlet>
  <servlet-mapping>
  <!-- 请求以.do结束的,都会进入这个ActionServlet -->
  <servlet-name>action</servlet-name>
  <url-pattern>*.do</url-pattern>
  </servlet-mapping>


7.代码层次




解释:

(1)浏览器输入用户名、密码,点击登录发送请求到web服务器

(2)web服务器通过web.xml找到ActionServlet,也就可以找到struts-config.xml的位置

(3)ActionServlet会带上资源路径,通过struts-config.xml先找到资源path,再通过path对应的name反射找到ActionForm,实例化把数据先存在表单,所以ActionForm实例化是由ActionServlet来做的,这里再解释一下为什么ActionForm的set与get方法名必须与html表单中的名字一样,因为ActionServlet就算通过set与get的方法名反射去找到html中的数据填充进来的,如果名字没有对应,ActionServlet是不知道数据填充到哪里去的。

也就是说:username与setUsername,ActionServlet是通过setUsername中的Username去找到username,然后把username的数据通过setUsername填充。有点绕,慢慢看清楚。

(4)然后ActionServlet再调用Action,Action拿到数据去调用server的验证

(5)server返回结果给Action,Action拿到结果给ActionServlet

(6)ActionServlet拿到这个结果,再去struts-config.xml查,看这个结果是ok、还是error,来决定跳转到什么页面

源码地址:https://pan.baidu.com/s/1o8ga8aQ


如果以上内容对你有用,麻烦把你微信会支付宝小数点右边的数值,贡献那么一点点意思意思是对我最大的支持。谢谢!



猜你喜欢

转载自blog.csdn.net/ouyanggengcheng/article/details/77771348