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(小队长)--à登录小队长

   //这是一个用户表单,用户填充数据的。

 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;
}
}

(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”);
 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);
}
Web.xml配置文件:
<filter>
<filter-name>Znfilter</filter-name>
<filter-class>com.gxjun.filter.Znfilter</filter-class>
</filter>
<filter-mapping>
<filter-name>Znfilter</filter-name>
<!-- 对所有的进行过滤 -->
<url-pattern>/*</url-pattern>
</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.      

          全局跳转:

     

       <action
    
           attribute="usersForm"
    
           input="/WEB-INF/ok.jsp"
    
           name="usersForm"
    
           parameter="Gxjun"
    
           path="/loginAndLogout"
    
           scope="request"
    
           type="com.gxj.struts.action.LoginAndLogoutAction"
    
           cancellable="true">
    
           <!-- 如果一个forward写在action的标签中,则说明是局部跳转 -->
    
           <forward name="err" path="/WEB-INF/Login.jsp" />
    
           <forward name="ok" path="/WEB-INF/ok.jsp" />
    
         </action>
    
       如果想要全局跳转
    
       <forward name="go404" path="/WEB-INF/404.jsp" />
    
       </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. 
        如何防止用户名重复问题?
        方法一:(阿贾克斯)

web基础之Structs(一篇)的更多相关文章

  1. Java Web基础 --- Servlet 综述(理论篇)

    摘要: Web 技术成为当今主流的互联网 Web 应用技术之一,而 Servlet 是 Java Web 技术的核心基础.本文首先从请求/响应架构应用的大背景谈起 Servlet 的由来,明确 Ser ...

  2. web基础之hibernate(一篇)

    hibernate的一些基本的认识 1.       hibenate是一个框架(framework) 2.       hibernate是一个orm框架 3.       orm(object r ...

  3. HT for Web基础动画介绍

    在上一篇<基于HT for Web矢量实现3D叶轮旋转>一文中,我略微提了下HT for Web基础动画的相关用法,但是讲得不深入,今天就来和大家分享下HT for Web基础动画的相关介 ...

  4. (0)写给Web初学者的教案-----Web基础

    0,Web基础 一.    What is the Web? Can It Eat? 很多同学可能都听说过一个名词叫做“Web”,这个词隐隐约约好像和我们上网相关.但是呢,又很难说的清楚.我们今天每位 ...

  5. 十倍效能提升——Web 基础研发体系的建立

    1 导读 web 基础研发体系指的是, web 研发中一线工程师所直接操作的技术.工具,以及所属组织架构的总和.在过去提升企业研发效能的讨论中,围绕的主题基本都是——”通过云计算.云存储等方式将底层核 ...

  6. 安装完最小化 RHEL/CentOS 7 后需要做的 30 件事情7. 安装 PHP PHP 是用于 web 基础服务的服务器端脚本语言。它也经常被用作通用编程语言。在最小化安装的 CentOS 中安

    CentOS 是一个工业标准的 Linux 发行版,是红帽企业版 Linux 的衍生版本.你安装完后马上就可以使用,但是为了更好地使用你的系统,你需要进行一些升级.安装新的软件包.配置特定服务和应用程 ...

  7. 20145226夏艺华 网络对抗技术EXP8 WEB基础实践

    20145226夏艺华 网络对抗技术EXP8 WEB基础实践 实验问题回答 1.什么是表单? 表单在网页中主要负责数据采集功能.一个表单有三个基本组成部分: 表单标签:这里面包含了处理表单数据所用CG ...

  8. Java Web项目实战第1篇之环境搭建

    写在前面的话 从今天开始一个Java Web实战项目,参考自 http://blog.csdn.net/eson_15/article/details/51277324 这个博客(非常感谢博主的分享精 ...

  9. spring cloud 2.x版本 Spring Cloud Stream消息驱动组件基础教程(kafaka篇)

    本文采用Spring cloud本文为2.1.8RELEASE,version=Greenwich.SR3 本文基于前两篇文章eureka-server.eureka-client.eureka-ri ...

随机推荐

  1. js将数组元素随机排序的方法

    在群里看见的一个面试题,试了一下,还是可以做出来的,但是需要查资料,主要是岁一些方法了解的不清楚,可能这个跟我平时不太注重基础理论有关系,像什么构造函数啊,我根本就不关心什么叫构造函数,我一直都以为我 ...

  2. node-webkit中使用sqlite3(MAC平台)

    前言 最近使用node-webkit开发一款博客发布软件,来替换难用的Windows Live Writer(主要是对Markdown标签的支持很差劲).为了解决博文信息临时保存的问题,想到了使用sq ...

  3. Myeclipse 10.7 android(安卓) 开发环境搭建

    1 下载并安装JDK,并且设置环境变量 2 下载安装 installer_r24.3.4-windows.exe (Android SDK Manager) 3 使用 Android SDK Mana ...

  4. [SAP ABAP开发技术总结]Form(subroutine)、Function参数传值传址

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  5. python_way ,day11 线程,怎么写一个多线程?,队列,生产者消费者模型,线程锁,缓存(memcache,redis)

    python11 1.多线程原理 2.怎么写一个多线程? 3.队列 4.生产者消费者模型 5.线程锁 6.缓存 memcache redis 多线程原理 def f1(arg) print(arg) ...

  6. hdu 5137 How Many Maos Does the Guanxi Worth 最短路 spfa

    How Many Maos Does the Guanxi Worth Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 512000/5 ...

  7. GitHub上不错的Android开源项目(二)

    收集相关系列资料,自己用作参考,练习和实践.小伙伴们,总有一天,你也能写出 Niubility 的 Android App :-) 系列文章如下: GitHub上不错的Android开源项目(一):h ...

  8. ruby的正则表达式-scan方法

    irb(main):001:0> str_vps=%Q{viewpoint_ids: [{"id":"260e053b-d728-4785-888d-eb4f1ca ...

  9. MSDN资料

    http://www.microsoft.com/china/msdn/events/webcasts/shared/webcast/Series.aspx http://www.microsoft. ...

  10. [转]-Android Studio 快捷键整理分享-SadieYu

    文章编辑整理:Android Studio 中文组 - SadieYu Alt+回车 导入包,自动修正 Ctrl+N   查找类 Ctrl+Shift+N 查找文件 Ctrl+Alt+L  格式化代码 ...