0
点赞
收藏
分享

微信扫一扫

web基础之Structs(一篇)

秀妮_5519 2022-03-16 阅读 150



                                   ​ struts             

Struct 的优点之处:


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

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

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

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


* ​Structs 为什么有?

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

——à框架 structs

 Structs的运行原理:

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

web基础之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

web基础之Structs(一篇)_表单_04


(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,完成开发

步骤:


web基础之Structs(一篇)_java_05




  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. web基础之Structs(一篇)_struts_06

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


实例:Struts版本的用户管理系统:

需求:

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

b.界面设计.

c.开发

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



  1. 1.    为什么需要DispatchAction

 web基础之Structs(一篇)_struts_07


  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


web基础之Structs(一篇)_java_08

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. 存在文件覆盖?


  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

}

 web基础之Structs(一篇)_struts_09

如何控制文件的类型:

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

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


    1. 1.  如何防止用户名重复问题?
      方法一:(阿贾克斯)





编程是一种快乐,享受代码带给我的乐趣!!!


举报

相关推荐

0 条评论