struts1快速入门案例和细节说明

Struts 百度百科:是Apache软件基金会(ASF)赞助的一个开源项目。它最初是Jakarta项目中的一个子项目,并在2004年3月成为ASF的顶级项目。它通过采用JavaServlet/JSP技术,实现了基于Java EEWeb应用MVC设计模式的应用框架,是MVC经典设计模式中的一个经典产品。

 

 

为什么有Structs?
因为我们对mvc的理解不同,可能造成不同公司写程序的时候,规范不统一,这样不利于程序的维护和扩展。

 

 

struts运行原理图:

 

 

快速入门小案例,用struts实现用户登录

步骤如下:


1.需要structs1开发包
2.写出login.jsp
3.编写ActionFrom(用户表单)和Action(小队长----登录小队长)
4.配置structs-config.xml文件
5.写出welcome.jsp和error.jsp页面
6.在web.xml中配置ActionServlet
7.开始使用我们的structs
8.structs中文乱码问题>过滤器

 

 

第一步:新建一个web项目

 

 

 

 

第二步:写出login.jsp、err.jsp、ok.jsp三个页面

login页面的表单代码如下

 

 

 

第三步:创建两个包actions和forms,和分控制器servlet、FormBean

 

 

 

第四步:编写FormBean和LoginAction的代码

 

 

package com.zjj.forms;

import org.apache.struts.action.ActionForm;
/**
 * 用户表单,用于action填充数据
 * @author 
 *
 */
public class UserForm extends ActionForm{

	//属性名有一个规范,属性名要和jsp页面的控件名一样
	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;
	}
	
	
}


 

package com.zjj.actions;

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 com.zjj.forms.UserForm;

/**
 * 登录action分控制器
 * @author 
 *
 */
public class LoginAction extends Action{

	
	//重写一个方法
	//execute会被自动调用,类似于Servlet中的service()方法
	@Override
	public ActionForward execute(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {
		//把form转换成对应的UserForm对象
		UserForm userForm=(UserForm)form;
		request.setAttribute("userName", userForm.getUserName());
		System.out.println("用户名:"+userForm.getUserName());
		if("123".equals(userForm.getPassword())){
			return mapping.findForward("ok");
		}else{
			return mapping.findForward("err");
		}
		
		 
	}

	
	
	
	
}


 

 第五步:配置struts-config.xml文件

 

第五步:配置WEB-INF目录下的web.xml文件

 

 

这样就写完了一个struts版本的登录,但是存在一个中文乱码问题,在action中用request.setCharactEncoding("utf-8");不管用,因为先把数据填充到表单bean后才来调用action,要在填充的时候防乱码处理,所以这时候需要用到过滤器。

 

 

接下来示范如何配置一个过滤器

1.创建一个包然后新建一个过滤器Servlet

 

 

2.实现javax.servlet.Filter接口,重写接口的方法

 

package com.zjj.filters;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class EncodingFilter extends HttpServlet implements Filter {

	public void doFilter(ServletRequest arg0, ServletResponse arg1,
			FilterChain arg2) throws IOException, ServletException {
		// TODO Auto-generated method stub
		arg0.setCharacterEncoding("utf-8");    //设置编码方式
		//arg1.setContentType("")
		arg2.doFilter(arg0, arg1);             //继续前进   
	}

	public void init(FilterConfig arg0) throws ServletException {
		// TODO Auto-generated method stub
		
	}

	
	

}



3.配置web.xml文件

 

 

 

 

这样配置好了过滤器以后每一次请求servlet都会经过过滤器转换成中文,在填充FormBean前解决了中文乱码问题。

 

 

 

 

接下来是Servlet的一些细节:

 

 


疑问:表单bean的属性名是不是一定和控件名一样?

答:不一定,属性名不一样也能通过,但是get和set方法名字要和控件名对得上。get和set名首字母大写。


分控制器action和表单bean有对应关系,需要我们自己维护,要到structs-config.xml文件中配置action和actionForm和对应关系,跳转位置,一般放在web-inf目录下

 

mapping.findForward("")是转发,所以存到request中的属性能够在jsp页面得到

 

 

 

 

 

 


struts1的缺点:每个action都是单态,高并发时压力大,2.0会改进。    单态是指:在整个程序运行过程中,始终是一个对象。


struts-config文件路径:不一定非要放在web-inf,可以自己放置

 

问答题:在一个项目中,可不可以有多个struts-config配置文件呢?
答:可以有多个struts-config.xml文件,在web.xml中的配置如下:

 

 

 

多个路径参数值用逗号隔开。

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值