Struts 1.3学习总结(1)

用了三天时间,把struts 1.3学习了一遍,为的是能加快我以后开发J2EE项目的速度。之前开发J2EE项目,我采用的都是MVC开发模式,页面显示用JSP,控制器用Servlet,业务层用普通java类来实现。这样的模式我用了大概两年,也开发了几个系统。在对这个模式熟悉了以后,并且熟悉了servlet的关键类和主要的方法,我决定学习一些web开发的框架,为以后的开发加速。

三天的学习只是把struts学了个大概,期间写了几个小的例子。现在将学习中遇到的问题总结如下:

1. struts的几个基本概念

①struts是一个基于MVC模式的web框架

②struts的好处:程序更加规范化,开发效率提高了,程序的可读性增加,可维护性增加

③struts不足:form表单;action是单态的(对网站并发性的处理有影响,struts 2中解决了该问题)

④框架提高了程序规范的同时,也约束了程序员的自由


2. struts的运行原理:

以一个用户登录来解释struts的运行原理

ActionServlet(总控制器/总司令):控制着struts-config.xml(该文件配置了ActionForm表单,还配置了Action小队长,以及它们之间的对应关系),这是struts的一个核心文件。由struts框架提供,我们自己不需要写,只需要配置。

ActionForm(表单/军火库):用于存放数据

Action(分控/小队长):小队长可以有多个,其本质是一个servlet。一个Action可以没有ActionForm,如果有,只能有一个,不能有两个或多个。

ActionForm和Action是有对应关系的

model(java类):service 士兵


向服务器发出http请求:

①解析主机

②解析web应用

③解析资源名

④将请求转发给ActionServlet。如果不用struts,请求将会直接转发给servlet。这是因为在web.xml文件中配置了ActionServlet

⑤当ActionServlet拿到请求,就去查询struts-config.xml文件,去填充数据,把用户传递的数据填充到表单中

⑥ActionServlet调用指定的Action,同时把表单实例传入execute方法中

⑦Action从表单中去读取数据

⑧Action调用某个model完成任务

⑨model将执行结果返回给ActionServlet

⑩ActionServlet根据返回的结果,去查struts-config.xml文件,决定跳转到哪个jsp页面


3. struts快速入门案例(用户登录系统来演示)

第一个struts项目,我们先使用手动配置开发的方式,步骤如下:

①先创建一个web工程

②将struts开发包导入到web工程

③编写login.jsp

④编写ActionForm和Action,ActionForm和Action是有对应关系的

a. 表单类必须继承ActionForm才是一个表单

b. 在ActionForm中,属性的名字最好和jsp页面的控件名字name一样。实际上不一样也是可以的,但是set/get方法的名与控件名存在关联即可。例如控件名是username,那么set方法一定要是setUsername(注意大写),而属性名可以是name,但是为方便起见,属性名一般也写成username


c. 写Action的时候,需要继承Action类,注意重写execute方法,execute会被自动调用,有点类似servlet的doGet/doPost方法

⑤配置struts-config.xml文件,该文件用于配置ActionForm和Action的对应关系、跳转位置。一般来说,struts-config.xml文件放在/WEB-INF目录下

⑥写welcome.jsp和error.jsp页面

⑦在web.xml 中配置ActionServlet

⑧开始我们第一个struts项目

注意:在配置的工程中,配置文件中path属性,都要以"/"开头


4. 使用filter配置struts,完成中文乱码过滤的问题

新建一个servlet,并且实现Filter接口,核心代码如下:

public class EncodingFilter extends HttpServlet implements Filter {

	String encoding = "";
	
	public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain filterChain) throws IOException, ServletException {
		// TODO Auto-generated method stub
		request.setCharacterEncoding(encoding);
		filterChain.doFilter(request, response);
	}

	public void init(FilterConfig filterConfig) throws ServletException {
		// TODO Auto-generated method stub
		encoding = filterConfig.getInitParameter("encoding");
	}

}
在web.xml文件中配置如下:

<filter>
  <filter-name>EncodingFilter</filter-name>
  <filter-class>com.hh.filter.EncodingFilter</filter-class>
  <init-param>
  <param-name>encoding</param-name>
  <param-value>utf-8</param-value>
  </init-param>
</filter>
<filter-mapping>
 <filter-name>EncodingFilter</filter-name>
 <url-pattern>/*</url-pattern>
 </filter-mapping>
<param-name>encoding</param-name>
  <param-value>utf-8</param-value>

这两句话是用来配置编码格式的,encoding参数的值,可以再filter中通过init方法得到。

如果在一个项目中有多个filter,那么,在web.xml中配置是有顺序的,先起拦截作用的filter是要先配置的


注意:

①struts-config.xml文件中,action中scope属性,默认是session

②每个Action都是单态的,包括ActionServlet也是单态的。所谓单态,是指在整个程序运行的过程中,始终是一个对象

③struts-config.xml文件不一定非要放在/WEN-INF目录下。新的路径,只要在web.xml中修改即可:

<param-value>/WEB-INF/struts-config.xml</param-value>

④在一个项目中,可以有多个struts-config.xml文件,只需要在web.xml文件中配置:

<param-value>/WEB-INF/struts-config.xml,/WEB-INF/struts-config2.xml</param-value>



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值