最近维护一个项目,是用struts2做的,所以特意学了下struts的入门,否则代码都看不懂啊。下面记录下过程。Myeclipse 版本为2014.struts2,hibernate为4.1。
1、既然要用到hibernate,自然要有个数据库了,我在localhost的数据库test里建了个表t_user;
CREATE TABLE `t_user` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(45) NOT NULL,
`sex` varchar(45) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
2、打开myeclipse,然后创建一个web项目。
3、创建一个数据库连接
然后右击选new,新建一个连接。
选择mysq填入相应的信息,点保存密码,可以测试下,正确的话会给出下面的提示
4、添加hibernate
双击myconnect打开链接,展开数据库,找到表t_user,右击并选择“Hibernate Reverse Engineering……”,
然后填写dao类所在的包,例如:com.myeclipse.hibernate
完成之后回到项目列表里,右击项目名称添加Hibernate
此处没有了,因为已经添加过了。
5、添加struts2
同上图操作,添加struts2,可以看到只剩下struts1了,因为struts2已经添加过了,之后项目src下就可以看到hibernate和struts的配置文件了,
6、配置实用struts2,这里先要配置web.xml
<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>
这里是个最简单的配置,可以根据需要增加内容。我看默认里 <url-pattern>*.action</url-pattern>这里是不对的。具体还待学习,这样的后果是报错,我这样部署到tomcat下的时候,这个应用是个false。Tomcat的webapp目录下的各个应用是会有的状态为true,有的为false的。这个可以通过tomcat的manage查看。
然后就要配置struts.xml了,这里说明了访问的url如何对应到class里,调用什么方法,并且根据结果执行后续的操作,比如执行某个jsp文件。
<struts>
<package name="com.example.strus2" extends="struts-default" namespace="/">
<global-results>
<result name="input">/error.jsp</result>
</global-results>
<action name="addUser" class="com.example.struts.action.LoginAction">
<result name="success">/success.jsp</result>
</action>
<action name="info" class="com.example.struts.action.LoginAction" method="addUser">
<result name="success">/error.jsp</result>
</action>
</package>
</struts>
可以参考这篇文章。http://www.cnblogs.com/kay/archive/2007/11/28/976120.html,method如果省去,就会总是返回success,但没有执行任何方法,开始还以为可以省去呢。
之后就要写class了,先创建com.example.struts.action包,在这个包下创建LoginAction类,这个和上面的class对应。
package com.example.struts.action;
import com.opensymphony.xwork2.ActionSupport;
import com.myeclipse.hibernate.TUser;
import com.myeclipse.hibernate.TUserDAOFactory;
public class LoginAction extends ActionSupport {
/**
*
*/
private static final long serialVersionUID = 1L;
private String name;
private String sex;
public String addUser() {
System.out.println("name is: " + name + ", and sex is: " + sex);
TUserDAOFactory daof = new TUserDAOFactory();
TUser tuser = new TUser(this.name, this.sex);
daof.addUser(tuser);
return "success";
}
public String info() {
System.out.println("name is:" + name);
return "success";
}
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return this.sex;
}
public void setSex(String sex) {
this.sex = sex;
}
}
然后添加error.jsp success.jsp login.jsp文件。
error.jsp 用最简单的html文件就行。
success.jsp 参考代码如下。
<%@ page language="java" pageEncoding="utf-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP ‘MyJsp.jsp‘ starting page</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>
登录页面<br>
<s:form action="addUser.action">
<s:textfield name="name" label="姓名" />
<s:textfield name="sex" label="性别" />
<s:submit value="添加" />
</s:form>
</body>
</html>
这里的form采用了struts2标签。 注意要有红色字的那行代码才支持struts。
success.jsp 的参考代码如下,这里用到了<s:property value="name" />,这里的name对应对象里的this.name,他会自动通过getName来获取。
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP ‘MyJsp.jsp‘ starting page</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>
登录页面<br>
姓名:<s:property value="name" /><br />
性别:<s:property value="sex" />
</body>
</html>
实际操作下,然后看看数据库的变化。
遇到的问题,一个警告
No configuration found for the specified action: ‘addUser‘ in namespace: ‘‘. Form action defaulting to ‘action‘ attribute‘s literal value.
解决方法是:<s:form action="addUser" method="post" namespace="/"> 添加namespace=“/”,然后就没有这个提示了。
Myeclipse下配置struts2和hibernate