zoukankan      html  css  js  c++  java
  • 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 仅供学习。

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

  • 相关阅读:
    js中eval详解
    javascript数组操作大全
    JavaScript面向对象编程深入分析
    IBatisNet系列二QuickStart篇
    IBatis.Net系列Mapped Statements的语法
    MonoRail学习-入门实例篇
    IBatisNet系列执行存储过程
    IBatis.Net系列多参数的SQL语句的配置
    Castle Startable Facility 简单理解
    wxPython创建系统托盘
  • 原文地址:https://www.cnblogs.com/ly199553/p/5392349.html
Copyright © 2011-2022 走看看