web框架-Struts开始

问题:

为什么有structs

作为一种框架(frameset)可以与传统的mvc进行比较?

MVC是一种模式数据处理、显示和数据输入分开,来规范开发,但是却又并不规范。可以这样想:有三家公司,他们对于MVC有自己的理解和编写方式所以编写的方式却又并不相同,这样structs应运而生。

Structs是一种基于MVC的规范来进行开发。这样再编程的过程中可以发现:

1.程序规范化了 

2.程序编写效率高 

3.程序同时可维护性提高且可读性增强。

但我们可以根据任何事物不能完全的原则,所以这样的方法也有缺陷,这里就不细说了。

简单的提以下几点供读者考虑:

 

下面是struts的关键点:

struts如果仅仅只是会用工具然后点击生成,那样只能叫“点”过,不能叫学过。

任何程序开发需要明白流程,只有真正的原理才能在使用工具时明白底层的调用关系,在后续的遇到一些需要“真功夫”时才能拿得出手。

 

整个用structs进行测试的开发步骤(注:整个程序考虑是struts1.3.10  struts2在此基础上改进):

1.建立工程

2.引入jar包

3.建立登录login.jsp提交相应的数据表单

4.编写actionform和action(关于login)

5.编写struct-config.xml 用于配置actionform对应关系和跳转的位置

6.编写跳转成功页面wel.jsp和失败页面error.jsp

7.配置web.xml进行配置关键的actionservlet

8.进行测试

 

核心代码:

1.跳转到主界面:index.jsp (这样具有更好的保密性)

 

2.登录界面login.jsp

3.增加表单actionform

 1 package com.ly.forms;
 2 
 3 //用户表单,用于填充数据
 4 import org.apache.struts.action.ActionForm;
 5 
 6 public class UserForm extends ActionForm {
 7 
 8     //属性定义(规范与jsp中的控件名一样)
 9     private    String  username; 
10     private String passwd;
11     
12     public String getUsername() {
13         return username;
14     }
15     public void setUsername(String username) {
16         this.username = username;
17     }
18     public String getPasswd() {
19         return passwd;
20     }
21     public void setPasswd(String passwd) {
22         this.passwd = passwd;
23     }
24     
25 }

4.表单对应的action

package com.ly.actions;
//这是一个action 需要继承action
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.ly.forms.UserForm;

public class LoginAction extends Action {

    //execute可被自动调用 类似servlet dopost()方法
    
    public ActionForward execute(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {
        // TODO Auto-generated method stub
        
        //把form强转成对应的userform类
        UserForm userform=(UserForm)form;
        
        System.out.println("用户名="+userform.getUsername()+"密码="+userform.getPasswd());
        //return super.execute(mapping, form, request, response);

        //简单验证
        if(userform.getPasswd().equals("123"))
        {
            //把用户名放到request 对象域中
            request.setAttribute("username", userform.getUsername());
            
            //密码123是合法用户mapping 是直接返回actionServlet
            return mapping.findForward("ok");
        }
        else
        {
            return mapping.findForward("err");
        }
    }

    //需要重写一个方法
    
}

5.添加struts配置文件

<?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>
<!-- name 表单名字随意 (小写)  -->
<!-- type是表单的全路径 -->
<!-- 配置struts 中action 与actionForm的关系 -->
<form-bean name="userForm" type="com.ly.forms.UserForm"/>
</form-beans>

<action-mappings>
<!-- 配置具体 action        其path:表示将来访问url -->
<!--name: action与对应 actionForm的对应-->
<!-- path:action全路径 -->
<action path="/login" name="userForm" type="com.ly.actions.LoginAction">
<!-- 这里配置跳转关系 -->

<!-- name是结果名称    path是转发页面 -->
<forward name="ok" path="/WEB-INF/wel.jsp"/>
<forward name="err" path="/WEB-INF/error.jsp"/>
</action>
</action-mappings>
</struts-config>

6.(省略wel.jsp 和error.jsp 只需简单写写就行必要时再添加)

进行web配置 web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" 
    xmlns="http://java.sun.com/xml/ns/j2ee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
    http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
  <!-- 配置structs -->
  <!-- 用actionServlet控制 -->
  <servlet>
  <servlet-name>action</servlet-name>
  <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
 <!-- 指明  配置文件  strcts-config路径 -->
 <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>
  <url-pattern>*.do</url-pattern>
  </servlet-mapping>
 
 
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>

 

struts配置细节

一个简单的登陆测试

下面是流程的截图(仅供参考):

 

actionServlet进行了实例化对象(反射机制),这样才能对表单进行添加数据(actionform

注意 表单中的setget方法

通过actionservlet来明细整个流程会对整个流程更加清晰

 

考虑:在此基础上增加在成功界面显示登录者的用户名

但是会出现中文乱码问题(在wel.jsp中添加语句并不会有太多的用 考虑:整个流程在actionservlet中已然已经把数据添加到表单了)

(考虑使用过滤器)--记得在web.xml配置过滤器

 主要代码:

package com.ly.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 MyFilter1 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");  //设置接收编码
		
		arg2.doFilter(arg0, arg1);  //必须(否则停止前进)
		
		arg1.setContentType("/text/html;charset=utf-8");
	}

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

}

 

在web.xml中添加  

效果:

以上仅是一个小的demo 仅供学习。

 

  日进一小步,月过一大步~~加油!!

posted @ 2016-04-14 19:20  代码小逸  阅读(807)  评论(0编辑  收藏  举报