上个帖子完成了spring对hibernate的整合,这里完成对struts2的整合。
先简单的做个struts2的例子。
既然要使用struts2 首先引入struts2-core-2.1.8.jar,其他包报错后再引入,容易记忆,同时也不需要引入许多没用的包。
简单创建个Action
publicclass UserAction {
public String execute(){
return"success";
}
}
新建struts.xml
<action name="userAction" class="com.javalong.ssh.action.UserAction">
<result name="success">
/jsp/user.jsp
</result>
</action>
配置好action。
创建简单的jsp视图
<%@page pageEncoding="utf-8" contentType="text/html; charset=utf-8"%>
<html>
<head>
</head>
<body>
欢迎登陆
</body>
</html>
还有个最重要的是配置web.xml,
<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>
这个就是在用户访问时,做个过滤器。
好,这样 简单的struts2配置好了,访问。
运行 报错
Caused by: java.lang.ClassNotFoundException: com.opensymphony.xwork2.ActionContext
加入xwork-core-2.1.6.jar
运行 报错
Caused by: java.lang.NoClassDefFoundError: org/apache/commons/fileupload/RequestContext
加入commons-fileupload-1.2.1.jar
运行 报错
Caused by: java.lang.NoClassDefFoundError: freemarker/template/TemplateException
加入freemarker-2.3.15.jar
运行 成功
访问页面http://localhost:8080/ssh02/userAction
输出:欢迎登陆
这样就完成配置了。
下面使用spring 整合struts2。
首先要配置监听器。
在web.xml加入:
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:ssh.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
在struts.xml
加入
<constant name="struts.objectFactory" value="spring"></constant>
重新启动tomcat报错
Caused by: Cannot locate the chosen ObjectFactory implementation: spring - [unknown location]
这是因为我们没有引入struts2-spring-plugin-2.1.8.1.jar
引入后,启动。
报错
Caused by: java.net.ConnectException: Connection refused: connect
这是因为我的mysql没有启动。
启动mysql,运行
好,成功。
那么我们在action中从数据库中查出一个user再传到jsp中试试。
首先我们要在action中使用dao接口获取数据。
代码:
private UserDao userDao;
private User user;
public UserDao getUserDao() {
return userDao;
}
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public String execute(){
user=userDao.findById(1);
return "success";
}
就是加了2个属性userDao 和user,把获取的id为1的user对象传给user,这样struts2会把user放入栈顶的action中,到时候直接在jsp中使用el表达式就可以获取user。
User.jsp
<%@page pageEncoding="utf-8" contentType="text/html; charset=utf-8"%>
<html>
<head>
</head>
<body>
${user}
</body>
</html>
代码非常简单。
访问http://localhost:8080/ssh02/userAction
输出
当然 如果你们一直在跟着我做的话,还是会报错,空指针异常。
为什么会报错,因为我们在action中使用的userDao没有地方传入进来,所以userDao=null。
那么为什么这边可以呢?
因为