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

xiaoxiao2021-02-28  89

最近在学习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

转载请注明原文地址: https://www.6miu.com/read-73750.html

最新回复(0)