7. Create struts.xml
在src包下新建一个struts.xml文件,该文件内容如下:
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<constant name="struts.objectFactory" value="spring" />
<include file="struts-default.xml"></include>
<package name="default" extends="struts-default">
<action name="userInfoLogin" class="userInfoAction" method="login">
<result name="FAILURE">/MainWeb/failure.jsp </result>
<result name="SUCCESS">/MainWeb/success.jsp</result>
</action>
</package>
</struts>
8. Overwrite web.xml
配置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">
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param>
<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>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
</web-app>
9. Use Hibernate Reverse
UserInfo.java
UserInfoDaoImpl.java
UserInfo.hbm.xml
将前面数据源dataSource所示数据库SSH中的UserInfo表反向生成Hibernate实体类文件。
如下图,不要生成abstract class,然后一路点击Next即可。
在com.shawnqiu.bean下生成三个文件UserInfo.java、UserInfoDAO.java、UserInfo.hbm.xml。将UserInfoDAO.java 更名为UserInfoDaoImpl.java,置于com.shawnqiu.dao.impl,将UserInfo.hbm.xml置于dbConfig下。
10. Create UserInfoServiceImpl.java
package com.shawnqiu.service.impl;
import java.util.*;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import com.shawnqiu.bean.UserInfo;
public class UserInfoServiceImpl extends HibernateDaoSupport {
//普通用户登录验证
@SuppressWarnings("unchecked")
public boolean checkUser(String userName,String userPassword){
boolean flag = false;
String hql = "from UserInfo as userInfo where userInfo.userName = '"+userName+"' and userInfo.userPassword = '"+userPassword+"'";
List<UserInfo> userInfoList = this.getHibernateTemplate().find(hql);
if(userInfoList.size()>0){
flag = true;
}
return flag;
}
}
11. Create UserInfoService.java
右键点击UserInfoServiceImpl.java,选择Refactor->Extract Interface。
设置Interface name为UserInfoService,同时选择Select All即可,点击OK。
如上图所示,UserInfoService.java和UserInfoServiceImpl.java在同一package中。右键点击UserInfoService.java,选择Refactor->Move
选择com.shawnqiu.service,点击OK即可。
12. Create UserInfoAction.java
package com.shawnqiu.action;
import com.opensymphony.xwork2.ActionSupport;
import com.shawnqiu.service.UserInfoService;
public class UserInfoAction extends ActionSupport{
private String userName;
private String userPassword;
public UserInfoService getUserInfoService() {
return userInfoService;
}
public void setUserInfoService(UserInfoService userInfoService) {
this.userInfoService = userInfoService;
}
private UserInfoService userInfoService;
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getUserPassword() {
return userPassword;
}
public void setUserPassword(String userPassword) {
this.userPassword = userPassword;
}
public String execute(){
// String page = "FAILURE";
// boolean flag = false;
// flag = personManage.checkUser(userName, userPassword);
// if(flag){
// page = "SUCCESS";
// }
// return page;
return "";
}
public String login(){
String page = "FAILURE";
boolean flag = false;
flag = userInfoService.checkUser(userName, userPassword);
if(flag){
page = "SUCCESS";
}
return page;
}
}
13. New Jsp Pages
首先在WebRoot下新建一个MainWeb文件夹,并同时创建3个文件,分别是login.jsp、success.jsp、failure.jsp,源代码如下。
login.jsp
<%@ page language="java" pageEncoding="utf-8"%>
<%@taglib uri="/struts-tags" prefix="s"%>
<html>
<head>
<title>用户登录</title>
</head>
<body>
<center>
<div id="login">
<s:form action="userInfoLogin">
<s:textfield label="用户名" name="userName"></s:textfield>
<s:password label="密码" name="userPassword"></s:password>
<s:submit value="登录"></s:submit>
</s:form>
</div>
</center>
</body>
</html>
success.jsp
<%@ page language="java" pageEncoding="utf-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Failure</title>
</head>
<body>
登录成功!<br>
</body>
</html>
failure.jsp
<%@ page language="java" pageEncoding="utf-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Failure</title>
</head>
<body>
登录失败!<br>
</body>
</html>
14. Overwrite applicationContext.xml
<?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-2.5.xsd">
<bean id="dataSource"
class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName"
value="com.microsoft.sqlserver.jdbc.SQLServerDriver">
</property>
<property name="url"
value="jdbc:sqlserver://localhost:1433;databaseName=SSH">
</property>
<property name="username" value="sa"></property>
<property name="password" value="Wxzy!@%&"></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.SQLServerDialect
</prop>
</props>
</property>
<property name="mappingResources">
<list>
<value>dbConfig/UserInfo.hbm.xml</value>
</list>
</property>
</bean>
<bean id="userInfoServiceImpl" class="com.shawnqiu.service.impl.UserInfoServiceImpl" abstract="false"
lazy-init="default" autowire="default" dependency-check="default" scope="prototype">
<property name="sessionFactory" >
<ref local="sessionFactory"/>
</property>
</bean>
<bean id="userInfoAction" class="com.shawnqiu.action.UserInfoAction" scope="prototype">
<property name="userInfoService">
<ref bean="userInfoServiceImpl" />
</property>
</bean>
</beans>
15. Create log4j.properties
# Set root category priority to INFO and its only appender to CONSOLE.
log4j.rootCategory=INFO, CONSOLE
#log4j.rootCategory=INFO, CONSOLE, LOGFILE
# Set the enterprise logger category to FATAL and its only appender to CONSOLE.
log4j.logger.org.apache.axis.enterprise=FATAL, CONSOLE
# CONSOLE is set to be a ConsoleAppender using a PatternLayout.
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.Threshold=INFO
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=- %m%n
# LOGFILE is set to be a File appender using a PatternLayout.
log4j.appender.LOGFILE=org.apache.log4j.FileAppender
log4j.appender.LOGFILE.File=axis.log
log4j.appender.LOGFILE.Append=true
log4j.appender.LOGFILE.Threshold=INFO
log4j.appender.LOGFILE.layout=org.apache.log4j.PatternLayout
log4j.appender.LOGFILE.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n