HelloWorld: 用户登录

一. 新建Web Project: Struts1_Login

二. 导入struts1的jar包: 

antlr-2.7.2.jar, bsf-2.3.0.jar, commons-beanutils-1.8.0.jar, commons-chain-1.2.jar, commons-digester-1.8.jar

commons-fileupload-1.1.1.jar, commons-io-1.1.jar, commons-logging-1.0.4.jar, commons-validator-1.3.1.jar

jstl-1.0.2.jar, oro-2.0.8.jar, standard-1.0.6.jar, struts-core-1.3.10.jar, struts-el-1.3.10.jar

struts-extras-1.3.10.jar, struts-faces-1.3.10.jar, struts-mailreader-dao-1.3.10.jar

struts-scripting-1.3.10.jar, struts-taglib-1.3.10.jar, struts-tiles-1.3.10.jar

三. 修改index.jsp, 跳转到login.jsp

<!-- 跳转到login.jsp登录界面 -->
<jsp:include page="/WEB-INF/login.jsp" />

四. WEB-INF下创建login.jsp

<form action="???" method="post">
  u: <input type="text" name="username" /><br />
  p: <input type="password" name="password" /><br />
  <input type="submit" value="Login" />
</form>

五. 把项目部署到Tomcat, 运行

------------------------------------------------------------------------------

下面编写action, 打通访问路线:

1. 创建包com.itcast.struts1.form, 包下创建: UserForm.java

// ActionForm表单
@SuppressWarnings("serial")
public class UserForm extends ActionForm {
private String username;
private String password;

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;
}
}

2. 创建包com.itcast.struts1.action, 包下创建LoginAction.java

// 分控
public class LoginAction extends Action {
/**
* 参数说明:
* ActionMapping: 映射跳转路径
* ActionForm: 表单
*/
@Override
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
// 因为UserForm继承了ActionForm, 所以这里强转
UserForm userForm = (UserForm) form;
// 获取用户名和密码
String username = userForm.getUsername();
String password = userForm.getPassword();

System.out.println("username: " + username
+ ", password: " + password);

// 根据返回结果反馈到struts-config.xml中进行不同页面的跳转
// 对应struts-config.xml中的<forward>节点的name属性名
if ("Peter".equals(username)) {
return mapping.findForward("welcome");
} else {
return mapping.findForward("error");
}
}

}

login.jsp:

<form action="${pageContext.request.contextPath}/login.do" method="post">
u: <input type="text" name="username" /><br />
p: <input type="password" name="password" /><br />
<input type="submit" value="Login" />
</form>

web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app 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"
version="2.5">

<display-name>Struts1_Login</display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>

<!-- 配置总控ActionServlet -->
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
<!-- 总控通过配置文件struts-config.xml找到分控 -->
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
</web-app>

struts-config.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 1.3//EN"
"http://struts.apache.org/dtds/struts-config_1_3.dtd">

<struts-config>
<!-- 配置ActionForm表单 -->
<form-beans>
<!-- 参数说明:
name: ActionForm的名字
-->
<form-bean name="userForm" type="com.itcast.struts1.form.UserForm"></form-bean>
</form-beans>

<!-- 配置分控 -->
<action-mappings>
<!-- 参数说明:
path: 指的是客户端/页面指定action, 比如http://localhost:8080/web应用名/path.do中的path
type: 分控的全限定类名, 包.类
name: 对应的ActionForm的名字, 分控通过这个名字找到对应的ActionForm
-->
<action path="/login" type="com.itcast.struts1.action.LoginAction" name="userForm">
<forward name="welcome" path="/WEB-INF/welcome.jsp" />
<forward name="error" path="/WEB-INF/error.jsp" />
</action>
</action-mappings>
</struts-config>

welcome.jsp:

<h3>Welcome You !</h3>

error.jsp:

<h3>Error !</h3>

目录结构:

 

 测试结果: 通过 !

 ---------------------------------------------------------------------

下面增加新功能: 到数据库验证用户登录是否合法

1. 创建数据库struts1, 创建表users:

CREATE DATABASE struts1;
USE struts1;
CREATE TABLE `users` (
`user_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '用户id',
`user_pwd` varchar(32) NOT NULL COMMENT '用户密码',
`user_name` varchar(50) NOT NULL COMMENT '用户名',
`user_email` varchar(50) DEFAULT NULL COMMENT '电子邮件',
PRIMARY KEY (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

2. 导入mysql的数据库连接包

mysql-connector-java-5.0.3-bin.jar

3. 创建工具类com.itcast.struts1.util,   DBHelper.java

public class DBHelper {

// 数据库连接参数
public static final String DRIVERCLASS = "com.mysql.jdbc.Driver";
public static final String URL = "jdbc:mysql://localhost:3306/struts1";
public static final String USRENAME = "root";
public static final String PASSWORD = "123456";

// Connection
public static Connection getConn() {
Connection conn = null;
try {
Class.forName(DRIVERCLASS);
conn = DriverManager.getConnection(URL, USRENAME, PASSWORD);
} catch (Exception e) {
e.printStackTrace();
}
return conn;
}

// PrepareStatement
public static PreparedStatement prepare(Connection conn, String sql) {
PreparedStatement ps = null;
try {
ps = conn.prepareStatement(sql);
} catch (SQLException e) {
e.printStackTrace();
}
return ps;
}

// 关闭数据库, 释放资源
public static void close(ResultSet rs) {
if (rs != null) {
try {
rs.close();
rs = null;
} catch (Exception e) {
e.printStackTrace();
}
}
}
public static void close(PreparedStatement ps) {
if (ps != null) {
try {
ps.close();
ps = null;
} catch (SQLException e) {
e.printStackTrace();
}
}
}
public static void close(Connection conn) {
if (conn != null) {
try {
conn.close();
conn = null;
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}

4. 创建domain对象: com.itcast.struts1.domain,   User.java

public class User {
private Integer userId;
private String username;
private String password;
private String email;

+ getter/setter

}

5. 创建包com.itcast.struts1.service, 在包下创建UserService.java

// 业务层
public class UserService {
public boolean checkUser(User user) {
boolean flag = false; // 默认为不合法用户

Connection conn = DBHelper.getConn();
String sql = "SELECT * FROM users WHERE user_name = ? AND user_pwd = ? LIMIT 1";
PreparedStatement ps = DBHelper.prepare(conn, sql);
try {
ps.setString(1, user.getUsername());
ps.setString(2, user.getPassword());
ResultSet rs = ps.executeQuery();
if (rs.next()) {
flag = true;
}
// 关闭数据库, 释放资源
DBHelper.close(rs);
DBHelper.close(ps);
DBHelper.close(conn);
} catch (SQLException e) {
e.printStackTrace();
}
return flag;
}
}

6. 修改LoginAction.java:

// 分控
public class LoginAction extends Action {
/**
* 参数说明:
* ActionMapping: 映射跳转路径
* ActionForm: 表单
*/
@Override
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
// 因为UserForm继承了ActionForm, 所以这里强转
UserForm userForm = (UserForm) form;
// 获取用户名和密码
String username = userForm.getUsername();
String password = userForm.getPassword();

// 根据返回结果反馈到struts-config.xml中进行不同页面的跳转
// 对应struts-config.xml中的<forward>节点的name属性名
User loginUser = new User();
loginUser.setUsername(username); // ActionForm-->domain
loginUser.setPassword(password);

// 调用Service方法进行用户合法性判断
if (new UserService().checkUser(loginUser)) {
// 将合法的用户信息放入request域
request.setAttribute("username", loginUser.getUsername());
return mapping.findForward("welcome");
} else {
return mapping.findForward("error");
}
}

}

7. welcome.jsp

<a href="<%=basePath%>">注销</a>
<hr>
<h3>Welcome <%=request.getAttribute("username") %></h3>

测试: 通过!

----> 

 

posted @ 2017-03-07 15:55  半生戎马,共话桑麻、  阅读(323)  评论(0)    收藏  举报
levels of contents