struts1框架基本(笔记)

在阿帕奇官网下载合适的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 {
	@Override
	public ActionForward execute(ActionMapping mapping,ActionForm form,
			HttpServletRequest request,HttpServletResponse reponse) throws Exception {
		User user = (User)form;//form中数据就是自动创建的User
		if(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设置

  1. 首先检测到以".do"(web.xml中设置的)结尾的URL,然后会在<action-mapping>中的<action>寻找找相同的字段(".do"之前字段)。
  2. 随后通过name寻找相同的<form-bean>name,然后通过type的路径,找到JavaBean对象。然后将值自动输入,得到的类以ActionForm form形式返回。
  3. 然后继续<action-mapping>,通过type找到Servlet。将设置<action>中设置以ActionMapping mapping输入,将创建的JavaBeanActionForm form输入。其余两个参数同原来的Servlet一致。
  4. scope用于限定创建的ActionForm的范围,于JavaWeb一致。
  5. 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>

修改之后,记得重启服务器。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值