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

 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 }

(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”);

 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. 用工具引入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

  1. 关于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开发速度,缩短开发周期。

  1. 实例:Struts版本的用户管理系统: 需求: a.完成对用户的crud操作。 b.界面设计. c.开发 d.根据界面来设计数据库和表
    1. 1.    为什么需要DispatchAction?

2.       快速入门

步骤:

1.       创建web工程

2.       引入struts包

3.      

全局跳转: 所谓的全局跳转,指的是所有的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

 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>

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

  1. a.  下载时候,如何给用户提示原来真实的文件名
  2. 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.  如何防止用户名重复问题? 方法一:(阿贾克斯)

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏崔庆才的专栏

分析Ajax爬取今日头条街拍美图

1594
来自专栏零基础使用Django2.0.1打造在线教育网站

零基础使用Django2.0.1打造在线教育网站(提示):错误贴

努力与运动兼备~~~有任何问题可以加我好友或者关注微信公众号,欢迎交流,我们一起进步!

1643
来自专栏Java帮帮-微信公众号-技术文章全总结

RabbitMQ详解解答【面试+工作】

如果安装rabbitMQ首先安装基于erlang语言支持的OTP软件,然后在下载rabbitMQ软件进行安装(安装过程都是下一步,在此不在说了)

3331
来自专栏零基础使用Django2.0.1打造在线教育网站

零基础使用Django2.0.1打造在线教育网站(五):简易留言簿交互实现

努力与运动兼备~有任何问题可以加我好友或者关注微信公众号,欢迎交流,我们一起进步!

5278
来自专栏C/C++基础

g++入门教程

g++是GNU开发的C++编译器,是GCC(GNU Compiler Collection)GNU编译器套件的组成部分。另外,gcc是GNU的C编译器。

1.4K1
来自专栏C/C++基础

MySQL出现:ERROR 3 (HY000): Error writing file '/tmp/MYbEd05t' (Errcode: 28)

在执行一个有1000万条记录的MySQL查询语句时,出现了上面的错误。百度折腾了很长时间,终于解决,特此记录。

2183
来自专栏Java3y

Hibernate面试题大全

Hibernate常见面试题 Hibernate工作原理及为什么要用? Hibernate工作原理及为什么要用? 读取并解析配置文件 读取并解析映射信息,创建...

3945
来自专栏GopherCoder

Python: 一周笔记

1653
来自专栏Java帮帮-微信公众号-技术文章全总结

Python常见面试题【悟空教程】

1.MySQL 数据库总结 MySQL 可以建多少个数据库,理论上是没有限制的,每一个数据库可以有上亿的对象,但是一般基于硬件要求、效率问题一般不超过64个, ...

1702
来自专栏JadePeng的技术博客

axios介绍与使用说明 axios中文文档

本周在做一个使用vuejs的前端项目,访问后端服务使用axios库,这里对照官方文档,简单记录下,也方便大家参考。 Axios 是一个基于 Promise 的 ...

2.5K9

扫码关注云+社区

领取腾讯云代金券