STRUTS2实验报告

合集下载

Struts2漏洞测试书面报告

Struts2漏洞测试书面报告

Struts2漏洞测试书⾯报告Struts2 漏洞测试报告信息化建设处2016年6⽉15⽇Struts2 漏洞测试报告0.前期⼯作准备前期的⼯作主要围绕以下⼏个⽅⾯进⾏:分析从2014年以来Struts2官⽅所披露的⼏个⾼危/重要漏洞的版本号、形成的原因、影响的范围以及修复的建议。

了解乌云知识库⾥对相关漏洞原理的分析对学校218和216⽹段的所有开启“Apache Tomcat/Coyote JSP”服务的IP进⾏扫描,并根据服务器所属的业务,对⽬标IP进⾏分类处理。

0.1Struts2重要漏洞的类型纵观2014年以来Struts2官⽅所披露的各种漏洞,归纳起来,主要有3种类型:“classLoader导致特定环境下的DOS漏洞”、“开启DMI导致的远程代码执⾏漏洞”和“使⽤REST插件导致的远程代码执⾏漏洞”。

本次测试根据此3种类型,选取具有代表性的⼏个重要漏洞进⾏分析。

S2-037[1]:2016年6⽉16⽇,乌云漏洞报告平台,报告了⼀份最新的S2-037漏洞(官⽅⽹站仍未正式更新)。

主要原因是使⽤REST插件导致的远程代码执⾏漏洞,受影响的版本号为2.3.20-2.3.28.1。

S2-032[2]:2016年4⽉21⽇Struts2官⽅发布S2-032漏洞,评级为⾼。

主要原因是在开启动态⽅法调⽤(Dynamic Method Invocation,DMI)的情况下,会被攻击者实现远程代码执⾏攻击,受影响的版本号为2.3.18-2.3.28 ( 2.3.20.2和2.3.24.2除外)。

S2-021/S2-020[3][4]:2014年左右频繁爆发的漏洞类型主要是“classLoader导致特定环境下的DOS漏洞”,受影响的版本号为2.0.0 - 2.3.16.1。

0.2Nmap扫描结果与分类在分析测试之前,由于没有218和216段服务器的相关资料,为了避免盲⽬地进⾏测试,因此,选⽤nmap⼯具,对218和216段(⼀共512个IP)进⾏扫描,从⽽得到所有开启“Apache Tomcat/Coyote JSP”服务的IP地址。

实验六 Struts2 的开发应用

实验六  Struts2 的开发应用

实验六Struts2 的开发应用网络11-2班3110757214 陈宇鹏一、实验目的理解MVC设计模式的基本概念和Java Web开发的两种模式Model1和Model2,以及Struts开发工作流程和基本应用。

二、实验要求1.掌握Struts2.0的开发环境的建立。

2.理解Struts的框架原理。

3.掌握Struts的工作流程。

4.掌握Struts2.0的基本应用。

三、实验内容(一)Struts2的文件上传1.文件上传页面,其中包含两个表单域:文件标题和文件浏览域♦程序功能:上传页面,包含两个表单域。

♦程序源码:upload.html<html xmlns="/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=GBK" /><title>简单的文件上传</title></head><body><form action="upload.action" method="post" enctype="multipart/form-data">文件标题:<input type="text" name="title" /><br>选择文件:<input type="file" name="upload" /><br><input value="上传" type="submit" /></form></body></html>2.处理上传请求的Action类程序源码:UploadAction.javapublic class UploadAction extends ActionSupport{private String title;private File upload;private String uploadContentType;private String uploadFileName;//接受依赖注入的属性private String savePath;//接受依赖注入的方法public void setSavePath(String value){this.savePath = value;}private String getSavePath() throws Exception{return ServletActionContext.getRequest().getRealPath(savePath);}public void setTitle(String title) {this.title = title;}public void setUpload(File upload) {this.upload = upload;}public void setUploadContentType(String uploadContentType) { this.uploadContentType = uploadContentType;}public void setUploadFileName(String uploadFileName) {this.uploadFileName = uploadFileName;}public String getTitle() {return (this.title);}public File getUpload() {return (this.upload);}public String getUploadContentType() {return (this.uploadContentType);}public String getUploadFileName() {return (this.uploadFileName);}@Overridepublic String execute() throws Exception{System.out.println("开始上传单个文件-----------------------");System.out.println(getSavePath());System.out.println("==========" + getUploadFileName());System.out.println("==========" + getUploadContentType());System.out.println("==========" + getUpload());//以服务器的文件保存地址和原文件名建立上传文件输出流FileOutputStream fos = new FileOutputStream(getSavePath() + "\\" + getUploadFileName());FileInputStream fis = new FileInputStream(getUpload());byte[] buffer = new byte[1024];int len = 0;while ((len = fis.read(buffer)) > 0){fos.write(buffer , 0 , len);}return SUCCESS;}}1.配置文件上传的Action程序源码:Struts.xml<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN""/dtds/struts-2.0.dtd"><struts><constant name="struts.custom.i18n.resources" value="globalMessages"/><constant name="struts.i18n.encoding" value="GBK"/><package name="lee" extends="struts-default"><action name="upload" class="lee.UploadAction"><param name="savePath">/upload</param> <result>/succ.jsp</result></action></package></struts>.部署并浏览该页面。

java基于Struts2的留言板程序

java基于Struts2的留言板程序

实验报告课程名称基于Struts2的留言板程序实验名称JSP编程实验类型设计型实验地点计算机楼304机房实验日期2011年5月10日9~12节指导教师李文超专业计算机科学与技术班级0802学号0811010209姓名李鑫成绩辽宁石油化工大学计算机与通信工程学院一.实验目的:1.掌握Struts2配置2.掌握Struts2标签库的使用;3.掌握Action编写二.实验内容:编写一个小型留言板程序1.实现留言功能;2.查看用户留言;3.利用Struts2验证框架为注册和登录页面增加验证功能。

完成JSP页面及相应的JA VA代码。

数据库结构(仅供参考):(id,message,author,postTime)三.实验环境:JDK1.6/Tomcat 6.0.29/myeclipse6.5/MySQL5.5四.报告要求1.给出数据库表结构2.给出JSP页面和JA VA主要代码3.实验结果(页面抓图)4.实验总结五、实验方案:1.建立用户数据库,和一个user表内容包括(username,password)插入一个用户建立留言版的信息表:create table message(id varchar(30),message varchar(200),author varchar(50),posttime timestamp(6))2.连接数据库3.布置JSP界面4.针对每一个功能点,编写一个action类。

编写相关的结果页面。

针对action返回的结果代码,编写相应的结果页面。

5.利用Struts2验证框架为注册和登录页面增加验证功能。

6.进行测试,调试程序六、实验代码:package login.sql;import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;public class BaseDao {public final static String DRIVER = "oracle.jdbc.driver.OracleDriver";public final static String URL= "jdbc:oracle:thin:@127.0.0.1:1521:myoracle";public final static String DBNAME = "scott";public final static String DBPASS = "123456";public static Connection getConnect() throws ClassNotFoundException, SQLException {Class.forName(DRIVER);return DriverManager.getConnection(URL, DBNAME, DBPASS);}public static void closeAll( Connection conn, PreparedStatement pstmt, ResultSet rs ) {if(rs != null){try { rs.close();} catch (SQLException e) {e.printStackTrace();}}if(pstmt != null){try { pstmt.close();} catch (SQLException e) {e.printStackTrace();} }if(conn != null){try { conn.close();} catch (SQLException e) {e.printStackTrace();} }}public static int executeSQL(String preparedSql,String[] param) {Connection conn = null;PreparedStatement pstmt = null;int num = 0;try {conn = getConnect(); pstmt = conn.prepareStatement(preparedSql);if( param != null ) {for( int i = 0; i < param.length; i++ ) {pstmt.setString(i+1, param[i]); }}num = pstmt.executeUpdate(); } catch (ClassNotFoundException e) {e.printStackTrace(); } catch (SQLException e) {e.printStackTrace(); } finally {closeAll(conn,pstmt,null);}return num;}}package login.bean;public class User {private String userName;private String password;public String getUserName() {return userName;}public void setUserName(String userName) {erName = userName;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}}package login.action;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.util.Map;import er;import login.sql.*;import org.apache.struts2.interceptor.RequestAware;import org.apache.struts2.interceptor.SessionAware;import com.opensymphony.xwork2.ActionSupport;public class LoginAction extends ActionSupport implements SessionAware,RequestAware{private User user;private int id;//method 2private Map session;private Map request;private Connection con;private PreparedStatement pstmt;private ResultSet rs;public Map getRequest() {return request;}public void setRequest(Map request) {this.request = request;}public Map getSession() {return session;}public void setSession(Map session) {this.session = session;}public int getId() {return id;}public void setId(int id) {this.id = id;}public User getUser() {return user;}public void setUser(User user) {er = user;}public String execute() throws Exception {if(null==user)return INPUT;String sql="select count(*)from users where userName=? and password=?";pstmt=BaseDao.getConnect().prepareStatement(sql);pstmt.setString(1, user.getUserName());pstmt.setString(2,user.getPassword());rs=pstmt.executeQuery();if(rs.next()){session.put("user", user);return SUCCESS;}elsereturn INPUT;}}JSP代码:<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%@ taglib prefix="s" uri="/struts-tags" %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><title>Login</title><meta http-equiv="pragma" content="no-cache"><meta http-equiv="cache-control" content="no-cache"><meta http-equiv="expires" content="0"><meta http-equiv="keywords" content="keyword1,keyword2,keyword3"><meta http-equiv="description" content="This is my page"><!--<link rel="stylesheet" type="text/css" href="styles.css">--></head><body><form name="loginForm" action="login.action?id=123" method="post"><div align="center"><br>用户名:<input type="text" name="erName"><br></div><div align="center"><br>密码:<input type="password" name="user.password"><br><input type="submit" value=" 登录 "></div></form></body></html><%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%@ taglib prefix="s" uri="/struts-tags" %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><title>index</title><meta http-equiv="pragma" content="no-cache"><meta http-equiv="cache-control" content="no-cache"><meta http-equiv="expires" content="0"><meta http-equiv="keywords" content="keyword1,keyword2,keyword3"><meta http-equiv="description" content="This is my page"><!--<link rel="stylesheet" type="text/css" href="styles.css">--></head><body>Welcome to jsp. <br><br>用户名:<s:property value="erName"/><br/>密码:<s:property value="user.password"/></body></html>七.实验结果:注册验证:八.实验总结本次是实验主要在java中使用jsp编程来制作一个简单的登录界面,利用jsp来实现动态网站的制作。

Struts2实践总结

Struts2实践总结

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打开,不要使用默认的图形编辑器打开,这样速度很慢),适量修改一下页面信息。

实验六 Struts2 Action实验(一)

实验六 Struts2 Action实验(一)

实验六 Struts2 Action实验(一)
一、实验目的:
熟悉Struts2 Action类的基本用法,掌握Struts2 Action类在MVC程序开发中的编写和应用,初步实现CRUD编程。

二、实验内容:
在MyEclipse环境下运用Struts2技术改写实验四内容,完成相应的数据库CRUD功能,调试运行程序。

三、实验要求:
1. 掌握运用Struts2 开发MVC程序的基本步骤;
2. 掌握Struts2 Action接收请求参数、调用业务逻辑、封装结果数据并转向结果页面的
用法
3. 掌握在struts.xml文件中对Struts2 Action的基本配置;
4. 运用相关技术(Struts2以及JDBC等)完成规定功能;
5. 写出实验报告。

四、实验学时:2学时
五、实验步骤:
1.进入MyEclipse环境,新建一个Web Project;
2. 设计一个数据库,包括出版社表和书籍表,出版社表字段包括序号(自增主键)、出版
社编码和出版社名称,书籍表字段包括序号(自增主键)、书号、书名、作者、价格和出版社;
3. 采用Struts2技术完成出版社基本信息管理模块的主要功能,包括:
3.1 设计封装了出版社表信息的JavaBean;
3.2 设计封装了针对出版社表信息进行CRUD操作的工具JavaBean(DAO类);
3.3 设计并开发页面
3.4 设计并开发Action控制器
3.5. 完成显示所有出版社信息的功能;
3.6. 完成对出版社信息的增加功能;
4. 调试运行程序。

六、选作实验
1. 完成对出版社信息的条件查询功能;
2. 完成对出版社信息的修改和删除功能。

网络工程网络编程实验报告7-struts2程序

网络工程网络编程实验报告7-struts2程序

《J2EE程序设计与应用开发》实验报告实验序号:07 实验项目名称:struts2程序学号姓名专业、班20网络工程实验地点指导教师实验时间2022一、实验目的及要求1、利用Struts编写用户登录。

二、实验设备(环境)及要求一台Windows XP、JDK1.6、MyEclipse 8.5三、实验内容与步骤四、实验结果与数据处理1、输入相同的账号和密码2、输入不同的账号和密码附源程序清单:1、Login.jsp<%@ page language="java" import="java.util.*" pageEncoding="UTF-8" contentType="text/html; charset=UTF-8"%><html><body><form action="/prj14/login.action" method="post">请您输入账号:<input name="account" type="text"><br>请您输入密码:<input name="password" type="password"><br><input type="submit" value="登录"></form></body></html>2、LoginSuccess.jsp<%@ page language="java" import="java.util.*" pageEncoding="UTF-8" contentType="text/html; charset=UTF-8"%><html><body>登录成功</body></html>3、LoginFail.jsp<%@ page language="java" import="java.util.*" pageEncoding="UTF-8" contentType="text/html; charset=UTF-8"%><html><body>登录失败</body></html>LoginActionpackage prj14;public class LoginAction {private String account;public String getAccount(){return account;}public void setAccount(String account){this.account=account;}private String password;public String getPassword(){return password;}public void setPassword(String password){this.password = password;}public String execute() throws Exception{if(account.equals(password)){return "success";}return "fail";}}6、struts.xml<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "/dtds/struts-2.1.dtd"><struts><package name="struts2" extends="struts-default"><action name="login" class="prj14.LoginAction"><result name="success">/loginSuccess.jsp</result><result name="fail">/loginFail.jsp</result></action></package></struts>。

Struts2全部实验报告

Struts2全部实验报告

实验时间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,查看运行结果。

实验4Struts2的个人信息管理系统项目实训

实验4Struts2的个人信息管理系统项目实训

封装了业务逻辑和数据访问代码,通过 DAO模式实现数据访问。
界面设计
01
02
03
界面风格
采用简洁、明了的界面风 格,使用统一的配色方案 和布局。
导航菜单
设计清晰的导航菜单,方 便用户快速找到所需功能。
输入表单
提供友好、易用的输入表 单,确保用户能够快速、 准确地输入数据。
数据库设计
数据库选择
采用MySQL数据库,确保数据的 安全性和可靠性。
安全加固
加强系统的安全性措施,如数据加密、 权限控制等,确保系统安全稳定运行。
06 项目总结与展望
项目总结
项目目标达成情况
个人信息管理系统的核心功能,如用户注册、登录、信息 查询、修改和删除等,均已实现。系统运行稳定,用户体 验良好。
团队协作与沟通
团队成员分工明确,沟通顺畅。通过定期的会议和讨论, 及时解决遇到的问题,确保项目进度按计划进行。
技术选型与实现
采用Struts2框架,实现了MVC设计模式,简化了代码结 构,提高了开发效率。同时,结合使用JDBC和SQL实现了 数据库操作。
项目收获与不足
技术能力提升
团队成员通过实践,加深了对 Struts2框架的理解和应用。
团队协作经验
成员间通过合作,提高了团队协 作和沟通能力。
项目收获与不足
项目范围
01
本项目主要涉及个人信息管理相 关的功能模块,不涉及其他复杂 业务逻辑和功能模块。
02
重点在于掌握Struts2框架在Web 应用开发中的应用,熟悉MVC设 计模式,了解Java Web开发的相 关技术和工具。
02 系统需求分析
用户角色分析
总结词
用户角色分析是系统需求分析的重要环节,需要明确系统中的不同用户角色及 其权限和功能需求。

实验六 Struts2开发(二)

实验六 Struts2开发(二)

实验五Struts 2开发(二)【实验目的】:1.进一步掌握Struts应用程序开发的步骤2.理解拦截器的机制和作用3.掌握拦截器的开发、配置和引用。

4.理解如何使用Struts2框架实现文件上传和下载。

【实验内容】:开发和使用拦截器;利用Struts 2框架实现文件上传。

【实验步骤】:(一) 拦截器的使用拦截器是动态拦截Action调用的对象。

它提供一种机制,使开发者可以定义一段代码,在Action执行之前或之后被调用执行,也可以在一个Action执行前阻止其执行。

同时也提供了一种可以提取Action中可重用部分的方式。

Struts 2设计的灵巧性,很大程度上得益于拦截器设计,拦截器几乎完成了Struts 2框架70%的工作,包括解析请求参数、将请求参数赋值给Action属性、执行数据校验、文件上传等。

当需要扩展Struts 2功能时,只需要提供对应拦截器,并将它配置在Struts 2容器中即可,如果不需要该功能,也只需取消该拦截器的配置即可。

Struts 2内建了大量的拦截器,这些拦截器以name-class对的形式配置在struts-default.xml文件中。

打开此文件,观察其结构和内容。

simpleInterceptor应用程序的开发步骤(1)在MyEclipse的workspace中新建Web工程simpleInterceptor。

导入Struts2开发需要用到的类库。

其目录结构如下:(2)将Struts 2框架的支持类文件复制到WebRoot/WEB-INF/lib目录下。

(3)创建包org.crazyit.app.action包,其下建立Action类LoginAction。

当用户访问login.jsp页面时,如果输入用户名:101031.2 密码:student。

LoginAction执行完后将返回SUCCESS视图。

其代码如下:package org.crazyit.app.action;import com.opensymphony.xwork2.ActionSupport;public class LoginActionextends ActionSupport{private String username;private String password;//username的setter和getter方法public void setUsername(String username){ername = username;}public String getUsername(){return username;}//password的setter和getter方法public void setPassword(String password){this.password = password;}public String getPassword(){return password;}public String execute() throws Exception{System.out.println("进入execute方法执行体..........");Thread.sleep(1500);if (getUsername().equals("SE")&& getPassword().equals("student") ){return SUCCESS;}else{return ERROR;}}}(4)创建包org.crazy.app.interceptor包,其下建立拦截器类SimpleInterceptor。

j2ee实验一实验报告

j2ee实验一实验报告

《JAVA EE企业应用开发》综合性、设计性实验成绩单开设时间:2012学年第一学期班级10信管1班学号 1.2010302601332.2010305601313.201030560135 姓名 1.张伟东2.吴雨瑞3.郑易东实验题目实验一开发struts2程序实验成绩教师签名《JAVA EE企业应用开发》实验报告实验题目:开发struts2程序实验指导教师:杨春实验组长(姓名+学号):张伟东201030560133组员(姓名+学号):张伟东201030560133吴雨瑞201030560131郑易东201030560135实验时间:2012年11月组长签名:(手写)2012年12 月 2 日1、实验目的(1分)1).掌握用不同框架模式开发JAVA EE程序;2).使用JSP和不同框架混合模式编写一个简单的用户信息管理系统(具体描述见实验步骤部分)2、实验内容(2分)考虑实现一个数据库单表操作的简单JAVA EE WEB应用,使用struts2 框架框架中的实现.系统需求如下:普通用户功能:用户登录系统;用户注册;修改个人信息;登录后查看系统资源。

系统管理员:全部用户列表;根据姓名模糊查询符合条件的用户或用户列表;删除用户。

3、实验步骤与结果(3分)主要开发步骤如下:1)数据可设计,生成数据库;2)创建web project,名为xs;3)功能模块包划分;4)搭建系统框架;5)普通用户功能实现:注册、登录、修改个人信息等;6)系统管理员功能实现:查询、删除等。

实现结果,截图如下:数据库:Jsp界面(部分):4、架构设计+源码(2分)架构设计如下图:源码(主要):Guanli.actionpackage action;import java.util.Map;import service.IGuanliService;import service.impl.GuanliService;import vo.Guanli;import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionSupport; public class GuanliAction extends ActionSupport{protected Guanli guanli;protected IGuanliService guanliService;protected String username;protected String password;public Guanli getGuanli() {return guanli;}public void setGuanli(Guanli guanli) {this.guanli = guanli;}public IGuanliService getGuanliService() {return guanliService;}public void setGuanliService(IGuanliService guanliService) {this.guanliService = guanliService;}public String getUsername() {return username;}public void setUsername(String username) {ername = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public String execute() throws Exception{Guanlig=guanliService.validateGuanli(guanli.getUsername(),guanli.getPassword());if(g!=null){Map session=ActionContext.getContext().getSession();session.put("guanli", g);return SUCCESS;}else{return ERROR;}}}Zhuce.actionpackage action;import java.util.Map;import service.IZhuceService;import vo.Guanli;import vo.Zhuce;import java.util.List;import com.opensymphony.xwork2.ActionContext;import com.opensymphony.xwork2.ActionSupport;public class ZhuceAction extends ActionSupport{protected Zhuce zhuce;protected IZhuceService zhuceService;private String username;private String password;private String sex;private String address;public Zhuce getZhuce() {return zhuce;}public void setZhuce(Zhuce zhuce) {this.zhuce = zhuce;}public IZhuceService getZhuceService() {return zhuceService;}public void setZhuceService(IZhuceService zhuceService) {this.zhuceService = zhuceService;}public String getUsername() {return username;}public void setUsername(String username) {ername = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}public String getAddress() {return address;}public void setAddress(String address) {this.address = address;}public String execute() throws Exception{Zhucez=zhuceService.validateZhuce(zhuce.getUsername(),zhuce.getPassword());List zcs=zhuceService.getZhuce(zhuce.getUsername());Map request=(Map)ActionContext.getContext().get("request");request.put("zcs", zcs);if(z!=null){Map session=ActionContext.getContext().getSession();session.put("zhuce", z);return SUCCESS;}else{return ERROR;}}public String zc() throws Exception{zhuceService.saveZhuce(zhuce);return SUCCESS;}public String grxx() throws Exception{List zcs=zhuceService.getZhuce(username);Map request=(Map)ActionContext.getContext().get("request");request.put("zcs", zcs);return SUCCESS;}public String sc() throws Exception{zhuceService.dl(zhuce.getUsername());List zcs=zhuceService.getZhuce1();Map request=(Map)ActionContext.getContext().get("request");request.put("zcs", zcs);return SUCCESS;}public String xg() throws Exception{zhuceService.xiugai(zhuce.getUsername(),zhuce.getPassword(),zhuce.getSex(),zhuce.get Address());List zcs=zhuceService.getZhuce(zhuce.getUsername());Map request=(Map)ActionContext.getContext().get("request");request.put("zcs", zcs);return SUCCESS;}public String cz() throws Exception{List zcs=zhuceService.cz(zhuce.getUsername());Map request=(Map)ActionContext.getContext().get("request");request.put("zcs", zcs);return SUCCESS;}}GuanliDaopackage dao.impl;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.Statement;import java.util.List;import dao.BaseDAO;import dao.IGuanliDAO;import vo.Guanli;import org.hibernate.Query;import org.hibernate.Session;import org.hibernate.Transaction;public class GuanliDAO extends BaseDAO implements IGuanliDAO{public Guanli validateGuanli(String username,String password){Session session=getSession();String hql="from Guanli g where ername=? and g.password=?";Query query=session.createQuery(hql);query.setParameter(0,username);query.setParameter(1, password);List guanlis=query.list();if(guanlis.size()!=0){Guanli guanli=(Guanli)guanlis.get(0);return guanli;}session.close();return null;}}ZhuceDaopackage dao.impl;import java.util.List;import dao.BaseDAO;import dao.IZhuceDAO;import vo.Zhuce;import org.hibernate.Query;import org.hibernate.classic.Session;import org.hibernate.Transaction;public class ZhuceDAO extends BaseDAO implements IZhuceDAO{public void saveZhuce(Zhuce zhuce){Session session=getSession();Transaction tx=session.beginTransaction();session.save(zhuce);mit();session.close();}public List getZhuce(String username){Session session=getSession();Query query=session.createQuery("from Zhuce z where ername=?");query.setParameter(0, username);List zcs=query.list();session.close();return zcs;}public List getZhuce1(){Session session=getSession();Query query=session.createQuery("from Zhuce z");List zcs=query.list();session.close();return zcs;}public void dl(String username){Session session=getSession();Query query=session.createQuery("delete Zhuce z where ername=?");query.setParameter(0, username);query.executeUpdate();}public void xiugai(String username,String password,String sex,String address){ Session session=getSession();Query query=session.createQuery("update Zhuce z setername=?,z.password=?,z.sex=?,z.address=? where ername=?");query.setParameter(0, username);query.setParameter(1, password);query.setParameter(2, sex);query.setParameter(3, address);query.setParameter(4, username);query.executeUpdate();}public Zhuce validateZhuce(String username,String password){Session session=getSession();String hql="from Zhuce z where ername=? and z.password=?";Query query=session.createQuery(hql);query.setParameter(0,username);query.setParameter(1, password);List zhuces=query.list();if(zhuces.size()!=0){Zhuce zhuce=(Zhuce)zhuces.get(0);return zhuce;}session.close();return null;}public List cz(String username){Session session=getSession();Query query=session.createQuery("from Zhuce z where ername=?");query.setParameter(0, username);List zcs=query.list();session.close();return zcs;}}Struts.xml<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "/dtds/struts-2.1.dtd"><struts><include file="struts-default.xml"/><package name="default" extends="struts-default"><action name="zc" class="zhuceAction" method="zc"><result name="success">/success.jsp</result></action><action name="grxx" class="zhuceAction" method="grxx"><result name="success">/grxx.jsp</result></action><action name="cz" class="zhuceAction" method="cz"><result name="success">/cz.jsp</result></action><action name="sc" class="zhuceAction" method="sc"><result name="success">/sc.jsp</result></action><action name="xg" class="zhuceAction" method="xg"><result name="success">/xg.jsp</result></action><action name="dl2" class="guanliAction"><result name="success">/dl2s.jsp</result><result name="error">/dl2.jsp</result></action><action name="dl" class="zhuceAction"><result name="success">/dls.jsp</result><result name="error">/dl.jsp</result></action></package></struts>applicationContext.xml<?xml version="1.0" encoding="UTF-8"?><beansxmlns="/schema/beans"xmlns:xsi="/2001/XMLSchema-instance"xmlns:p="/schema/p"xsi:schemaLocation="/schema/beans/schema/beans/spring-beans-3.0.xsd"><bean id="dataSource"class="mons.dbcp.BasicDataSource"><property name="driverClassName"value="com.mysql.jdbc.Driver"></property><property name="url"value="jdbc:mysql://localhost:3306/xs"></property><property name="username" value="root"></property><property name="password" value="123"></property></bean><bean id="sessionFactory"class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"><property name="dataSource"><ref bean="dataSource" /></property><property name="hibernateProperties"><props><prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop></props></property><property name="mappingResources"><list><value>vo/Zhuce.hbm.xml</value><value>vo/Guanli.hbm.xml</value></list></property></bean><bean id="baseDAO" class="dao.BaseDAO" abstract="true"><property name="sessionFactory"><ref bean="sessionFactory"/></property></bean><bean id="zhuceDAO" class="dao.impl.ZhuceDAO" parent="baseDAO"></bean><bean id="zhuceService" class="service.impl.ZhuceService"><property name="zhuceDAO"><ref bean="zhuceDAO"/></property></bean><bean id="zhuceAction" class="action.ZhuceAction"><property name="zhuceService"><ref bean="zhuceService"/></property></bean><bean id="guanliDAO" class="dao.impl.GuanliDAO" parent="baseDAO"> </bean><bean id="guanliService" class="service.impl.GuanliService"><property name="guanliDAO"><ref bean="guanliDAO"/></property></bean><bean id="guanliAction" class="action.GuanliAction"><property name="guanliService"><ref bean="guanliService"/></property></bean></beans>Dl.jsp(登录)<%@ page contentType="text/html;charset=utf-8" %><html><body><form action="dl.action" method="post">用户名:<input type="text" name="ername"/><br>密码:<input type="password" name="zhuce.password"/><br> <input type="submit" value="登录"></form></body></html>Grxx.jsp(显示会员信息)<%@ page contentType="text/html;charset=utf-8" %><%@ taglib prefix="s" uri="/struts-tags" %><html><head></head><body><s:iterator value="#request['zcs']" id="zhuce"><s:property value="#ername"/><s:property value="#zhuce.password"/><s:property value="#zhuce.sex"/><s:property value="#zhuce.address"/></s:iterator><a href="dls.jsp">返回</a></body></html>Zhuce.jsp(注册)<%@ page contentType="text/html;charset=utf-8" %><HTML> <BODY><table align="center"><tr><td height=50></td></tr><tr><td><form action="zc.action" method="post">用户名:<br><input type="text" name="ername"/><p>密码:<br><input type="password" name="zhuce.password"/><p>性别:<br><input type="text" name="zhuce.sex"/><p>地址:<br><input type="text" name="zhuce.address"/><p><input type="submit" value="注册" ></form> </td></tr><tr><td><a href="d.jsp">登录</a></td></tr></table></BODY></HTML>5、结论与讨论(2分)通过这次实验,我们小组成员认识到应用框架的方便之处和它的强大之处,虽然只是应用了其中的一小部分,但为接下去的学习打下基础。

实验3 Struts2 应用

实验3 Struts2 应用

南京信息工程大学实验(实习)报告实验(实习)名称 Struts2 应用实验(实习)日期 2015.6.1得分指导教师方忠进专业计算机科学与技术年级 2012 班次 1 姓名施健学号 20102308021一、实验目的1. 通过实例开发,熟练掌握Struts2标签的应用。

2. 熟练掌握Struts2的工作流程及相关配置文件。

二、实验内容1、StrutsAction.javapackage org.action;import java.util.Map;import com.opensymphony.xwork2.ActionContext;import com.opensymphony.xwork2.ActionSupport;public class StrutsAction extends ActionSupport{private String name;public String getName() {return name;}public void setName(String name) {=name;}public String execute() throws Exception {if(!name.equals("HelloWorld"){Map request=(Map)ActionContext.getContext().get("request");request.put("name",getName());return SUCCESS;}else{return ERROR;}}public void validate() {//如果姓名为空,则把错误信息添加到Action类的fieldErrorsif(this.getName()==null||this.getName().trim().equals("")){addFieldError("name","姓名是必须的!"); //把错误信息保存起来}}}2、package action;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.InputStream;import java.io.OutputStream;import com.opensymphony.xwork2.ActionSupport;import com.sun.java_cup.internal.internal_error;public class UploadAction extends ActionSupport{private File upload; //上传文件private String uploadFileName; //上传的文件名public File getUpload() {return upload;}public void setUpload(File upload) {this.upload=upload;}public String execute() throws Exception {// TODO Auto-generated method stubInputStream is=new FileInputStream(getUpload()); //根据上传的文件得到输入流OutputStream os=new FileOutputStream("d:\\upload\\"+uploadFileName); //指定输出流地址byte buffer[]=new byte[1024];int count=0;while((count=is.read(buffer))>0){os.write(buffer,0,count); //把文件写到指定位置的文件中}os.close(); //关闭is.close();return SUCCESS; //返回}public String getUploadFileName() {return uploadFileName;}public void setUploadFileName(String uploadFileName) {this.uploadFileName=uploadFileName;}}3、package action;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.InputStream;import java.io.OutputStream;import java.util.List;import com.opensymphony.xwork2.ActionSupport;public class UploadAction extends ActionSupport{private List<File> upload; //上传的文件内容,由于是多个,用List集合private List<String> uploadFileName; //文件名public String execute() throws Exception {if(upload!=null){for (int i=0; i < upload.size(); i++) { //遍历,对每个文件进行读/写操作InputStream is=new FileInputStream(upload.get(i));OutputStream os=newFileOutputStream("d:\\upload\\"+getUploadFileName().get(i));byte buffer[]=new byte[1024];int count=0;while((count=is.read(buffer))>0){os.write(buffer,0,count);}os.close();is.close();}}return SUCCESS;}public List<File> getUpload() {return upload;}public void setUpload(List<File> upload) {this.upload=upload;}public List<String> getUploadFileName() {return uploadFileName;}public void setUploadFileName(List<String> uploadFileName) {this.uploadFileName=uploadFileName;}}4、<%@ page language="java" pageEncoding="utf-8"%><%@ taglib uri="/struts-tags" prefix="s"%><html><head><s:head /></head><body ><h3>添加学生信息</h3><s:form action="save.action" method="post" theme="simple"><table><tr><td>学号:</td><td><s:textfield name="xs.xh"></s:textfield></td></tr><tr><td>姓名:</td><td><s:textfield name="xs.xm" ></s:textfield></td></tr><tr><td>性别:</td><td><s:radio name="xs.xb" list="#{1:'男',2:'女'}" value="1"></s:radio></td></tr><tr><td>专业:</td><td><s:textfield name="xs.zy" label="专业"></s:textfield></td></tr><tr><td width="70">出生时间:</td><td><s:datetimepicker name="xs.cssj" id="cssj"displayFormat="yyyy-MM-dd" ></s:datetimepicker></td> </tr><tr><td> 备注:</td><td><s:textarea name="xs.bz" label="备注"></s:textarea></td></tr><tr><td><s:submit value="添加"></s:submit></td><td><s:reset value="重置"></s:reset></td></tr></table></s:form></body></html>package org.work;import java.sql.*;import org.model.Xsb;public class DBConn {Connection conn;PreparedStatement pstmt;public DBConn(){try{Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");conn=DriverManager.getConnection("jdbc:sqlserver://localhost:1433;" +"databaseName=XSCJ","liuyanbo","123456");}catch(Exception e){e.printStackTrace();}}// 添加学生public boolean save(Xsb xs){try{pstmt=conn.prepareStatement("insert into XSB values(?,?,?,?,?,?)");pstmt.setString(1, xs.getXh());pstmt.setString(2, xs.getXm());pstmt.setByte(3, xs.getXb());pstmt.setString(4, xs.getZy());pstmt.setDate(5, xs.getCssj());pstmt.setString(6, xs.getBz());pstmt.executeUpdate();return true;}catch(Exception e){e.printStackTrace();return false;}}}6、package org.action;import org.model.Xsb;import org.work.DBConn;import com.opensymphony.xwork2.ActionSupport;public class SaveAction extends ActionSupport{private Xsb xs;public Xsb getXs() {return xs;public void setXs(Xsb xs) {this.xs=xs;}public String execute() throws Exception {DBConn db=new DBConn();Xsb stu=new Xsb();stu.setXh(xs.getXh());stu.setXm(xs.getXm());stu.setXb(xs.getXb());stu.setZy(xs.getZy());stu.setCssj(xs.getCssj());stu.setBz(xs.getBz());if(db.save(stu)){return SUCCESS;}elsereturn ERROR;}}三、实验总结通过本次实验,了解了struts2框架,知道了如何在项目中配置web.xml以及struts.xml 文件,还接触了标签的使用,收获很多。

struts2实验

struts2实验

(一)S truts2 框架和拦截器编程一、目的1)熟悉Struts2框架编程2)了解熟悉Struts2中拦截器框架的使用,利用拦截器进行一些常见动作的拦截处理。

二、实验要求✧完成Struts2框架编程,实现登陆验证。

✧利用Struts2拦截器实现一个用户权限判断的过程。

三、实验步骤1.编写LoginInterceptor.java,LoginAction.Java;2.编写Error.jsp,Success.jsp,Login.jsp;3.配置structs.xml;要求:首先实现Struts2框架编程,然后再完成基础上添加拦截器编程。

参考代码:附件中。

四、实验总结1、简述Struts 2框架流程。

(1)导入struts2的jar(2)配置web.xml(3)写一个action 继承actionSupport(4)在jsp上写一个form访问action。

(5)配置struts.xml 把action配置上2、拦截器和过滤器的区别。

2、过滤器依赖与servlet容器,而拦截器不依赖与servlet容器3、拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用4、拦截器可以访问action上下文、值栈里的对象,而过滤器不能5、在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次拦截器:是在面向切面编程的就是在你的service或者一个方法前调用一个方法,或者在方法后调用一个方法比如动态代理就是拦截器的简单实现,在你调用方法前打印出字符串(或者做其它业务逻辑的操作),也可以在你调用方法后打印出字符串,甚至在你抛出异常的时候做业务逻辑的操作。

过滤器:是在javaweb中,你传入的request,response提前过滤掉一些信息,或者提前设置一些参数,然后再传入servlet或者struts的 action进行业务逻辑,比如过滤掉非法url(不是login.do的地址请求,如果用户没有登陆都过滤掉),或者在传入servlet或者 struts的action前统一设置字符集,或者去除掉一些非法字符.3、拦截器的工作原理。

Struts 2综合应用实例实验二

Struts 2综合应用实例实验二

实验二:Struts 2综合应用实例——添加学生信息实验要求:运用Struts 2框架,构建一个添加学生信息的项目。

界面如下:实验目的:通过构建一个添加学生信息项目,来综合应用Struts 2的知识点,包括标签、Struts 2配置等。

实验步骤:1. 建立数据库(MySQL)首先建立数据库XSCJ,建立学生表(XSB),表结构如下:相关sql语句:2. 建立Web项目打开MyEclipse,建立一个Web项目,命名为“Example_Struts”。

3. 加载Struts 2的基本类库建议从struts2-blank-2.0.14.war 的\WEB-INF\lib下拷贝,共五个jar包。

4. 修改web.xml5. 建立stu.jsp文件在项目的WebRoot文件夹下建立stu.jsp文件:<html><head><s:head /></head><body ><h3>添加学生信息</h3><s:form action="save.action" method="post" theme="simple"><table><tr><td>学号:</td><td><s:textfield name="xs.xh"></s:textfield></td></tr><tr><td>姓名:</td><td><s:textfield name="xs.xm" ></s:textfield></td></tr><tr><td>性别:</td><td><s:radio name="xs.xb" list="#{1:'男',0:'女'}" value="1"></s:radio></td></tr><tr><td>专业:</td><td><s:textfield name="xs.zy" label="专业"></s:textfield></td></tr><tr><td width="70">出生时间:</td><td><s:datetimepicker name="xs.cssj" id="cssj"displayFormat="yyyy-MM-dd" ></s:datetimepicker></td> </tr><tr><td> 备注:</td><td><s:textarea name="xs.bz" label="备注"></s:textarea></td></tr><tr><td><s:submit value="添加"></s:submit></td><td><s:reset value="重置"></s:reset></td></tr></table></s:form></body></html>6. 建立表对应的JavaBean和DBConn类在src文件夹下新建包“org.model”,在该包下建class文件,命名为“Xsb”,该类中有6个字段,分别为xh、xm、xb、zy、cssj和bz,并生成它们的getter和setter方法,代码如下://生成它们的getter和setter方法public String getXh() {return xh;}public void setXh(String xh) {this.xh = xh;}public String getXm() {return xm;}public void setXm(String xm) {this.xm = xm;}public byte getXb() {return xb;}public void setXb(byte xb) {this.xb = xb;}public String getZy() {return zy;}public void setZy(String zy) {this.zy = zy;}public Date getCssj() {return cssj;}public void setCssj(Date cssj) {this.cssj = cssj;}public String getBz() {return bz;}public void setBz(String bz) {this.bz = bz;}}注意,cssj为java.sql.Date类型。

Struts2综合实验报告

Struts2综合实验报告

沈阳工学院综合实验验收报告题目:论坛系统的设计与实现院系:信息与控制学院专业:计算机科学与技术班级学号: 11301203 11301103 11301228 学生姓名:韩雨辰赫梓屹田皓指导教师:靳新成绩: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论坛系统最基本的功能首先是发表主题,其次是其他人员根据主题发表自己的看法。

此外,为了记录主题的发表者和主题的加复者信息民,系统还需要提供用户注册和登录的功能。

Struts2 实验报告_01

Struts2 实验报告_01
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> create database mydb;
Query OK, 1 row affected (0.01 sec)
mysql> use mydb;
五、附录
1.登陆成功
2.登陆失败
public boolean check(String name,String password){
try{
Class.forName("com.mysql.jdbc.Driver");
Connection con=DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb","root","");
if(rs.next()){
return true;
}
}catch(Exception e){
e.printStackTrace();
}
return false;
}
}
四、实验总结(结果分析和体会)、
次次实验使是我们了解了struts程序的基础操作,其中发现许多不足的地方。只要在不断学习,发现问题,解决问题才能使提高我们自身的水平。
7.创建login.jsp
<body>
<formaction="login.action">
用户名:<inputname="name"/><br/>

实验十(综合实验)struts2和hibernate的整合应用

实验十(综合实验)struts2和hibernate的整合应用

实验十Struts2和hibernate的整合应用一、实验目的1.掌握Struts2和hibernate的整合二、实验环境1.Tomcat2. MyEclipse三、实验描述1. 实验内容及要求:使用Struts2和Hibernate实现以下功能:1)插入几条新闻到数据库中;2)查询所有新闻,并在页面中显示新闻的标题、发布时间,要求对标题设置超链接,点击该链接后新开一个页面显示该新闻标题、发布时间、内容和来源;3)能够修改和删除新闻显示页面中指定的新闻;4)实现标题的模糊查询以及发布时间的范围查询;5)要求使用连接池。

6)要求使用Struts2校验框架按以下要求进行有效性校验:●对新闻标题、新闻内容作非空校验●对新闻标题、新闻来源作长度校验2.要求:1.13周的小课前上传实验报告到FTP,并请保留电子版等候通知随时打印提交2.在报告中必须附上以下截图:1)显示项目的文件结构截图,如下图所示2)显示项目的各个功能的运行结果截图3)请注意:不附截图者扣2分!四.实验步骤:①新建一个Struts2项目②为项目添加hibernate支持③创建持久化类及其映射文件④创建DAO接口及其实现类⑤创建工具类,获取Session对象⑥修改hibernate.cfg.xml⑦创建动作类,在其中调用DAO中的业务方法⑧使用Struts2校验框架校验用户输入数据的有效性:用户和密码都必须输入,确认密码必须等于密码⑨编写struts.xml文件⑩编写客户端JSP文件具体步骤请参考Struts2和hibernate的整合.ppt。

下面将按照DAO的方式完成代码的开发,首先定义VO类,VO类的名称与表的名称一致。

定义对应的vo类——News.java本程序只是一个简单的vo类,包含了属性、getter、setter方法。

其中插入日期时使用的是java.util.Date类。

提示:由于篇幅问题,所以不列举所有setter和getter方法。

实验二 struts 动作新

实验二   struts 动作新

实验二struts 动作一、实验目的及任务通过该实验,掌握Struts action的方法。

二、实验环境及条件主机操作系统为Windows2000或Windows XP,Tomcat6,j2sdk150或以上版本。

三、实验实施步骤1. 到邮箱struts2012@,密码:123456123456下载该实验报告二。

2. 打开myeclipse.,建立一个web project. 选择file—>new web project. 如图如果在new菜单中找不到,可以到other中找。

如图录入工程名project name,选择j2ee specification level :java ee 5.0或者1.4点击finish.4.添加struts类库到工程中鼠标右键点击工程名myproject,选择properties.选择java build path→libraries→点击add External JARs,出现下图找到要添加的jar文件后(可多选),点打开。

最后点击上上图的OK5.拷贝例子程序中web.xml中的以下内容到工程中的web.xml中的<web-app>此处</web-app>中间:<filter><filter-name>struts2</filter-name><filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class> </filter><filter-mapping><filter-name>struts2</filter-name><url-pattern>/*</url-pattern></filter-mapping>6. 在webRoot下建立两个文件login.jsp,loginresult.jsp。

Struts2开发案例

Struts2开发案例

西北师范大学计算机科学与工程学院学生实验报告学号:2013710201072015年10月15日2.Structs2工作原理2.1Container调用控制器(Struts2.1以前FilterDispatcher,以后为StrutsPrepareAndExecuteFilter2.2Controller通过ActionMapper获得Action的信息2.3Controller调用ActionProxy2.4 ActionProxy读取struts.xml文件获取action和interceptor stack的信息2.5ActionProxy把request请求传递给ActionInvocation2.6ActionInvocation依次调用action和interceptor2.7根据action的配置信息,产生result2.8Result信息返回给ActionInvocation2.9产生一个HttpServletResponse响应2.10产生的响应行为发送给客服端。

3.Structs2设计登陆界面login.jsp<%@ page language="java" contentType="text/html; charset=GBK"pageEncoding="GBK"%><%@taglib prefix="s" uri="/struts-tags"%><html><head><meta http-equiv="Content-Type" content="text/html; charset=GBK"><title><s:text name="loginPage"/></title></head><body><s:form action="login"><s:textfield name="username" key="user"/><s:textfield name="password" key="pass"/><s:submit key="login"/></s:form></body></html>登陆失败删除学生:<%@page contentType="text/html; charset=UTF-8"%><%@taglib prefix="s"uri="/struts-tags"%><html><head><title>Student Form - Struts2 Demo | </title></head><body><h2align="center">----------FindStudent----------</h2><table align="center"border="1"bordercolor="#3366cc"><tr><td>&nbsp<s:actionerror/><s:form action="delete.action"method="post"validate="true"> <s:textfield name="id"key="id"size="20"/><s:submit method="execute"key="label.add.delete"align="center"更新学生信息:<%@page contentType="text/html; charset=UTF-8"%><%@taglib prefix="s"uri="/struts-tags"%><html><head><title>Student Form - Struts2 Demo | </title></head><body><h2align="center">----------UpdateStudent----------</h2><table align="center"border="1"bordercolor="#3366cc"><tr><td>&nbsp<s:actionerror/><s:form action="update.action"method="post"validate="true"><s:textfield name="student.id"key="id"size="20"/><s:textfield name=""key="name"size="20"/><s:textfield name="student.age"key="age"size="20"/><s:textfield name="student.email"key="email"size="20"/><s:textfield name="student.telephone"key="telephone"size="20"/><s:textfield name="student.sex"key="sex"size="20"/><s:textfield name="student.school"key="school"size="20"/><s:textfield name="student.snumber"key="snumber"size="20"/><s:submit method="execute"key="label.add.update"align="center"/></s:form></td></tr></table></body></html>实验总结:通过本实验学会了struts2的体系结构,Struts 2以WebWork核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与Servlet API完全脱离开,所以Struts 2可以理解为WebWork的更新产品。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1. 系统分析与设计 1.1 系统功能描述本系统是个非常简单的注册、登录系统。

本系统的实现是基于struts2、spring、hibernate三个框架,系统功能单一,业务逻辑简单。

当用户注册信用户时,就是向系统中增加一个新用户,对应的数据库增加一条记录。

当用户输入注册信息时,系统提供了基本的输入验证判断用户输入是否合法,只有当用户输入满足基本输入要求时,才会被提交到实际的登录系统,进行实际的登录处理。

系统还使用了随机产生的图形验证码来防止刷新,防止用户通过单击浏览器的书安心按钮来重复注册多个用户。

系统还提供了一种ajax方式来验证用户输入的注册名是否有效,系统要求所有的用户名不能重复。

故当用户输完用户名后,系统立即在页面上方提示用户该用户名是否可用,如果系统中没有该用户名,则系统提示该用户名可用;否则提示用户该用户名重复,用户必须重新选择用户名注册。

当用户注册一个新用户名之后,就可以使用系统的登录功能来登录系统了,用户输入登录用的用户名、密码后,系统一样提供了基本的输入校验。

除此之外,系统还采用了随机产生图形验证码来防止恶意用户的暴力破解,系统随机生成一个图形验证码,而用户登录必须输入图形验证码中显示的字符串,只有用户输入的字符串和系统随机生成的验证码字符相同时,系统才允许用户登录。

1.2 系统功能流程1.3 数据库设计相关的映射文件:&lt;hibernate-mappingpackage= &lt;classname=user table=user_table&gt; &lt;id name=idcolumn=user_id&gt; &lt;generatorclass=identity&lt;/id&gt; nique=true/&gt;&lt;propertyname==user_passnot-null=true length=50/&gt; &lt;propertyname=emaillength=100/&gt; &lt;/class&gt; &lt;propertyname=usercolumn=&lt;/hibernate-mapping&gt;一旦提供了上面的映射文件,hibernate就可以理解user和user_table之间的对应关系。

2.系统实现与测试 2.1 系统采用的关键技术mvc框架采用了struts2框架,struts2框架的易用性,极好的简化了系统的mvc层的实现;本系统使用了struts2的json插件来完成ajax功能,除此之外本系统为了避免进行底层的ajax交互,还是用了一个简单prototype.js函数库,用以简化ajax编程。

struts2框架的稳定性,为系统的稳定运行提供了保证。

spring容器作为系统的ioc容器,将系统中所有组件都放在spring容器中进行管理,并且充分利用了spring ioc容器的功能,采用依赖注入来管理系统中各组件的依赖关系,避免了各组件之间的硬编码耦合,提高了系统的可扩展性。

借助hibernate orm框架实现系统的持久化,通过hibernate的框架帮助,允许上层程序采用面向对象的方式编程,二hibernate负责把面向对象的持久化操作转换成jdbc操作,但hibernate的底层操作对开发者完全透明,从而让用户从具体的jdbc访问中释放出来,无需理会底层的jdbc数据库访问,而是以面向对象的方式进行持久化操作。

2.2 关键程序流程以注册为例说明:加载类(filterdispatcher)读取配置(struts配置文件中的regist.action) ? 派发请求(客户端发送请求)调用action(filterdispatcher从struts配置文件中读取与之相对应的action ) ?启用拦截器(webwork拦截器链自动对请求应用通用功能) ? 处理业务(回调registaction的execute()方法)返回响应(通过execute方法将信息返回到filterdispatcher)查找响应(filterdispatcher根据配置查找响应的是什么信息如:success、erroer,将跳转到哪个jsp页面) ? 响应用户(jsp---&gt;客户浏览器端显示)2.3 关键代码分析regist.action的execute方法publicstring execute() throws exception{ map session = actioncontext. ().getsession(); session.put(rand , null); string ver2 = (string )session.get(rand); if (mgr }returnreturn}else{if (vercode.equals(ver2)) { } else{ addactionerror(验证码不匹配,请重新输入); }returnfailure; } 业务逻辑层:publicint adduser(string user , string pass , string email) }publicvoidsave(user user){ gethibernatetemplate().save(user); } throws exception{ try{ user u = new user(); u.setuser(user); userdao returne.printstacktrace(); } catch thrownew exception(新增用户时出现异常); } sessionfactory是hibernate的持久化操作的基础对象,是整个数据库经过编辑后的内存镜像,通常对应一个底层数据库。

进行hibernate的持久化操作前,必须先完成sessionfactory的初始化。

本系统通过spring容器管理sessionfactory,从而允许开发人员无需手动管理hibernate的sessionfactory。

代码如下:&lt;beanid=sessionfactoryclass=org.springframework.orm.hibernate3.localsessionfactorybean&gt;&lt;propertyname=datasourceref=datasource/&gt;&lt;propertyname=mappingresources&gt; &lt;list&gt; &lt;value&gt;user.hbm.xml&lt;/value&gt;&lt;/list&gt; &lt;/property&gt; &lt;propertyname=hibernateproperties&gt; &lt;props&gt; &gt; &lt;propkey=show_sql&gt;true&lt;/prop&gt;&lt;propkey=hibernate.hbm2ddl.auto&gt;update&lt;/prop&gt; &lt;propkey=hibernate.dialect&gt; &lt;propkey=hibernate.jdbc.batch_size&gt;20&lt;/prop&gt; &lt;/props&gt;&lt;/property&gt; &lt;/bean&gt; dao组件是基于hibernate的持久化操作的,因此必须获得sessionfactory的引用才可以进行持久化操作。

由于系统的dao组件将由spring容器来管理,而且系统的sessionfactory也是由spring的容器来管理,因此dao组件无需显示去的sessionfactory的引用,而是接受spring容器注入即可。

配置如下:&lt;beanid=userdaoclass=org.reg_erdaohibernate &gt; &lt;propertyname=sessionfactoryref=sessionfactory/&gt; &lt;/bean&gt;配置业务逻辑组件所依赖的dao组件。

代码如下:&lt;beanid=mgrclass=org.reg_ermanagerimpl&gt;&lt;propertyname=userdaoref=userdao/&gt; &lt;/bean&gt;在spring容器中配置了业务逻辑组件后,还必须为业务逻辑方法增加事物控制。

因为用户的业务逻辑方法对应用户的一次业务请求,通常而言,用户的每次业务请求都是逻辑不可分的,一次应该为该方法增加事物控制。

本系统采用spring的beannameautoproxycreator后处理器完成。

代码如下:&lt;beanid=transactionmanagerclass=org.springframework.orm.hibernate3.hibernatet ransactionmanager&gt;&lt;propertyname=sessionfactoryref=sessionfactory/&gt; &lt;/bean&gt; &lt;beanid=transactioninterceptorclass=org.springframework.transactio n.interceptor.transactioninterceptor&gt; name=transactionmanagerref=&lt;propertyname= &lt;props&gt; &lt;propkey=get*&gt;propagation_required,readonly&lt;/prop&gt;&lt;propkey=*&gt;propagation_required&lt;/prop&gt; &lt;/props&gt;&lt;/property&gt;&lt;/bean&gt;&lt;beanclass=org.springframework.aop.framework.autoproxy.beannameautoproxycreator&gt;篇二:struts2 实验报告_01 篇三:struts2 实验报告实验报告实验课程:struts2框架应用开发院系(部):应用统计与理学系专业班级:数学与应用数学1301学号:1309401012姓名:田从从成绩:实验日期:一、实验名称:struts2开发环境的搭建二、实验目的:1、下载struts2框架;2、搭建struts2开发环境三、实验内容:1、下载最新版本的struts2;2、为web应用搭建struts2开发环境四、实验步骤:2、下载myeclipse,安装并配置在window下选择preferences,在java下选择installedjres,在它的右方选择add…,把jdk的路径添加进去,按finish完成。

相关文档
最新文档