在阿帕奇官网下载合适的struts1框架文件。
应用在显示层框架。
struts1与struts2虽然是一脉相承,但它们用法完全不一样。
struts2是在struts1与webwork基础上,发展的全新框架。
注:本文是在MyEclipse下进行的操作,不是之前的Eclipse。
一、文件结构

app:示例程序,其中的war包放至tomcat可直接运行 。
docs:文档,里面有关于struts的各个组件的说明。
lib:Jar包,几乎很全,不需要自己在单独下载Jar包。
src:存放着源代码。
二、处理流程的改变

没有struts时,一般网页直接将请求发送给响应处理的Servlet页面,有页面进行处理。所有的JavaBean由我们自己在对应的位置创建。
struts框架下,将ActionServlet作为核心,它负责获取、分发URL,由Action调用模型,由Form接收数据并创建JavaBean的实例。
没有struts时的大致流程为:访问链接->寻找web.xml中mapping(或者@WebServlet("/"))是否匹配->通过配置初始化相应的Servlet后调用模型->返回。
struts的大致流程即为:访问链接->web.xml中mapping是否与ActionServlet匹配,匹配的话->ActionServlet->通过struts-config.xml调用action并将其初始化->action调用模型后返回ActionServlet。
三、配置struts文件
导入lib
如果没有spring框架,在自己编写时,建议不要将lib中所有的东西导入项目,以避免报错。可以从示例程序中复制相关jar包。
需要的jar包导入项目中WEB-INF的lib即可。记得通过BuildPath导入资源。

配置web.xml文件
类似servlet配置。别忘了设置编码格式。
可以直接复制其示例程序下的配置内容。通过<servlet-mapping>,使得与<url-pattern>匹配的URL,映射为<servlet>中拥有相同<servlet-name>的<servlet-class>路径。
<servlet><servlet-name>action</servlet-name><servlet-class>org.apache.struts.action.ActionServlet</servlet-class><init-param><param-name>config</param-name><param-value>/WEB-INF/struts-config.xml</param-value></init-param><load-on-startup>2</load-on-startup>
</servlet><servlet-mapping><servlet-name>action</servlet-name><url-pattern>*.do</url-pattern></servlet-mapping>
即凡是通过*do访问的,都会通过action这个名称,被修改为访问org.apache.struts.action.ActionServlet这个地址。
<init-param>为该servlet的初始化设置。
<param-name>为变量名。
<param-value>为变量值,此处是用struts-config.xml进行初始化
<load-on-startup>为服务器启动时,该servlet的初始化顺序。(不设置时,就只有访问时会被初始化)
拷贝struts-config.xml
将示例程序中直接struts-config.xml拷过去。别忘了设置编码格式。

可以这样打开

将多余的配置删除

四、用struts完成登录
准备三个页面,一个用于输入用户名密码,另外两个作为登录成功或失败的结果页面。
准备一个JavaBean用于封装登录用的数据,他需要继承ActionForm。(如果没有找到,则需要通过右键选择BuildPath构建路径)
准备一个Servlet,为了省事,目前将业务逻辑也写在里面。
登录主页:index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@page import="JavaBean.Note" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><base href="<%=basePath%>"><title>My JSP 'index.jsp' starting page</title><meta http-equiv="pragma" content="no-cache"><meta http-equiv="cache-control" content="no-cache"><meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"><meta http-equiv="description" content="This is my page"><!--<link rel="stylesheet" type="text/css" href="styles.css">--></head><body><form action="Login.do" method="post">用户:<input type="text" name = "uname"></br>密码:<input type ="password" name = "pwd"><br/><input type = "submit" value = "登录"></form></body>
</html>
JavaBean部分:User.java
继承ActionForm后,就可以自动赋值。但需要name名和setName的名称一致(格式也是),其它和之前没差别。
package JavaBean;
import org.apache.struts.action.ActionForm;
public class User extends ActionForm {private static final long serialVersionUID = 1L;//Action序列号private int uid;private String uname;private String uimage;private String pwd;public int getUid() {return this.uid;}public String getUname() {return this.uname;}public String getUimage() {return this.uimage;}public String getPwd() {return this.pwd;}public void setUid(int UID) {this.uid = UID;}public void setUname(String UNAME) {this.uname = UNAME;}public void setUimage(String UIMAGE) {this.uimage = UIMAGE;}public void setPwd(String PWD) {this.pwd = PWD;}
}
Servlet部分:User Login
此处制作了控制层,因而并未连接数据库,而是直接对比。若需要连接,可查看之前代码。
package Service;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;import JavaBean.User;public class UserLogin extends Action {@Overridepublic ActionForward execute(ActionMapping mapping,ActionForm form,HttpServletRequest request,HttpServletResponse reponse) throws Exception {User user = (User)form;//form中数据就是自动创建的Userif(user.getPwd().equals("123") && user.getUname().equals("123")){//request.getRequestDispatcher("success").forward(request, reponse);return mapping.findForward("success");}else {//request.getRequestDispatcher("fail").forward(request, reponse);return mapping.findForward("error");}}
}
struts-config设置
- 首先检测到以".do"(web.xml中设置的)结尾的URL,然后会在<action-mapping>中的<action>寻找找相同的字段(".do"之前字段)。
- 随后通过name寻找相同的<form-bean>中name,然后通过type的路径,找到JavaBean对象。然后将值自动输入,得到的类以ActionForm form形式返回。
- 然后继续<action-mapping>,通过type找到Servlet。将设置<action>中设置以ActionMapping mapping输入,将创建的JavaBean以ActionForm form输入。其余两个参数同原来的Servlet一致。
- scope用于限定创建的ActionForm的范围,于JavaWeb一致。
- 在Servlet中,通过findForward找到name所对应的path,返回,就可以通过请求转发的方式抵达下一个网站。
<?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><form-beans><form-bean name="User" type="JavaBean.User"/></form-beans><action-mappings><action path="/Login"name = "User"type="Service.UserLogin"scope = "request"><forward name="success" path="/success.jsp"/><forward name="error" path="/fail.jsp"/></action></action-mappings>
</struts-config>
修改之后,记得重启服务器。

















