实验一 Struts 框架技术及应用
一、实验目的:
掌握 Struts 框架技术的原理及其在项目中的应用,掌握MVC 开发模式。
二、实验内容:
创建一个用于本次和后续 Java EE 项目的名为test 的数据库,并在数据库中创建一个名为user 的表,用于记录属于合法登录的用户信息:
create table user
{
id int auto_increment not null,
username varchar(10) not null,
password varchar(10) not null,
primary key(id)
};
1、参考教材 P25,创建一个Java EE 项目,通过JSP+JDBC 的方式实现用户登录和判断,并给出登陆成功或失败时相应的提示页面。
2、参考教材 P43,创建另一个Java EE 项目,通过JSP+Struts+JDBC 的方式进行登陆和判断。比较和体会使用Struts 之后与JSP+JDBC 的方式的区别。
3、在 JSP+Struts+JDBC 的实现方式下,于数据库中创建学生成绩表,实现学生成绩的增删改查等功能。
三、分析与设计过程:
数据库建立
1、用model1模式开发一个web登录程序,编写独立的JavaBean,通过JDBC访问test数据库中的user表来验证用户名和密码。
2、用model2模式开发一个web登录程序,页面效果与1的程序一样,改用Struts2控制页面的跳转,数据库的访问方式不变(仍然通过JDBC)。
四、测试数据与运行结果:
登录界面:
登录成功界面:
登录失败界面:
五、附录:
1、(1)连接数据库代码:
package org.easybooks.bookstore.jsbc;
import java.sql.*;
public class MySQLConnBean {
private Statement stmt = null;
private Connection conn = null;
ResultSet rs = null;
//构造函数
public MySQLConnBean(){}
public void OpenConn()throws Exception
{
try
{
Class.forName("com.mysql.jdbc.Driver").newInstance();
String url = "jdbc:mysql://localhost:3306/test";
String user = "root";
String password = "root";
conn = DriverManager.getConnection(url,user,password);
}
catch(SQLException e)
{
System.err.println("Data.executeQuery: " + e.getMessage());
}
}
//执行查询类的SQL语句,有返回集
public ResultSet executeQuery(String sql)
{
rs = null;
try
{
stmt = conn.createStatement(
ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
rs = stmt.executeQuery(sql);
}
catch(SQLException e)
{
System.err.println("Data.executeQuery: " + e.getMessage());
}
return rs;
}
//关闭对象
public void closeStmt()
{
try
{
stmt.close();
}
catch(SQLException e)
{
System.err.println("Date.executeQuery: " + e.getMessage());
}
}
public void closeConn()
{
try
{
conn.close();
}
catch(SQLException e)
{
System.err.println("Data.executeQuery: " + e.getMessage());
}
}
}
(2)验证登录
<%@ page language="java" pageEncoding="gb2312" import="java.sql.*"%>
<jsp:useBean id="MySqlBean" scope="page"
class="org.easybooks.bookstore.jsbc.MySQLConnBean" />
class="org.easybooks.bookstore.jsbc.MySQLConnBean" />
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=gb2312">
</head>
<body>
<%
String usr=request.getParameter("username"); //获取提交的姓名
String pwd=request.getParameter("password"); //获取提交的密码
boolean validated=false; //验证成功标识
//查询user表中的记录
String sql="select * from user";
MySqlBean.OpenConn(); //调用MySqlBean中加载JDBC驱动的方法
ResultSet rs=MySqlBean.executeQuery(sql); //取得结果集
while(rs.next())
{
if((rs.getString("username").compareTo(usr)==0)
&&(rs.getString("password").compareTo(pwd)==0))
{
validated=true; //标识为true表示验证成功通过
}
}
rs.close();
MySqlBean.closeStmt();
MySqlBean.closeConn();
if(validated)
{
//验证成功跳转到welcome.jsp
%>
<jsp:forward page="welcome.jsp"/>
<%
}
else
{
//验证失败跳转到error.jsp
%>
<jsp:forward page="error.jsp"/>
<%
}
%>
</body>
</html>
2、登录的action
package org.easybooks.bookstore.action;
import java.sql.*;
import org.easybooks.bookstore.jdbc.MySQLConnBean;
import com.opensymphony.xwork2.ActionSupport;
public class LoginAction extends ActionSupport {
private String username;
private String password;
public String execute()throws Exception
{
String usr = getUsername();
String pwd = getPassword();
boolean validated=false;
MySQLConnBean MySqlBean=new MySQLConnBean();
String sql="select * from user";
MySqlBean.OpenConn();
ResultSet rs=MySqlBean.executeQuery(sql);
while(rs.next())
{
if((rs.getString("username").compareTo(usr)==0)&&(rs.getString("password").compareTo(pwd)==0))
{
validated=true;
}
}
rs.close();
MySqlBean.closeStmt();
MySqlBean.closeConn();
if(validated)
{
return "success";
}
else
{
return "error";
}
}
public void setUsername(String username)
{
this.username=username;
}
public String getUsername()
{
return username;
}
public String getPassword()
{
return password;
}
public void setPassword(String password)
{
this.password=password;
}
}
实验二 Hibernate 框架技术及应用
一、实验目的:
掌握 Hibernate 框架技术的原理及其在项目中的应用,掌握ORM(对象关系映射)原理。
二、实验内容:
创建一个用于后续 Java EE 项目的名为test 的数据库,并在数据库中创建一个名为user的表,用于记录属于合法登录的用户信息:
create table user
{
id int auto_increment not null,
username varchar(10) not null,
password varchar(10) not null,
primary key(id)
};
1、参考教材 P55,准备好开发环境所需的开发包等,创建一个Java EE 项目,通过JSP+Hibernate 的方式实现用户登录和判断,并给出登陆成功或失败时相应的提示页面。体会和比较与前面的实验中所采用的模式的区别。
2、参考教材 P68,准备好开发环境所需的开发包等,创建一个Java EE 项目,通过JSP+DAO+Hibernate 的方式实现用户登录和判断,并给出登陆成功或失败时相应的判断界面。比较和体会与前面的实验中所采用的模式的区别。
3、在本次的实现方式下,于数据库中创建学生成绩表,实现学生成绩的增删改查等功能。
三、分析与设计过程:
1、用Hibernate时,在MyEclipse中添加Hibernate开发能力。用Hibernate改写前面Java EE程序的数据访问模块,以面向对象的方式访问test数据库的user表。
2、在1的实践中,利用ORM实现了对数据库表的对象化操作,在JSP页面中应用DAO(一种Java接口)操作Hibernate生成的User对象。
四、附录:
1、验证登录的代码:
<%@page import="java.util.List" %>
<%@ page language="java" pageEncoding="gb2312" import="org.easybooks.bookstore.factory.*,org.hibernate.*"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=gb2312">
</head>
<body>
<%
String usr=request.getParameter("username"); //获取提交的姓名
String pwd=request.getParameter("password"); //获取提交的密码
boolean validated=false; //验证成功标识
//查询user表中的记录
String sql="From User u where u.username=? and u.password=?";
Query query=HibernateSessionFactory.getSession().createQuery(sql);
query.setParameter(0,usr);
query.setParameter(1,pwd);
List users=query.list();
if(users.size()!=0)
{
validated=true; //标识为true表示验证成功通过
}
HibernateSessionFactory.closeSession();
if(validated)
{
//验证成功跳转到welcome.jsp
%>
<jsp:forward page="welcome.jsp"/>
<%
}
else
{
//验证失败跳转到error.jsp
%>
<jsp:forward page="error.jsp"/>
<%
}
%>
</body>
</html>
2、validateUser()方法代码:
package org.easybooks.bookstore.dao.impl;
import java.util.List;
import org.easybooks.bookstore.dao.*;
import org.easybooks.bookstore.factory.*;
import org.easybooks.bookstore.vo.User;
import org.hibernate.*;
public class UserDAO implements IUserDAO{
public User validateUser(String username, String password){
String sql="From User u where u.username=? and u.password=?";
Query query=HibernateSessionFactory.getSession().createQuery(sql);
query.setParameter(0,username);
query.setParameter(1,password);
List users=query.list();
if(users.size()!=0){
User user=(User)users.get(0);
return user;
}
HibernateSessionFactory.closeSession();
return null;
}
}
实验三 Struts 和Hibernate 框架集成应用
一、实验目的:
掌握 Struts 和Hibernate 框架技术的集成过程及其各自在项目中承担的作用。
二、实验内容:
创建一个用于后续 Java EE 项目的名为test 的数据库,并在数据库中创建一个名为user的表,用于记录属于合法登录的用户信息:
create table user
{
id int auto_increment not null,
username varchar(10) not null,
password varchar(10) not null,
primary key(id)
};
1、参考教材 P75,准备好开发环境所需的开发包等,创建一个Java EE 项目,通过JSP+Struts2+DAO+Hibernate 的方式实现用户登录和判断,并给出登陆成功或失败时相应的提示页面。比较和体会与前面的实验中所采用的模式的区别。
2、在本次的实现方式下,于数据库中创建学生成绩表,实现学生成绩的增删改查等功能。
三、分析与设计过程:
JSP作为视图V显示登录、成功或失败页,Struts2作为控制器C处理页面跳转,Hibernate用做数据模型M,它与前台程序的接口以DAO形式提供。
四、附录:
LoginAction类的代码:
package org.easybooks.bookstore.action;
import org.easybooks.bookstore.dao.*;
import org.easybooks.bookstore.dao.impl.*;
import org.easybooks.bookstore.vo.User;
import com.opensymphony.xwork2.ActionSupport;
public class LoginAction extends ActionSupport{
private String username;
private String password;
//处理用户请求的execute方法
public String execute()throws Exception{
boolean validated=false;
IUserDAO userDAO =new UserDAO();
User user=userDAO.validateUser(getUsername(), getPassword());
if(user!=null){
validated=true;
}
if(validated){
//验证成功返回字符串“success”
return SUCCESS;
}
else
{
//验证失败返回字符串“error”
return ERROR;
}
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
实验四 Spring 和Hibernate 框架集成应用
一、实验目的:
掌握 Spring 和Hibernate 框架技术的集成过程及其各自在项目中承担的作用,掌握控制反转、依赖注入、面向方面编程(AOP)等的思想。
二、实验内容:
创建一个用于后续 Java EE 项目的名为test 的数据库,并在数据库中创建一个名为user的表,用于记录属于合法登录的用户信息:
create table user
{
id int auto_increment not null,
username varchar(10) not null,
password varchar(10) not null,
primary key(id)
};
1、参考教材 P88,准备好开发环境所需的开发包等,创建一个Java EE 项目,通过JSP+Spring+DAO+Hibernate 的方式实现用户登录和判断,并给出登陆成功或失败时相应的提示页面。比较和体会与前面的实验中所采用的模式的区别。
2、在本次的实现方式下,于数据库中创建学生成绩表,实现学生成绩的增删改查等功能。
三、分析与设计过程:
将Spring与Hibernate集成一起开发Web登录页程序,程序功能和页面效果同前,但要求用Spring来管理Hibernate和DAO组件。
四、附录:
1、validateUser()方法的代码
package org.easybooks.bookstore.dao.impl;
import java.util.List;
import org.easybooks.bookstore.dao.*;
import org.easybooks.bookstore.vo.User;
import org.hibernate.*;
public class UserDAO extends BaseDAO implements IUserDAO{
public User validateUser(String username,String password){
String sql="from User u where u.username=? and u.password=?";
Session session=getSession();
Query query=session.createQuery(sql);
query.setParameter(0, username);
query.setParameter(1, password);
List users=query.list();
if(users.size()!=0)
{
User user=(User)users.get(0);
return user;
}
session.close();
return null;
}
}
2、applicationContext.xml文件添加代码:
<bean id="baseDAO" class="org.easybooks.bookstore.dao.BaseDAO">
<property name="sessionFactory">
<ref bean="sessionFactory"/>
</property>
</bean>
<bean id="userDAO" class="org.easybooks.bookstore.dao.impl.UserDAO" parent="baseDAO"/>
3、validate.jsp文件代码如下:
<%@ page language="java" pageEncoding="gb2312" import="org.springframework.context.*,org.springframework.context.support.*,org.easybooks.bookstore.dao.*,org.easybooks.bookstore.dao.impl.*"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=gb2312">
</head>
<body>
<%
String usr=request.getParameter("username"); //获取提交的姓名
String pwd=request.getParameter("password"); //获取提交的密码
boolean validated=false; //验证成功标识
ApplicationContext context=new FileSystemXmlApplicationContext("file:D:/MyEclipse9_Workspace/jsp_spring_dao_hibernate/src/applicationContext.xml");
IUserDAO userDAO=(IUserDAO)context.getBean("userDAO");
//直接使用持久层封装好了的验证功能
if(userDAO.validateUser(usr,pwd)!=null)
{
validated=true; //标识为true表示验证成功通过
}
if(validated)
{
//验证成功跳转到welcome.jsp
%>
<jsp:forward page="welcome.jsp"/>
<%
}
else
{
//验证失败跳转到error.jsp
%>
<jsp:forward page="error.jsp"/>
<%
}
%>
</body>
</html>
实验五 Struts 和Spring 框架集成应用
一、实验目的:
掌握 Struts 和Spring 框架技术的集成过程及其各自在项目中承担的作用。
二、实验内容:
创建一个用于后续 Java EE 项目的名为test 的数据库,并在数据库中创建一个名为user的表,用于记录属于合法登录的用户信息:
create table user
{
id int auto_increment not null,
username varchar(10) not null,
password varchar(10) not null,
primary key(id)
};
1、参考教材 P99,准备好开发环境所需的开发包等,创建一个Java EE 项目,通过JSP+Struts2+Spring+JDBC 的方式实现用户登录和判断,并给出登陆成功或失败时相应的提示页面。比较和体会与前面的实验中所采用的模式的区别。
2、在本次的实现方式下,于数据库中创建学生成绩表,实现学生成绩的增删改查等功能。
三、分析与设计过程:
开发一个Web登录页程序,程序功能和页面效果同前,但要求用Spring来管理Struts2的控制器。
四、附录:
1、修改web.xml内容:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<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>
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/classes/applicationContext.xml
</param-value>
</context-param>
<display-name></display-name>
<welcome-file-list>
<welcome-file>login.jsp</welcome-file>
</welcome-file-list>
</web-app>
2、创建struts.properties文件:
struts.objectFactory=spring
3、注册Action组件:
<?xml version="1.0" encoding="UTF-8"?>
<beans
xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<bean id="Login" class="org.easybooks.bookstore.action.LoginAction"/>
</beans>
4、struts.xml文件作如下修改:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
<package name="struts" extends="struts-default">
<action name="Login" class="Login">
<result name="success">/welcome.jsp</result>
<result name="error">/error.jsp</result>
</action>
</package>
</struts>
实验六 SSH 多框架整合应用
一、实验目的:
掌握 SSH 多框架整合的过程及其各自在项目中承担的作用。
二、实验内容:
创建一个用于后续 Java EE 项目的名为test 的数据库,并在数据库中创建一个名为user的表,用于记录属于合法登录的用户信息:
create table user
{
id int auto_increment not null,
username varchar(10) not null,
password varchar(10) not null,
primary key(id)
};
1、参考教材 P103,准备好开发环境所需的开发包等,创建一个Java EE 项目,通过JSP+Struts2+Spring+DAO+Hibernate 整合应用的方式实现用户登录和判断,并给出登陆成功或失败时相应的提示页面。比较和体会与前面的实验中所采用的模式的区别。
2、在本次的实现方式下,于数据库中创建学生成绩表,实现学生成绩的增删改查等功能。
三、分析与设计过程:
用3个框架(Struts2/Spring/Hibernate)整合起来开发Web登录程序,程序功能页面效果同前,要求采用前面实验所描述的方式架构这个系统。
四、附录:
1、配置web.xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<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>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/classes/applicationContext.xml
</param-value>
</context-param>
<welcome-file-list>
<welcome-file>login.jsp</welcome-file>
</welcome-file-list>
</web-app>
2、实现控制器Action,LoginAction.java代码如下:
package org.easybooks.bookstore.action;
import org.easybooks.bookstore.dao.*;
import org.easybooks.bookstore.vo.User;
import com.opensymphony.xwork2.ActionSupport;
import org.springframework.context.*;
import org.springframework.context.support.*;
public class LoginAction extends ActionSupport{
private User user;
//处理用户请求的execute方法
public String execute()throws Exception{
boolean validated=false;
ApplicationContext context=new FileSystemXmlApplicationContext("file:");
IUserDAO userDAO=(IUserDAO)context.getBean("userDAO");
User u=userDAO.validateUser(user.getUsername(), user.getUsername());
if(u!=null)
{
validated=true;
}
if(validated)
{
//验证成功返回字符串"success"
return SUCCESS;
}
else
{
//验证失败返回字符串"error"
return ERROR;
}
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
}
3、注册组件,applicationContext.xml文件添加代码:
<bean id="baseDAO" class="org.easybooks.bookstore.dao.BaseDAO">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
<bean id="userDAO" class="org.easybooks.bookstore.dao.impl.UserDAO" parent="baseDAO"/>
<bean id="login" class="org.easybooks.bookstore.action.LoginAction"/>