Struts2没有集成在MyEclipse中,所以需要手动添加。今晚以简单的登录为例子,介绍配置流程:
1、 下载struts2相关jar,放在WEB-INF的lib文件夹中(常用的8-9个jar)。
2、 修改web.xml,添加struts2的相关过滤器。添加的部分:
<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
3、 新建struts.xml文件,配置登录操作的相关action和return的网页去向:
<?xml version="1.0"encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD StrutsConfiguration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<!-- struts2的action必须放在一个指定的包空间下定义 -->
<package name="default" extends="struts-default">
<!-- 定义处理请求URL为login.action的Action -->
<action name="login"class="action.UserAction">
<!-- 定义处理结果字符串和资源之间的映射关系 -->
<result name="success">loginSuccess.jsp</result>
<result name="input">login.jsp</result>
</action>
</package>
</struts>
4、 编写两个jsp。
5、 新建Action类,推荐继承ActionSupport类,类中包括相关的提交数据(username和password),相应的get和set方法(和javabean一样的写法),以及override的execute方法,其中要编写逻辑判断以及返回的页面要和struts.xml对应(注意,必须大写常量,这在ActionSupport实现的Action接口中有定义,不能随意改变)
6、 测试。如果用户密码不对,返回login页,成功跳到loginSuccess页。无论对不对,网址都会变为login.action,但是单独输入该网址会报错。
7、 有不足,如果知道成功的页面时loginSuccess.jsp,那就可以直接访问。两种方法解决:
一是在jsp页面中加入session的判断,这种方法直接,但不利于jsp页面代码和java代码的分离。第二种方法是利用struts2自定义的拦截器,编写一个拦截器类并重写intercept方法,最后在struts.xml中配置。
下面介绍hibernate配置,假设用户名字、密码等信息存在某数据库中。
8、 假设数据库已存在,留给我们用。我们自己先自己建一个,用MySQL。
9、 打开Window菜单栏下的Open Perspective子菜单的MyEclipse Database Explorer,空白处鼠标右键,选择New之后,在弹出的对话框当中配置数据库连接。DriverName无所谓,URL注意格式,Driver jar可以在网上下到jar,放在lib中,Driver classname可以下拉,必须选择com.mysql.jdbc.Driver,否则测试Test会失败。待测试。
10、 点击finish,选display the selected schmas手动添加数据库。如果其他项目也会用到该数据库,那么2~3的工作是一劳永逸的。
11、 回到开发视图,右键单击,选择MyEclipse下的Add Hibernate Capabilities后,弹出下图Hibernate的配置窗口,选择Hibernate3.3版本。
12、 Next,依次生成xml,配置数据库(选择刚才的DriverName),生成SessionFactory。目前,我们生成了HibernateSessionFactory.java及hibernate.cfg.xml配置文件。Xml中有用户名和密码,感觉有点危险啊。
13、 反向工程生成持久类,映射文件和DAO(非必须)。在数据库视图中对数据库其中一个表进行。完成这一步后,观察各个文件的继承和接口实现的关系。
14、 利用DAO对struts2中的Action进行修改。
15、 第一次运行,发现无论输入密码对错,都会报错,显示hibernate找不到criteria类。其实是因为找不到hibernate相关jar,虽然添加了系统集成的框架,但没有复制到网站目录路径中。这点其实在添加框架时可以选择copy to classpath,它默认没有。如果之前没有选择copy,则后面我们手动添加即可,即复制到lib中。
16、 成功。主要代码如下。
public String execute() throws Exception{
StringstrReturn = INPUT;
BasicDAOdao = newBasicDAO();
Transactiontx = dao.getSession().beginTransaction();
Basicusr = newBasic();
usr.setName(username);
usr.setPassword(password);
Listlist = dao.findByExample(usr);
tx.commit();
if(list.size()>0){
strReturn= SUCCESS;
}
else
ActionContext.getContext().getSession().put("tip", "登录失败");
dao.getSession().close();
注意findbyexample不受其他字段影响,虽然还有age等字段,只设置用户名和密码也可以找,age就不作为find的依据了。
17、 试了一下注册功能,就是save插入数据库功能,也是可以的。
BasicDAOdao = newBasicDAO();
Transaction tx = dao.getSession().beginTransaction();
Basicnewusr = newBasic();
newusr.setName(username);
newusr.setPassword(password);
dao.save(newusr);
tx.commit();
注意到如果有字段没有set的,在数据库中相应字段会显示null。
总结总结,接下来可以学习spring框架了。