zoukankan      html  css  js  c++  java
  • web基础之Structs(一篇)

        

                                        struts             

    Struct 的优点之处:

    1. 1.       struct的好处
    2. 2.       程序更加规范化
    3. 3.       程序的可读性提高了
    4. 4.       程序的 可维护性增加了

    Struct 的不足之处:
    1. From
    表单有点鸡肋

    2.action是单态(对网站并发性的处理有影响)

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

     

    Structs 为什么有?

    因为我们对mvc的理解不同,可能造成不同的公司写程序的时候,规范不统一,这样不利于程序的维护和扩展…..,所以我们有必要用一个统一的规范来开发项目。

    ——à框架 structs

     Structs的运行原理:

      我以一个用户登录来讲解原理---------->图解

     手写版structs的登录系统

    1. 1.       在开发structs时候,需要structs开发包
    2. 2.       先写出login.jsp
    3. 3.       编写ActionFrom和Action
    4. 4.       配置

     

    步骤:

    (1)      先创建一个web工程。

    (2)      把structs开发包引入到web工程

    (3)      编写login.sp

    (4)      编写ActionFrom(用户表单)和Action(小队长)--à登录小队长

     1   //这是一个用户表单,用户填充数据的。
     2 
     3 public class UserForm extends ActionForm{
     4     /*
     5      * 定义属性[这个有一个规范,就是我们定义的属性名字 
     6      * 到时候,应该和jsp页面的控件名称一样,如果有人提出疑问:
     7      * 说表单的属性名字是不是一定和控件名一样。]
     8      * */
     9     
    10     private String username ;
    11     private String password ;
    12     
    13 public String getUsername() {
    14         return username;
    15     }
    16     public void setUsername(String username) {
    17         this.username = username;
    18     }
    19     public String getPassword() {
    20         return password;
    21     }
    22     public void setPassword(String password) {
    23         this.password = password;
    24     }
    25 }
    View Code

    (1)      编写struts-config.xml文件,该文件用于配置action  action From对应的关系.跳转位置……一般我们放在/WEB-INF目录下。

    (2)      编写welcom.jsp和error.jsp

    (3)      配置web.xml文件,该文件用于配置ActionServlet

    (4)      测试

    Struts细节:

    注意表单中的set,get命名(规范)

    如何解决struts中文乱码问题:?

      1. 1.       添加过滤器(Filter)解决中文乱码问题
      2. 2.       步骤如下:
        开发一个过滤器,并设置request.setcharacterEncoding(“utf-8”);
     1 public void doFilter(ServletRequest arg0, ServletResponse arg1,
     2             FilterChain arg2) throws IOException, ServletException {
     3         // TODO Auto-generated method stub
     4            arg0.setCharacterEncoding("utf-8"); //设置接收编码
     5            arg2.doFilter(arg0, arg1);
     6     }
     7 Web.xml配置文件:
     8 <filter>
     9   <filter-name>Znfilter</filter-name>
    10   <filter-class>com.gxjun.filter.Znfilter</filter-class>
    11   </filter>
    12 <filter-mapping>
    13 <filter-name>Znfilter</filter-name>
    14  <!-- 对所有的进行过滤 -->
    15  <url-pattern>/*</url-pattern>
    16 </filter-mapping>

    工具版Struts的登录系统:

    1. 1.       用工具引入struts包和配置文件,然后自己配置struts-config.xml,完成开发

    步骤:

    1. a.       点击finish,就会自动的引入struts   开发包和自动生成struts-config.xml和web.xml文件并完成一些配置。
    2. b.      开发login.jsp
    3. c.       开发action和actionForm
    4. d.      手动配置struts-config.xml
    5. e.       开发ok.jsp和err.jsp
    6. f.        测试
    7. g.       从上面的开发过程,可以提高我们的开发效率

     

     

     

    1. 1.       完全依赖MyEclipse提供的工具完成struts开发。(以用户登录验证来举例)
      1. a.       创建web工程
      2. b.      引入struts工具包
      3. c.       开发login.jsp
      4. d.      开发action和actionForm
    2.  关于jsp的标签技术:

         Jstl :(jsp standard libaray) jsp 表征标签库。

        为什么有?

         在做一个系统的时候,我们的jsp文件中有大量的<%  %>

      Java片段,jsp中的html标签+jsp标签+java片段,导致jsp很乱

        问题的提出:   能不能把<%  %>java片段用标签来替换 —>jsp页面就简洁。

         解决之道:->jsp  好处

      1. 1.     在应用程序服务器之间提供统一的接口,从而提供了web应用在不同的服务器的移植。
      2. 2.     简化jspweb应有程序的开发。
      3. 3.     减少jspjava片断的代码(script 代码),可以达到在jsp页面中没有任何java代码,代码更加简洁。
      4. 4.     提高jsp开发速度,缩短开发周期。
    3. 实例:Struts版本的用户管理系统:

      需求:

      a.完成对用户的crud操作。

      b.界面设计.

      c.开发

      d.根据界面来设计数据库和表

       

      1. 1.    为什么需要DispatchAction

       

      1. 2.       快速入门

      步骤:

      1. 1.       创建web工程
      2. 2.       引入struts
      3. 3.      

            全局跳转:

       

       1   <action
       2 
       3       attribute="usersForm"
       4 
       5       input="/WEB-INF/ok.jsp"
       6 
       7       name="usersForm"
       8 
       9       parameter="Gxjun"
      10 
      11       path="/loginAndLogout"
      12 
      13       scope="request"
      14 
      15       type="com.gxj.struts.action.LoginAndLogoutAction"
      16 
      17       cancellable="true">
      18 
      19       <!-- 如果一个forward写在action的标签中,则说明是局部跳转 -->
      20 
      21       <forward name="err" path="/WEB-INF/Login.jsp" />
      22 
      23       <forward name="ok" path="/WEB-INF/ok.jsp" />
      24 
      25     </action>
      26 
      27   如果想要全局跳转
      28 
      29   <forward name="go404" path="/WEB-INF/404.jsp" />
      30 
      31  
      32 
      33   </global-forwards>

      所谓的全局跳转,指的是所有的action都可以跳转到该页面

      所谓局部跳转,指的是只有本action可以跳转到该页面。

      1. 为什么需要动态表单(dynimic form)
      2. 当我们表单类的属性个数和类型不能确定的时候,我们可以使用动态表单解决

      动态表单和普通表单类区别在:
        1.普通表单 actionForm 是首先你需要定义这样一个类,然后配置到struts-config.xml中。

      1. 动态表单完全依赖反射机制创建,所以不需要定义表单类,直接在struts-config.xml

      快速入门:

      如何在struts-cinfig.xml文件中配置,动态表单

           <form-beans>

        <form-bean name="LoginUserForm"  type="org.apache.struts.action.DynaActionForm">

       <!--该表单的属性是配置出来 -->

       <form-property  name="username" type="java.lang.String"/>

       <form-property  name="password" type="java.lang.String"/>

       

        </form-bean>

        </form-beans>

      对于action类:

      //从动态表单中取出数据

            String name=(String)LoginUserForm.get("username");

            String password =(String)LoginUserForm.get("password");

            System.out.println("name="+name+" password="+password);

      使用struts框架,完成文件的上传和下载:

      原理图:

       

      疑问?

      1. 一个action是否必须要配置一个actionForm-à不必须

      2. 一个action是否可以配置多个表单?--》最多一个

      步骤:

      1. 建立Web

      2. 引入struts

    4. 3. register.jsp

    5. 4. UserForm表单和RegisterAction

      5.牵线搭桥<%--如果我们的表单有文件控件,则需要重新指定表单的编码方式(切记) --%>

         <form  enctype="multipart/form-data" action="/strutsFileupAndDown/register.do?Gxjun=Register" method="post">

                 名字:<input type="text" name="username"/>

                 头像:<input type="file" name="myphoto"/>

         <input type="submit" value="注册用户"/>

         </form>

      5. 写业务逻辑

       

      问题?

      1. 中文名字的文件出现乱码?

      方法一:首先使用过滤器Filter

      1. a.  下载时候,如何给用户提示原来真实的文件名
      2. b.  考虑文件下载》?

      因为下载的时候要显示上传文件的名称,人名,因此我们需要把

      信息保存到数据库中。

       

      2. 存在文件覆盖?

      1. 3.  方法一: (年+++++毫秒)UUID,还有一种方法
      2. 4.  方法二:采用UUID数据类型{
      3. int beginindex = formfile.getFileName().lastIndexOf(".");
      4.         String newName=formfile.getFileName().substring(beginindex);
      5.         String uuid =UUID.randomUUID().toString();
      6. 8.          Os = new FileOutputStream(keepFilePath+"\"+uuid+newName);

       

      Users表:
      create table users{

           Username  varchar(64) unique not null,

      Photos varchar(128) not null

      }

       

      如何控制文件的类型:

      注意: 文件的类型不是通过后缀来判断

      从(tomcatweb.xml中可以看到所有文件类型

        1. 1.  如何防止用户名重复问题?
          方法一:(阿贾克斯)
  • 相关阅读:
    Python实现简单中文词频统计示例
    Python组合类型笔记
    Python中turtle绘图学习笔记和实例
    Python爬虫入门
    与Python的第一次见面
    Delphi开发人员指南 第一部份快速开发的基础 第1章 Delphi下的Windows编程(四)
    Delphi开发人员指南 第一部份快速开发的基础 第1章 Delphi下的Windows编程(三)
    Delphi开发人员指南 第一部份快速开发的基础 第1章 Delphi下的Windows编程(二)
    Delphi开发人员指南 第一部份快速开发的基础 第1章 Delphi下的Windows编程(一)
    Java开发环境安装 配置 与 Eclipse安装 新建Project
  • 原文地址:https://www.cnblogs.com/gongxijun/p/4308214.html
Copyright © 2011-2022 走看看