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. 【转载】linux内核笔记之进程地址空间

    原文:linux内核笔记之进程地址空间 进程的地址空间由允许进程使用的全部线性地址组成,在32位系统中为0~3GB,每个进程看到的线性地址集合是不同的. 内核通过线性区的资源(数据结构)来表示线性地址 ...

  2. java 导出Excel 大数据量,自己经验总结!

    出处: http://lyjilu.iteye.com/ 分析导出实现代码,XLSX支持: /** * 生成<span style="white-space: normal; back ...

  3. NPO与X7R、X5R、Y5V、Z5U神马的有啥区别

    主要是介质材料不同.不同介质种类由于它的主要极化类型不一样,其对电场变化的响应速度和极化率亦不一样. 在相同的体积下的容量就不同,随之带来的电容器的介质损耗.容量稳定性等也就不同.介质材料划按容量的温 ...

  4. JAVA GUI设计中遇到的一个小问题

    最近新学,大牛勿喷.. 写下笔记主要是记录自己常犯的错误,也方便新人解决问题学习参考. 问题:win7下设计GUI,文本框和密码框显示不出来. 我的解决方案: 1. JTextField text = ...

  5. CentOS7编译安装Nginx-1.8.1和编译参数

    CentOS7编译安装Nginx-1.8.1和编译参数 Web服务器Nginx    LNMP是一组众所周知的Web网站服务器架构环境,即由Linux+Nginx+MySQL+PHP(MySQL有时也 ...

  6. yii 中引入js 和css 的方式

    在yii中 我们需要引入css 和 js 的时候,yii 自身有需要的类. 当我在views 视图层中引入css 和 js , <?php Yii::app()->clientScript ...

  7. iOS - OC 内存管理

    1.OC 基本内存管理模型 1.1 自动垃圾收集 在 OC 2.0 中,有一种称为垃圾收集的内存管理形式.通过垃圾收集,系统能够自动监测对象是否拥有其他的对象,当程序执行需要空间的时候,不再被引用的对 ...

  8. poj3667【线段树】/【类似权值线段树写法】

    题意:n个空房间.两种操作:1.选择最小的连续D个房间入住,并输出这连续D个房间的最小标号.2.将某个区间内的房间全部退房. #include <cstdio> #include < ...

  9. [LED]如何配置LCD背光和LED,调试方法

    [DESCRIPTION] 如何配置LCD背光和LED,调试方法 [SOLUTION]LCD背光和LED配置文件alps/custom/<proj name>lk/cust_leds.ca ...

  10. mtk lcm驱动加载流程 (转载)

    平台:mt6582 + Android 4.4 前面就说过,在mtk代码中支持屏是可兼容的,通过调用驱动中的compare_id函数来匹配驱动和屏,这里来细看一下代码. 1. LK部分(mediate ...