web基础之Structs(一篇)
为什么有 struts 框架
Struct 的优点之处:
- 1. struct的好处
- 2. 程序更加规范化
- 3. 程序的可读性提高了
- 4. 程序的 可维护性增加了
Struct 的不足之处:
1. From表单有点鸡肋
2.action是单态(对网站并发性的处理有影响)
-----------框架提高了程序的规范的同时,也约束了程序的自由。
* Structs 为什么有?
因为我们对mvc的理解不同,可能造成不同的公司写程序的时候,规范不统一,这样不利于程序的维护和扩展…..,所以我们有必要用一个统一的规范来开发项目。
——à框架 structs。
Structs的运行原理:
我以一个用户登录来讲解原理---------->图解

手写版structs的登录系统
- 1. 在开发structs时候,需要structs开发包
- 2. 先写出login.jsp
- 3. 编写ActionFrom和Action
- 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. 添加过滤器(Filter)解决中文乱码问题
- 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. 用工具引入struts包和配置文件,然后自己配置struts-config.xml,完成开发
步骤:

- a. 点击finish,就会自动的引入struts 开发包和自动生成struts-config.xml和web.xml文件并完成一些配置。
- b. 开发login.jsp
- c. 开发action和actionForm
- d. 手动配置struts-config.xml
- e. 开发ok.jsp和err.jsp
- f. 测试
- g. 从上面的开发过程,可以提高我们的开发效率
- 1. 完全依赖MyEclipse提供的工具完成struts开发。(以用户登录验证来举例)
- a. 创建web工程
- b. 引入struts工具包
- c. 开发login.jsp
- d. 开发action和actionForm

关于jsp的标签技术:
Jstl :(jsp standard libaray) jsp 表征标签库。
为什么有?
在做一个系统的时候,我们的jsp文件中有大量的<% %>
Java片段,jsp中的html标签+jsp标签+java片段,导致jsp很乱
问题的提出: 能不能把<% %>java片段用标签来替换 —>jsp页面就简洁。
解决之道:->jsp 好处
- 1. 在应用程序服务器之间提供统一的接口,从而提供了web应用在不同的服务器的移植。
- 2. 简化jsp于web应有程序的开发。
- 3. 减少jsp中java片断的代码(script 代码),可以达到在jsp页面中没有任何java代码,代码更加简洁。
- 4. 提高jsp开发速度,缩短开发周期。
实例:Struts版本的用户管理系统:
需求:
a.完成对用户的crud操作。
b.界面设计.
c.开发
d.根据界面来设计数据库和表
- 1. 为什么需要DispatchAction?

- 2. 快速入门
步骤:
- 1. 创建web工程
- 2. 引入struts包
- 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可以跳转到该页面。
- 为什么需要动态表单(dynimic form)
- 当我们表单类的属性个数和类型不能确定的时候,我们可以使用动态表单解决
动态表单和普通表单类区别在:
1.普通表单 actionForm 是首先你需要定义这样一个类,然后配置到struts-config.xml中。- 动态表单完全依赖反射机制创建,所以不需要定义表单类,直接在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

3. 写register.jsp
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
- a.
下载时候,如何给用户提示原来真实的文件名 - b.
考虑文件下载》?
因为下载的时候要显示上传文件的名称,人名,因此我们需要把
信息保存到数据库中。
2. 存在文件覆盖?
- 3. 方法一: (年+月+日+分+秒+毫秒)UUID,还有一种方法
- 4. 方法二:采用UUID数据类型{
- int beginindex = formfile.getFileName().lastIndexOf(".");
- String
newName=formfile.getFileName().substring(beginindex); - String uuid =UUID.randomUUID().toString();
- 8. Os = new
FileOutputStream(keepFilePath+"\\"+uuid+newName);
Users表:
create table users{Username varchar(64) unique not null,
Photos varchar(128) not null
}

如何控制文件的类型:
注意: 文件的类型不是通过后缀来判断
从(tomcat)web.xml中可以看到所有文件类型
- 1.
如何防止用户名重复问题?
方法一:(阿贾克斯)
- a.
web基础之Structs(一篇)的更多相关文章
- Java Web基础 --- Servlet 综述(理论篇)
摘要: Web 技术成为当今主流的互联网 Web 应用技术之一,而 Servlet 是 Java Web 技术的核心基础.本文首先从请求/响应架构应用的大背景谈起 Servlet 的由来,明确 Ser ...
- web基础之hibernate(一篇)
hibernate的一些基本的认识 1. hibenate是一个框架(framework) 2. hibernate是一个orm框架 3. orm(object r ...
- HT for Web基础动画介绍
在上一篇<基于HT for Web矢量实现3D叶轮旋转>一文中,我略微提了下HT for Web基础动画的相关用法,但是讲得不深入,今天就来和大家分享下HT for Web基础动画的相关介 ...
- (0)写给Web初学者的教案-----Web基础
0,Web基础 一. What is the Web? Can It Eat? 很多同学可能都听说过一个名词叫做“Web”,这个词隐隐约约好像和我们上网相关.但是呢,又很难说的清楚.我们今天每位 ...
- 十倍效能提升——Web 基础研发体系的建立
1 导读 web 基础研发体系指的是, web 研发中一线工程师所直接操作的技术.工具,以及所属组织架构的总和.在过去提升企业研发效能的讨论中,围绕的主题基本都是——”通过云计算.云存储等方式将底层核 ...
- 安装完最小化 RHEL/CentOS 7 后需要做的 30 件事情7. 安装 PHP PHP 是用于 web 基础服务的服务器端脚本语言。它也经常被用作通用编程语言。在最小化安装的 CentOS 中安
CentOS 是一个工业标准的 Linux 发行版,是红帽企业版 Linux 的衍生版本.你安装完后马上就可以使用,但是为了更好地使用你的系统,你需要进行一些升级.安装新的软件包.配置特定服务和应用程 ...
- 20145226夏艺华 网络对抗技术EXP8 WEB基础实践
20145226夏艺华 网络对抗技术EXP8 WEB基础实践 实验问题回答 1.什么是表单? 表单在网页中主要负责数据采集功能.一个表单有三个基本组成部分: 表单标签:这里面包含了处理表单数据所用CG ...
- Java Web项目实战第1篇之环境搭建
写在前面的话 从今天开始一个Java Web实战项目,参考自 http://blog.csdn.net/eson_15/article/details/51277324 这个博客(非常感谢博主的分享精 ...
- spring cloud 2.x版本 Spring Cloud Stream消息驱动组件基础教程(kafaka篇)
本文采用Spring cloud本文为2.1.8RELEASE,version=Greenwich.SR3 本文基于前两篇文章eureka-server.eureka-client.eureka-ri ...
随机推荐
- UVA 442 二十 Matrix Chain Multiplication
Matrix Chain Multiplication Time Limit:3000MS Memory Limit:0KB 64bit IO Format:%lld & %l ...
- 蒙特卡洛法计算定积分—Importance Sampling
如上图所示,计算区间[a b]上f(x)的积分即求曲线与X轴围成红色区域的面积.下面使用蒙特卡洛法计算区间[2 3]上的定积分:∫(x2+4*x*sin(x))dx # -*- coding: u ...
- 深度信任网络的快速学习算法(Hinton的论文)
也没啥原创,就是在学习深度学习的过程中丰富一下我的博客,嘿嘿. 不喜勿喷! Hinton是深度学习方面的大牛,跟着大牛走一般不会错吧-- 来源:A fast learning algorithm fo ...
- 本地设置正常,放服务器上就报 System.Security系统找不到指定的文件解决方法
在应用程序池设置中将“加载用户配置文件”(Load User Profile)设置为true,问题就解决.
- sp_getTable_data
CREATE PROC sp_Select_Table ) AS begin ) SET @sql='SELECT * FROM ' + @TableName EXEC (@sql) end GO
- Spring security3入门(转)
http://kingxss.iteye.com/blog/1908011 补充类图: 注意:1.修改为链接mysql数据库: 2.代码地址:https://github.co ...
- javascript中获取非行间样式的方法
我们都知道一般在javascript中获取样式一般用的是nodeObj.style.attr这个属性的,但是这个属性只能获取行间样式非行间样式比如写在样式表中的样式那么用nodeObj.style.a ...
- Java中ArrayList相关的5道面试题
本文参考了 <关于ArrayList的5道面试题 > 1.ArrayList的大小是如何自动增加的? 这个问题我想曾经debug过并且查看过arraylist源码的人都有印象,它的过程是: ...
- 08 高效的SQL
编写高效 SQL 需要以下知识 有关所查询内容的物理组织的知识 数据库能做什么的知识, 例如: 如果你不知道跳跃扫描索引及其用途, 那么你可能会看着模式说”索引丢了” SQL 所有错综复杂的知识 对目 ...
- java中compareTo和compare方法之比较
这两个方法经常搞混淆,现对其进行总结以加深记忆. compareTo(Object o)方法是java.lang.Comparable接口中的方法,当需要对某个类的对象进行排序时,该类需要实现Comp ...