实验2Struts2入门.docx
- 文档编号:10621964
- 上传时间:2023-02-21
- 格式:DOCX
- 页数:15
- 大小:295.14KB
实验2Struts2入门.docx
《实验2Struts2入门.docx》由会员分享,可在线阅读,更多相关《实验2Struts2入门.docx(15页珍藏版)》请在冰豆网上搜索。
实验2Struts2入门
实验2Struts2入门
一.目的要求
1.掌握Struts2开发环境的搭建;
2.理解Strtus2的工作流程;
3.掌握Struts2的web.xml和struts.xml文件配置。
二.实验任务
1.搭建Struts2的开发环境;
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试验内容
根据本单元已学的Struts2的相关知识完成图书馆管理系统的用户登录模块的设计,要求如下:
(1)当首次登录页面时,程序提示用户“您尚未登录,请登陆”。
(2)单击“登录超链接”,系统会自动跳转到登陆页面。
(3)在登录页面中,若用户在文本框和密码框什么都不输入,就单击“确定”按钮,则该页面会出现“用户名不能为空”和“密码不能为空”的提示性信息。
(4)当用户输入的用户名和密码错误时,即用户名和密码不是指定的用户名和密码,系统会在当前页面上显示“用户名和密码出错”,要求用户重新输入。
(5)如果用户输入的用户名和密码无误,就会跳转到成功页面,在成功登录页面上显示当前登录的用户名和详细信息。
(6)用户输入的用户名和密码可以是数字和中英文字符等。
4.3实验步骤
1.搭建Struts2开发环境;
2.建立一个WebProject(命名为struts_0101),并添加Struts2jar包;
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.jsp
4.4源代码清单
Login.jsp:
<%@pagelanguage="java"contentType="text/html;charset=utf-8"
pageEncoding="utf-8"%>
<%@pageimport="java.util.UUID"%>
<%
Stringpath=request.getContextPath()+"/";//context上下文(环境)
StringbasePath=request.getScheme()+":
//"+request.getServerName()+":
"+request.getServerPort()+path;
Stringstr=UUID.randomUUID().toString();
%>
DOCTYPEhtmlPUBLIC"-//W3C//DTDHTML4.01Transitional//EN""http:
//www.w3.org/TR/html4/loose.dtd">
functiondenglu(){
varuserName=document.getElementsByName("userName").value;
varpassword=document.getElementsByName("password").value;
if(userName==""){
alert("用户名不能为空");
}elseif(password==""){
alert("密码不能为空");
}else{
varreq=newXMLHttpRequest();
req.onreadystatechange=function(){
if(req.readyState==4){
vardata=req.responseText;//响应数据
if(data>0){
location.href="success。
jsp?
un="+username;
}else{
alert("用户名或密码错误");
}
}
}
req.open("post","Login.action",true);
req.setRequestHeader("Content-type","application/x-www-form-urlencoded");
req.send("username="+userName+"&password="+password);
}
}
500px;width: 450px;float: left">
400px;width: 350px;float: left;border: 10"> 会员名: 25px;width: 220px"name="userName"value=""/> 密 码: 25px;width: 220px"type="password"name="password"value=""/> 40px;width: 290px;sborder: 0;font-size: 17px;"type="button"value="登录"onclick="denglu()"/>
loginAction:
packagecom.huyue.actions;
importjava.util.ArrayList;
importjava.util.Map;
importjavax.servlet.http.HttpServletRequest;
importcom.huyue.models.UserModel;
importcom.huyue.tools.JDBCTools;
publicclassLoginAction{
privateUserModelum;
HttpServletRequestrequest;
publicvoidexecute(){
}
publicStringfind(){
System.out.print("进入findAction");
Stringun=um.getUserName();
Stringpw=um.getPassword();
Stringsql="select*frombookinfowhereusername='"+un+"'";
JDBCToolsjt=newJDBCTools();
ArrayList
Map
Stringpw1=rsMap.get("PASSWORD");
if(pw.equals(pw1)){
System.out.println("--------------登陆成功");
request.setAttribute("un",um.getUserName());
return"success";
}else{
return"saveError";
}
}
publicUserModelgetUm(){
returnum;
}
publicvoidsetUm(UserModelum){
this.um=um;
}
}
Struts.xml:
xmlversion="1.0"encoding="UTF-8"?
>
DOCTYPEstrutsPUBLIC
"-//ApacheSoftwareFoundation//DTDStrutsConfiguration2.1//EN"
"http:
//struts.apache.org/dtds/struts-2.1.dtd">
--package是struts意义上的包-->
Web.xml:
xmlversion="1.0"encoding="UTF-8"?
>
xmlns=" xmlns: xsi="http: //www.w3.org/2001/XMLSchema-instance" xsi: schemaLocation=" org.apache.struts2.dispatcher.FilterDispatcher JDBCTools: publicArrayList ArrayList try{ rsList=newArrayList Class.forName("com.mysql.jdbc.Driver"); Connectionconn=DriverManager.getConnection("jdbc: mysql: //localhost: 3308/test","huyue","huyue"); Statementstmt=conn.createStatement(); ResultSetrs=stmt.executeQuery(sql); ResultSetMetaDatarsmd=rs.getMetaData(); while(rs.next()){ Map for(inti=1;i<=rsmd.getColumnCount();i++){ StringcolumnName=rsmd.getColumnName(i); Stringvalue=rs.getString(columnName); rsMap.put(columnName,value); } rsList.add(rsMap); } }catch(Exceptione){ e.printStackTrace(); } returnrsList; } UserModel: packagecom.huyue.models; publicclassUserModel{ privateintuserid; privateStringuserName; privateStringpassword; privateStringsex; privateintage; privateStringtelNum; privateStringemail; publicintgetUserid(){ returnuserid; } publicvoidsetUserid(intuserid){ this.userid=userid; } publicStringgetUserName(){ returnuserName; } publicvoidsetUserName(StringuserName){ this.userName=userName; } publicStringgetPassword(){ returnpassword; } publicvoidsetPassword(Stringpassword){ this.password=password; } publicStringgetSex(){ returnsex; } publicvoidsetSex(Stringsex){ this.sex=sex; } publicintgetAge(){ returnage; } publicvoidsetAge(intage){ this.age=age; } publicStringgetTelNum(){ returntelNum; } publicvoidsetTelNum(StringtelNum){ this.telNum=telNum; } publicStringgetEmail(){ returnemail; } publicvoidsetEmail(Stringemail){ this.email=email; } } 4.5运行结果截图 4.6回答问题 1.简述Struts2的体系结构。 答: Struts2是一个上拉型MVC框架。 在Struts2的模型-视图-控制器模式,实现以下五个核心部件: Actions,Interceptors,ValueStatck/OGNL,Results/Resulttypes,Viewtechnologies. 2.简述Struts2的工作机制。 答: Struts2与WebWork的工作方式类似,它同样使用了拦截器作为其处理用户请求的控制器。 在Struts2中有一个核心控制器FilterDispatcher,这个核心控制器相当于Struts1的ActionServlet类。 FilterDispatcher负责处理用户的所有请求,如果遇到以“.action”结尾请求的URL,就会交给Struts2框架来处理,具体步骤如下: (1)客户端浏览器发送请求,此时客户端会初始化一个指向Servlet容器的请求。 (2)这个请求要经过一系列的过滤器(3)接着核心控制器FilterDispatcher被调用,FilterDispatcher询问ActionMapper来决定是否调用action以及调用哪个action(4)如果ActionMapper决定需要调用某个action,FilterDispatcher把请求的处理交给ActionProxy(5)ActionProxy通过ConfigurationManager询问框架的配置文件,找到需要调用的action(6)ActionProxy创建一个ActionInvocation的实例(7)ActionInvocation实例使用命名模式来调用,在调用Action的execute()方法之前,struts2回调用一系列的拦截器以提供一些通用的功能。 (8)在调用完拦截器链之后,struts2会调用action的execute方法(9)一旦action执行完毕,ActionInvocation负责根据struts.xml中的配置找到相应的返回结果。 3.叙述实验中的struts.xml文件中,各个元素代表的含义,以及struts.xml在工程中的位置。 答: (1) --package是struts意义上的包--> —result配置元素: result元素代表一个可能的输出。 当action类的方法完成时,将返回一个字符串类型的结果码,框架就根据这个结果码选择对应的result元素,向用户输出。 --> (2)struts.xml是Struts2的核心配置文件,通常放在Web应用程序的WEB-INF/classes目录下
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验 Struts2 入门