厦门理工计算机+实验报告2_Struts标签
- 格式:doc
- 大小:148.00 KB
- 文档页数:5
沈阳工学院综合实验验收报告题目:论坛系统的设计与实现院系:信息与控制学院专业:计算机科学与技术班级学号:学生姓名:韩雨辰赫梓屹田皓指导教师:靳新成绩:2013年 12 月 15 日综合实验论坛系统的设计与实现【开发语言及实现平台或实验环境】Windows系统,JDK,myEclipse开发环境,Tomcat服务器,Struts2、Hibernate开发平台【实验要求和内容】论坛系统是用于用户之间交流的一个信息平台,它是网站开发中很典型的一个例子,通过网上论坛系统的设计和开发掌握Struts2和Hibernate实现的基本功能。
●系统基本功能系统分为前台和后台,分别为用户和管理员提供不同的功能服务,对普通用户来说,系统提供注册、登录、浏览信息、发帖、回贴等功能;对管理员来说,系统提供登录验证、管理帖子、管理用户等功能。
●系统功能模块及介绍图1 系统功能模块图♦前台用户模块(1)用户注册登录模块:为新用户提供填写表单注册成为会员的服务;为已注册的会员提供登录验证的服务,验证成功后就可以登录系统。
(2)信息浏览模块:用户可以浏览帖子列表、详细内容及回帖内容。
(3)发帖回帖模块:已登录的合法用户可以发帖和回帖。
♦后台管理员模块(1)管理员登录验证模块:对管理员的身份进行验证,只有管理员才能登录后台。
(2)帖子管理模块:对帖子提供修改、删除操作。
(3)管理用户模块:提供删除用户的功能。
1 系统分析与设计1.1 需求分析1.1.1 功能性需求开发BBS论坛系统的目的是提供一个供用户交流的平台,为广大用户提供交流经验、探讨问题的社区。
因此,BBS论坛系统最基本的功能首先是发表主题,其次是其他人员根据主题发表自己的看法。
此外,为了记录主题的发表者和主题的加复者信息民,系统还需要提供用户注册和登录的功能。
只有注册的用户登录后才能够发表和回复主题,浏览者(游客)只能浏览主题信息。
根据用户的需求及以上的分析,BBS论坛需要具备前台功能和后台功能。
Struts2学习之二--Struts2标签介绍热12已有 14625 次阅读 2009-07-12 18:53[顶]3G移动--Android开发工程师全能班(转) Struts2学习之二--Struts2标签介绍在上一篇文章《为Struts 2.0做好准备》中,我过于详细地介绍了Struts 2.0开发环境和运行环境的配置,所以,本文很少涉及的以上两方面的细节。
如果,您看完《为Struts 2.0做好准备》后,还有什么不明白,或者没法运行文中例子,请联系我。
我的E-MAIL:Max.M.Yuan@。
在介绍常用标志前,我想先从总体上,对Struts 1.x与Struts 2.0的标志库(Tag Library)作比较。
分类将标志库按功能分成HTML、Tiles、Logic和Bean等几部分严格上来说,没有分类,所有标志都在URI为“/struts-tags”命名空间下,不过,我们可以从功能上将其分为两大类:非UI标志和UI标志表达式语言(expression languages)不支持嵌入语言(EL)OGNL、JSTL、Groovy和Velcity以上表格,纯属个人总结,如有所不足或错误,请不吝指正好了,我要开始介绍“常用”(这里所谓的“常用”,是指在已往工作中使用Struts里经常用到的)的标志了。
1.非UI标志o if、elseif和else描述:执行基本的条件流转。
参数:名称必需默认类型描述备注test 是Boolean 决定标志里内容是否显示的表达式else标志没有这个参数id 否Object/String 用来标识元素的id。
在UI和表单中为HTML的id属性例子:<%@ page contentType="text/html; charset=UTF-8" %><%@ taglib prefix="s" uri="/struts-tags" %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><title>Condition Flow</title></head><body><h3>Condition Flow</h3><!--这里有点小技巧:本来可以用#[0]来获得,请求中name的值。
实验2 Struts2类型转换(2学时)题目/任务1.掌握基于OGNL的类型转换。
2.掌握基于OGNL表达式对于Map集合的转换。
难度系数知识点说明/训练要点1.基于OGNL的类型转换。
2.基于OGNL表达式对于Map集合的转换。
实现效果1、运行结果:a)基于OGNL的类型转换:b)基于OGNL表达式对于Map集合的转换实现步骤1、搭建环境。
◆将当前目录下,环境工程包内StrutsDemo20文件导入到eclipse中。
2、进行实验。
在edu.zb.entity包下有一个User实体类,User里有userName、password、age属性。
并且已添加set、get方法以及有参和无参的构造方法,并且重写了toString()方法。
◆基于OGNL的类型转换:●打开edu.zb.action包下的loginAction类,添加一个User类型的user属性。
并添加set、get方法。
●打开WebContent目录下的login.jsp页面,将第一个“<s:textfield>”标签里的name和id属性改为“erName”。
●将第二个“<s:textfield>”标签里的的name和id属性改为“user.age”。
●将“<s:password>”标签里的name和id属性改为“user.password”。
●打开WebContent目录下的index.jsp页面,在body使用ValueStack对象实现获取引用的过程:调用request的getAttritube(“struts.valueStack”)方法,返回ValueStack类型的对象,命名为vs,然后跳跃vs的findString(“user”)方法获得user的相关属性值。
实际代码如下所示:●在第一行里page属性后面添加对相关类的导入。
如下所示:●运行login.jsp,在login、年龄、pass文本框内分别输入”admin”、“20“、”123456 “。
Struts2实验手册(1):页面数据的显示请求。
1.新建web项目,添加Struts2支持。
右键点击“Package Explorer”的空白处,选择“New”->“Web Project”如下图:输入TestStruts2_XXX作为项目名称,其中XXX为学号最后三位。
点击“Finish”,如出现下面的窗口:点击“Y es”,成功创建一个web项目。
解析:具体意思为项目的Java解析器当前使用5.0版本即JDK1.5版本。
而现在Myeclipse 默认的工作空间使用6.0版本,问你是否用用户设置即5.0版本,选择Yes就是5.0版本,No就是6.0版本。
新建项目后,添加Struts2支持:右键点击项目名称,出现下面菜单选择“Myeclipse”->“Add Struts Capabilities ”出现下面窗口:选择“struts 2.1”点击“Next”出现下面窗口,选择Struts 2 Core Libraries 点击“Finish”即可。
点击“Finish”即可。
2.新建类HelloWorld:在src包上点击鼠标右键,出现菜单:选择“New”->“Class”出现下面窗口:在打开的类HelloWorld中修改代码:在类的空白位置点击鼠标右键,注意:光标要点在“{……}”两个大括号中间。
选择菜单“Source”->“Generate Getters and Setters”,注意:意思是生成get/set方法。
选择“message”下面的getMessage和setMessage方法,点击“OK”3.修改struts.xml文件,进行页面请求配置。
这里的配置文件说明:1.<package name="default"extends="struts-default">使用默认的struts配置,所有action都放在package之中2.<action name="testHello"class="hello.HelloWorld">设置一个action,名字叫testHello,当有页面请求时叫testHello时,使用类hello.HelloWorld的方法进行处理。
实验时间2015年11月6日19:00时至22:00时学时数 4 1.实验名称实验一:熟悉Struts2核心文件2.实验目的(1)熟悉Struts2的配置文件web.xml和struts.xml。
(2)熟悉如何书写用户定义的控制器。
(3)深刻理解DMI和通配符的使用。
(4)学会struts2接收参数的方法。
3.实验内容(1)将如下页面中登陆和注册的action配置用通配符实现。
(2)理解局部结果和全局结果,学会在struts.xml 中配置全局结果。
(3)实现增加书籍信息的业务处理。
(4)修改管理员登陆后的页面并新写页面addBook.jsp,使得点击添加书籍信息后呈现下面的页面4.实验原理或流程图要求:➢管理员登录后跳到管理员登陆成功的页面➢普通用户登录后跳到普通用户登陆成功的页面➢注册后跳到注册成功的页面➢登录时用户名密码输入错跳到出错页➢注册和登录时用户名,密码没有输入时跳到登陆注册页,并在登陆注册页上显示校验失败的相关提示。
要求如下:➢当输入书名,作者和定价后,要求使用属性驱动、模型驱动或今天新学的接收参数的方法进行参数接收。
➢使用集合模拟数据库。
➢理解chain结果类型,使得增加书籍后马上能将新增书籍的信息显示出来。
呈现出如下的页面:(注意:此处需要学会读取struts2中ValueStack中的内容)5.实验过程或源代码6.实验结论及心得通过本此实验,知道了Action配置采用通配符的方式该如何编写,也会了动态调用Action里面的方法,懂得了全局结果的配置,也会使用了接受参数的方法。
项目名称/login.jsp,查看运行结果。
(3)使用内置校验器进行校验项目3:用户注册验证。
步骤1:register.jsp文件步骤2:Register.java文件步骤3:新建 Register-register-validation.xml文件步骤4:struts.xml文件步骤5:运行程序,URL地址栏中输入http://主机名:端口名称/项目名称/register.jsp,查看运行结果。
常用Struts标签的使用说明Struts Html标签库1,<html:form>:生成HTML<form>元素,action属性用来指定用户提交表单后,处理用户请求的组建。
Struts 框架将参照struts配置文件来查找相应的action组建。
在struts-config.xml 文件中1,<html:form action=”user.do”> 与user.do对应得代码是:<action parameter="method" name="userForm" path="/user" scope="request" validate="false">2,<html:text/>:生成HTML<input type=”text”>标签的property属性指定字段的名字,对应ActionForm bean中的一个属性,代码如下:<html:text property=”loginName”/> 的对应的userForm bean属性private String login_Name;public String getLogin_Name() {return login_Name;}public void setLogin_Name(String login_Name) {this.login_Name = login_Name;}3,<html:radio/>:生成HTML<input type=”radio”>标签,使用方法与<html:text>相同。
<html:radio property=”isActive” value=”1”>启用</html:radio><html:radio property=”isActive” value=”0”>停用</html:radio>4,<html:select/>:生成HTML<select>标签。
实验2Struts 2开发基础一、实验目的1.熟悉Struts的概念以及与MVC的关系2.掌握Struts的开发过程及工作原理3.熟悉Struts.xml的配置4.掌握Struts2的编程基础及Struts2拦截器使用方法二、实验步骤1.运行MyEclipse建立Web Project(File→New→Web Project),项目名称为ex1,如下图所示,单击next按钮,勾选Generate web.xml deploymentdescriptor,单击Finish按钮完成项目创建。
2.右击项目名ex1,在快捷菜单中选择MyEclipse→Project Facets→InstallApache Struts(2.x) Facet,点击创建弹出下图所示的对话框。
选择/*,单击Finish按钮,完成配置。
3.通过这些步骤,项目中增加了Struts2.1库。
项目src文件夹下添加了struts.xml的配置文件,在web.xml中添加配置Struts过滤器。
请查看这些改变。
4.创建login.jsp文件。
选择WebRoot→new→jsp菜单项,在File Name 中输入文件名login.jsp。
在login.jsp编辑窗口中,作如下修改:(1)修改pageEncoding为utf-8(2)修改title标签的内容为:用户登录(3)修改body标签为:5.创建Action 实现类LoginAction(用于处理表单传过来的数据的类,继承ActionSupport,参考实例5-1)。
右击src文件夹,选择new→Package菜单项,在name框中输入包名org.action。
右击该包,建立class,命名为LoginAction。
该Action类是一个普通的Java类,该类中有String类型属性的username和password,并且声称了其getter和setter 方法(注意:应自动生成)。
要在jsp中使用Struts2的标志,先要指明标志的引入。
通过jsp的代码的顶部加入以下的代码:<%@taglib prefix="s" uri="/struts-tags" %>If elseif else描述:执行基本的条件流转。
参数:例子:<s:set name="age" value="61"/><s:if test="${age > 60}">老年人</s:if><s:elseif test="${age > 35}">中年人</s:elseif><s:elseif test="${age > 15}" id="wawa">青年人</s:elseif><s:else>少年</s:else><s:set name="name" value="<%="'"+request.getParameter("name")+"'"%>"/><%System.out.println(request.getParameter("name"));%><s:if test="#name=='zhaosoft'">zhaosoft here</s:if><s:elseif test="#name=='zxl'">zxl here</s:elseif><s:else>other is here</s:else>Iterator(迭代)描述:用于遍历集合(java.util.Collection)或枚举值(java.util.iterator) 参数I18n(国际化操作)描述:加载资源包到值堆栈。
实验一简单的Struts2应用程序姓名:宋x 班级:计科16xx 学号:1609xxxxx一、实验目标能正确配置Struts 2开发环境,了解和熟悉Struts 2的开发流程。
二、实验要求正确创建Action类和配置struts.xml文件,掌握在视图中访问Action的方法。
三、实验内容利用Struts 2框架创建一个web项目,实现用户登录过程。
具体要求是在一个JSP页面中输入用户名和密码,提交给loginAction后,在execute()方法中进行业务处理,当用户名和密码都为admin时转发到success.jsp页面,否则转发到error.jsp页面。
四、实验步骤(1)在Myeclipse中创建一个Web项目chap2_e21,在src下面创建一个com 包,如图1所示。
图1 项目结构(2)将Struts2的相关包复制到lib目录中,如图1所示。
(3)在web.xml中添加Struts2的过滤器,如图2所示。
图2 添加struts2过滤器(4)创建struts.xml,如图1所示。
(5)在com包中创建loginAction,用来处理登录的业务逻辑,如图3所示。
图3 loginAction页面(6)在struts.xml中配置loginAction,如图4所示。
图4 配置loginAction(7)创建login.jsp 、success.jsp、error.jsp,如图5所示、如图6所示、如图7所示。
图5 login.jsp页面图6 success.jsp页面图7 error.jsp页面(8)将工程发布到Tomcat服务器,如图8所示。
图8 发布到Tomcat服务器(9)在浏览器中访问发布的Web服务,如图9所示。
成功如图10所示。
失败如图11所示。
图9 首页图10 登录成功图11 登录失败五、实验结果通过本次实验,学会了如何配置Struts2的开发环境和如何将各文件配置起来。
本实验花费时间很多,出了好多问题和错误。
《数据结构》实验报告实验序号:2 实验项目名称:顺序表的操作学号姓名专业、班级实验地点实1#514 指导教师林仙丽实验时间2013-10-18一、实验目的及要求1.掌握线性表的顺序存储类型;2.熟练掌握顺序表的基本操作和具体的函数实现。
二、实验设备(环境)及要求微型计算机;windows 操作系统;Microsoft Visual Studio 6.0集成开发环境。
三、实验内容与步骤1.设A、B均为用数组实现的List类型的顺序表,试设计一个函数Alternate (A,B),从表A中第1个元素开始,交替地用表A和表B中元素组成一个新表。
运行结果截图:运行结果截图:四、分析与讨论刚开始敲主函数时,由于一直没有给结构体指针*m初始化,导致运行一直出错,找了一个多小时的bug,还是没找着。
最后在大神杨靖钰的帮助下,先定义了一个结构体list,再用指针m指向list,即m=*list。
之后一切都变简单了。
五、教师评语成绩签名:日期:附源程序清单:1.#include<stdio.h>#include<stdlib.h>#define LIST_INIT_SIZE 10#define LISTINCREMENT 5typedef int ElemType;typedef struct{ElemType *elem;int length ;int ListSize;} sqlist;int InitList_sq(sqlist *l) /*initial the list l*/{l->elem=(ElemType *)malloc(LIST_INIT_SIZE*sizeof(ElemType));if (!l->elem){printf("无法分配空间!");return 1;}else{l->length=0;l->ListSize=LIST_INIT_SIZE;printf("ok\n");return 0;}}void Alternate(sqlist *A,sqlist*B){ElemType i;sqlist list;sqlist *C;C=&list;InitList_sq(C);C->length=A->length+B->length;while(i){if(C->length>=C->ListSize){ElemType *newbase;newbase=( ElemType *)realloc(C->elem, (C->ListSize+LISTINCREMENT)*sizeof(ElemType));C->elem=newbase;C->ListSize+=LISTINCREMENT;}else break;}for(i=0;i<C->length;i++){C->elem[2*i]=A->elem[i];C->elem[2*i+1]=B->elem[i];}for(i=0;i<C->length;i++)printf("%d ",C->elem[i]);}void main(){ElemType i;sqlist list1,list2,*A,*B;A=&list1;B=&list2;InitList_sq(A);InitList_sq(B);printf("请输入A指向的5个整数:\n");for(i=0;i<5;i++)scanf("%d",&A->elem[i]);A->length=i;printf("请输入B指向的5个整数:\n");for(i=0;i<5;i++)scanf("%d",&B->elem[i]);B->length=i;Alternate(A,B);printf("\n");}2.#include<stdio.h>#include<stdlib.h># define LIST_INIT_SIZE 10 //线性表存储空间的初始分配量# define LISTINCREMENT 5 //线性表存储空间的分配增量typedef int ElemType;typedef struct{int *elem;int length ; //当前长度int ListSize; //当前分配的存储容量} sqlist;int InitList_sq(sqlist *l) /*initial the list l*/{l->elem=(ElemType *)malloc(LIST_INIT_SIZE*sizeof(ElemType));if (!l->elem){printf("无法分配空间!");return 1;}else{l->length=0;l->ListSize=LIST_INIT_SIZE;printf("ok\n");return 0;}}int ListInsert_Sq(sqlist *L,int i, int e){int *q,*p;if(i<1 || i>L->length+1)return 1;if(L->length>=L->ListSize){int *newbase;newbase=( ElemType *)realloc(L->elem, (L->ListSize+LISTINCREMENT)*sizeof(ElemType));if(!newbase)return 1;L->elem=newbase;L->ListSize+=LISTINCREMENT;}q=&(L->elem[i-1]);for(p=&(L->elem [L->length-1]);p>=q;--p)*(p+1)=*p;*q=e;++L->length;return 0;}void main(){int i,j,k,b;int a1[LIST_INIT_SIZE],a2[100];sqlist list,*m;m=&list;b=InitList_sq(m);printf("请输入10个整数:\n");for(j=0;j<LIST_INIT_SIZE;j++)scanf("%d",&m->elem[j]);m->length=j;printf("请输入i和k的值:\n");scanf("%d%d",&i,&k);printf("请输入要插入%d个数:\n",k);for(j=0;j<k;j++)scanf("%d",&a2[j]);for(j=0;j<k;j++){b=ListInsert_Sq(m,i+j,a2[j]);}for(j=0;j<m->length;j++)printf("%d ",m->elem[j]);printf("\n");}。
S truts2 标签详解详细的说明了struts2所有标签由整理版权属 以及原作者。
由于标签太多难做目录索引,如果你觉得有目录索引更好,请到/p/myjdemo/downloads/list下载CHM版本的Struts2标签详解,谢谢。
aa标签创建一个HTML超链接,等价于HTML 的<a href=""....示范代码:<s:a href="login.action">登陆</s:a>action使用action标签可以允许在JSP页面中直接调用Action,因为需要调用Action,故可以指定需要被调用Action的name以及namespace。
如果指定了executeResult参数的属性值为true,该标签还会把Action的处理结果(视图支援)包含到本页面中来。
action标签的属性:id:可选属性,该属性将会作为该Action的引用IDname:必填属性,指定该标签调用哪个Actionnamespace:可选,指定该标签调用的Action所在的namespace. executeResult:可选,指定是否要将Action的处理结果页面包含到本页面。
默认是false,即不包含ignoreContextParams:可选,它指定该页面中的请求参数是否需要传入调用的Action、默认是false,即将本页的请求参数传入被调用的Action。
下面是本示例应用中的Action类,包含连个处理逻辑。
代码如下public class TagAction extednds ActionSupport{//封装用户请求参数的author属性private String author;//author的get和set的方法,省略……public String execute() throws Exception{return "done";}public String login() throws Exception{ServletActionContext.getRequest().setAttribute("author",getAuthor());return "done";}}上面的Action类包含两个处理逻辑,可以在struts.xml文件中通过指定method属性来将该Action类映射成两个逻辑Action。
struts2标签详解收藏52、action前缀使用action前缀,取代form标签指定的action,导向到另一个action进行处理。
<s:form action="login"><s:textfield name="ername" label="用户名"></s:textfield><s:textfield name="user.password" label="密码"></s:textfield><s:submit value="登陆"></s:submit><s:submit value="注册" name="action:register"></s:submit></s:form>2、redirect前缀使用redirect前缀请求重定向到其他的url,甚至可以是web英语程序外部的url。
<s:form action="login"><s:textfield name="ername" label="用户名"></s:textfield><s:textfield name="user.password" label="密码"></s:textfield><s:submit value="登陆"></s:submit><s:submit value="搜索" name="redirect:"></s:submit></s:form>2、redirect-action前缀使用redirect-action前缀请求重定向到其他的action.<s:form action="login"><s:textfield name="ername" label="用户名"></s:textfield><s:textfield name="user.password" label="密码"></s:textfield><s:submit value="登陆"></s:submit><s:submit value="搜索" name="redirect-action:register"></s:submit></s:form>reset标签reset标签输出一个重置按钮名称必需默认类型描述type否inputString要使用的重置按钮的内容,input、button<s:reset value="重置"></s:reset><s:reset type="button" label="重置"></s:reset>updownselect标签updownselect标签创建一个带有上下移动的按钮的列表框,可以通过上下移动按钮来调整列表框的选项的位置。
实验2 Struts 2 入门一. 目的要求1.掌握Struts 2 开发环境的搭建;2.理解Strtus 2 的工作流程;3.掌握Struts 2 的web.xml和struts.xml文件配置。
二.实验任务1. 搭建Struts 2 的开发环境;2. 实现用户登录。
三.实验环境、设备PC、Tomcat7.0、strtus2.3.4、Eclipse。
四.实验指导4.1 背景知识简述如果在web.xml文件中配置了FilterDispatcher过滤器,且关联了action资源,当用户发送一个以.action结尾的请求后,Struts2框架将根据*.action请求前面的”*”来决定调用哪个业务。
struts.xml配置文件起映射作用,它根据”*”来决定调用用户定义的哪个Action类。
Struts2的拦截器负责将HttpServletRequest请求中的请求参数解析出来,传入到用户定义的Action类中,然后再调用其execute()方法处理用户请求,处理结束会返回一个值,此时,Struts框架又起映射作用,会根据其返回值来决定跳转到哪个页面。
4.2 试验内容根据本单元已学的Struts 2的相关知识完成图书馆管理系统的用户登录模块的设计,要求如下:(1)当首次登录页面时,程序提示用户“您尚未登录,请登陆”。
(2)单击“登录超链接”,系统会自动跳转到登陆页面。
(3)在登录页面中,若用户在文本框和密码框什么都不输入,就单击“确定”按钮,则该页面会出现“用户名不能为空”和“密码不能为空”的提示性信息。
(4)当用户输入的用户名和密码错误时,即用户名和密码不是指定的用户名和密码,系统会在当前页面上显示“用户名和密码出错”,要求用户重新输入。
(5)如果用户输入的用户名和密码无误,就会跳转到成功页面,在成功登录页面上显示当前登录的用户名和详细信息。
(6)用户输入的用户名和密码可以是数字和中英文字符等。
4.3 实验步骤1. 搭建Struts 2 开发环境;2. 建立一个Web Project(命名为struts_0101),并添加Struts 2 jar 包;3. 编写登录页面(login.jsp)、登录成功(login_success.jsp)和登录失败页面(login_fail.jsp);4. 编写Ation实现类,继承ActionSupport,重写execute()方法;5. 配置web.xml;6. 配置struts.xml;7. 部署、启动Tomcat;8. 运行:在IE地址栏输入http://localhost:8080/struts_0101/login.jsp4.4 源代码清单Login.jsp:<%@page language="java"contentType="text/html; charset=utf-8"pageEncoding="utf-8"%><%@page import="java.util.UUID"%><%String path = request.getContextPath() + "/"; //context 上下文(环境)String basePath = request.getScheme() + "://" +request.getServerName() + ":" + request.getServerPort() + path;String str = UUID.randomUUID().toString();%><!DOCTYPE html PUBLIC"-//W3C//DTD HTML 4.01 Transitional//EN" "/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type"content="text/html; charset=utf-8"> <title>login.jsp</title><script type="text/javascript">function denglu(){var userName = document.getElementsByName("userName").value;var password = document.getElementsByName("password").value;if(userName==""){alert("用户名不能为空");}else if(password==""){alert("密码不能为空");}else{var req =new XMLHttpRequest();req.onreadystatechange =function(){if(req.readyState ==4){var data = req.responseText;//响应数据if(data>0){location.href="success。
STRUTS2实验报告1. 系统分析与设计 1.1 系统功能描述本系统是个非常简单的注册、登录系统。
本系统的实现是基于struts2、spring、hibernate三个框架,系统功能单一,业务逻辑简单。
当用户注册信用户时,就是向系统中增加一个新用户,对应的数据库增加一条记录。
当用户输入注册信息时,系统提供了基本的输入验证判断用户输入是否合法,只有当用户输入满足基本输入要求时,才会被提交到实际的登录系统,进行实际的登录处理。
系统还使用了随机产生的图形验证码来防止刷新,防止用户通过单击浏览器的书安心按钮来重复注册多个用户。
系统还提供了一种ajax方式来验证用户输入的注册名是否有效,系统要求所有的用户名不能重复。
故当用户输完用户名后,系统立即在页面上方提示用户该用户名是否可用,如果系统中没有该用户名,则系统提示该用户名可用;否则提示用户该用户名重复,用户必须重新选择用户名注册。
当用户注册一个新用户名之后,就可以使用系统的登录功能来登录系统了,用户输入登录用的用户名、密码后,系统一样提供了基本的输入校验。
除此之外,系统还采用了随机产生图形验证码来防止恶意用户的暴力破解,系统随机生成一个图形验证码,而用户登录必须输入图形验证码中显示的字符串,只有用户输入的字符串和系统随机生成的验证码字符相同时,系统才允许用户登录。
1.2 系统功能流程1.3 数据库设计相关的映射文件:<hibernate-mappingpackage= <classname=user table=user_table> <id name=idcolumn=user_id> <generatorclass=identity</id> nique=true/><propertyname==user_passnot-null=true length=50/> <propertyname=emaillength=100/> </class> <propertyname=usercolumn=</hibernate-mapping> 一旦提供了上面的映射文件,hibernate就可以理解user和user_table之间的对应关系。
Struts2中的属性驱动和模型驱动Struts2中的属性驱动和模型驱动2Struts2中的异常处理机制ognl表达式Struts2中文件的上传和下载拦截器Struts2中的输入校验Struts2中的类型转换使用Annotation取代struts.xml配置Struts2中文乱码处理Struts2常用标签UI标签的主题设置Struts2与AJAX交互◆驾驭XML数据◆驾驭JSON数据第一个Struts2程序当我们在一个新的工作空间中创建一个Web项目的时候首先要将我们自己的Tomcat绑定到MyEclipse中。
接下来我们可以使用自己安装的JDK,Windows→Preferences→输入Installed JREs建一个Web Project拷struts.xml(可从下载的struts目录下的示例中拷)。
将<struts>标签下的内容都注释掉,这样自己写的时候可供参考。
拷struts2所需要的lib,直接从示例中拷,只需要8个(首字母以c、c、c、f、j、o、s、x 开头,其中的javaassist包一定不能少)查看项目目录在磁盘上的结构:Window→Show View→Navigator在web.xml文件中配置Struts2的核心控制器(直接从示例中拷)下面我们修改struts.xml文件,添加以下配置:<package name="default" namespace="/" extends="struts-default"><action name="hello"><result>/Hello.jsp</result></action></package>我们将原来的index.jsp改名为Hello.jsp,打开该JSP文件(使用MyEclipse JSP Editor打开,不要使用默认的图形编辑器打开,这样速度很慢),适量修改一下页面信息。
J2EE实验报告
学号姓名班级
上课地点实1#307 教师上课时间
实验二Struts标签
1. 实验目的
1.1.熟悉Struts一般标签;
1.2.熟悉Struts的UI标签;
2. 实验环境
2.1 MyEclipse
2.2 Window XP
2.3 MySQL
3. 实验内容
1、联系struts的标签property、if、elseif、else、iterator等;
2、实现doubleselect(optiontransferselect)数据的动态加载。
4. 教师批改意见
成绩
签字:
日期:
实验报告细表
1功能描述(举例)
Strust2框架的标签使用,包括一般标签和UI标签。
其中,一般标签包括if/elsif/else、iterator、sort、date、il8n、text、include、param、property、set、url等。
UI标签包括表单标签和非表单标签,例如表单标签包括form,checkbox,radio,label,file,hidden,select,textfiled,texrarea,submit等,非表单UI部分常用的有actionerror,actionmessage,fielderror等。
2功能流程(举例)
login.jsp login.action
输入校验失败(input result)
登录成功
登录失败(failure result)
success.jsp
3关键代码_截图,不要复制黏贴(举例)
3.1 JSP 部分的关键代码
只要截取action部分的代码就可以了,若有多个jsp,就标注一下,比如:index.jsp
Success.jsp
3.2 struts.xml. 部分的关键代码
3.3 Actionclass的关键代码
只要method就可以了,若涉及到多个class就标注一下,比如:LoginAction.java :
4实验结果(举例)登录页面:
登录结果:
5心得体会
如果select 显示所有的部门,另一个select 显示该部门的所有员工。
为了达到这种效果,肯定要先从数据库中取出所有部门,为第一个select加载选项,从数据库中选取属于该部门的所有员工,为第二个select加载选项。
多级则继续根据条件查询,加载,操作一样。
关键是如何把第一个select 所选的值传到第二个select ,准确来说是传递参数给下一个查询语句像<% UserDB.getBySection (section);%>的section。