首先Struts1架包不要下成Struts2的架包,刚开始研究就下错了这里附带架包的链接
链接:https://pan.baidu.com/s/1MjVxLHe7LEMOUReiiGDh8A
提取码:ssau
或者去struts的官网下载【下载地址】
demo路径如下
首先创建两个类,具体代码如下
package com.yfxr.domain;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
public class LoginAction extends Action {
@Override
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
//将传进来的ActionForm对象向下转型,获得数据
LoginForm user = (LoginForm) form;
String userName = user.getUserName();
System.out.println(userName);
String password = user.getPassword();
System.out.println(password);
//判断登录结果,并响应给Action
if("zhang".equals(userName) && "123".equals(password))
return mapping.findForward("sucess");
else
return mapping.findForward("fail");
}
}
LoginForml类必须继承ActionForm类,不然得不到form表单中的值
在这个类中,我们需要重写一个方法:excute
。这个方法会处理业务逻辑,会自动调用,它有点类似于Servlet中的service方法,或者doGet/doPost方法。
package com.yfxr.domain;
import org.apache.struts.action.ActionForm;
public class LoginForm extends ActionForm {
private static final long serialVersionUID = 1L;
private String userName;//接收表单数据,字段名必须与表单一致
private String password;
private String msg;//返回错误信息
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
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;
}
}
<1>.一般的规范:定义属性名称的时候应该和jsp页面的控件名称一样。
<2>.但其实,属性的名称并非一定要一致,而真正要保持一致的是setter和getter方法。也就是说,如果你在jsp中定义的控件名称为username和password,那么setter方法的名称一定是setUsername和setPassword,同理,getter方法的名称一定是getUsername和getPassword。属性可以换其他的名字,但是这几个方法的名称一定要固定格式:get/set+控件名称并且首字母大写
<3>.但我们遵守一般的规范最好。
<4>.ActionForm一定要按照上述规范写好,才能保证数据能够正确填充,才能保证work
之后配置 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框架的配置文件 -->
<struts-config>
<form-beans>
<!-- 该标签作用是填充数据,type是指定接收表单提交数据的类全称 -->
<form-bean name="loginForm" type="com.yfxr.domain.LoginForm"></form-bean>
</form-beans>
<!-- Action的映射 -->
<action-mappings>
<!-- 配置一个Action,该Action的作用就是验证登录信息 -->
<!-- path相当于该Action对外访问的虚拟路径 -->
<!-- type是该Action所对应的类(相当于一个真实路径)" -->
<!-- name的作用是指明总控制器跳转到指定Action所需携带的数据 -->
<action path="/login" type="com.yfxr.domain.LoginAction" name="loginForm">
<!-- 用于Action处理接收到的"后台"响应 -->
<forward name="sucess" path="/success.jsp"></forward>
<forward name="fail" path="/failuer.jsp"></forward>
</action>
</action-mappings>
</struts-config>
主要的login.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>
<form action="login.do" method="POST">
用户名:<input type="text" name="userName" >
密 码:<input type="password" name="password">
<input type="submit" value="提交">
</form>
</body>
</html>
其中还有两个登入成功和失败的页面比较简单直接省略
最后配置web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
<display-name>struts</display-name>
<welcome-file-list>
<welcome-file>login.jsp</welcome-file>
</welcome-file-list>
<!-- 配置总控制器 -->
<servlet>
<servlet-name>Action</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
<!-- 配置初始化参数,内容为管理调度总控制器中Action的属性文件 -->
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
</servlet>
<!-- 配置总控制器对外的映射路径 -->
<servlet-mapping>
<servlet-name>Action</servlet-name>
<!-- 只有.do类型的请求才需要转到ActionServlet总控制器中 -->
<url-pattern>*.do</url-pattern>
</servlet-mapping>
</web-app>
借鉴:https://blog.csdn.net/gavin_john/article/details/51730093