1.编写Javabean

/src/myuser/User.java

在strut1中,Javabean需要继承于struts1 api中的ActionForm类。struts2没有此要求

struts2 也没有formbean,通常使用Domain Model的方式向action注入数据

 package myuser;

 public class User {
private int id;
private String userName;
private String pwd;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
} }

2.编写DAO类

/src/myuser/UserDAO.java

JNDI方式连接数据库,具体操作参考JNDI和JDBC的区别和联系及其使用方法

package myuser;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;
import db.DbLib; public class UserDAO {
private Connection conn;
PreparedStatement ps;
public String sql; /**
* 通过JNDI的方式连接数据库
* @throws ClassNotFoundException
* @throws SQLException
* @throws NamingException
*/
public UserDAO() throws ClassNotFoundException, SQLException, NamingException
{
//JNDI方式
Context ctx = new InitialContext();
//获取数据源
DataSource ds = (DataSource) ctx.lookup("java:comp/env/jdbc/mysql");
//通过数据源取连接池中的连接
conn = ds.getConnection();
} /**
* 用户登录
* @param user
* @return
* @throws SQLException
*/
public boolean checkLogin(User user) throws SQLException
{
boolean flag=false;
sql="select * from users where userName=? and pwd=?";
ps=conn.prepareStatement(sql);
ps.setString(1, user.getUserName());
ps.setString(2, user.getPwd());
ResultSet rs=ps.executeQuery();
if(rs.next())
{
flag=true;
}
conn.close();
System.out.println("登录成功");
return flag;
}

3.编写Action

/src/myuser/UserAction.java

在struts1, action必须继承于struts1 api 中Action。struts2,没有继承类或实现接口的要求,随便写一个类,都可以做struts2 的action

action中的处理请求的方法的签名是有要求
格式:public String execute()

package myuser;

import java.io.PrintWriter;
import java.sql.SQLException;
import java.util.ArrayList;
import javax.naming.NamingException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import mypicture.Picture;
import mypicture.PictureDAO; /**
* 为了方便继承ActionSupport
*/
public class UserAction extends ActionSupport { /**
* action运行的时候的servlet环境
* 获取response
*/
HttpServletResponse response=ServletActionContext.getResponse();
/**
* 获取request,再获取session
*/
HttpServletRequest request=ServletActionContext.getRequest();
HttpSession session=request.getSession();
PrintWriter out; /**
* 向action注入数据的方式,通常使用Domain Model的方式
*/
private User user; public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
} /**
* 用户登录
* @return
* @throws Exception
*/
public String checkLogin() throws Exception {
out=response.getWriter();
UserDAO dao=new UserDAO();
if(!dao.checkLogin(user))
{
out.print("0");
}
//把user存入session中
session.setAttribute("user", user);
out.print("1");
//不跳转
return null;
}

4.配置Action

/src/struts.xml:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd"> <struts>
<!-- struts2常量 -->
<!-- 控制请求action时的后缀,默认为空或者.action -->
<constant name="struts.action.extension" value="action,,"/>
<!-- 控制开发模式,默认为false,若为true则表示改了action后可以不重启-->
<constant name="struts.devMode" value="true"/>
<!-- 控制上传文件大小 3个0表示Kb,6个0表示Mb,这里为10Mb-->
<constant name="struts.multipart.maxSize" value="10000000"/> <!--
package:管理action
name:名称,今后别的人可以继承这个package
namespace:路径,调action的时候也要加上才能调用
extends:继承于哪个包,这里继承于struts-default包(实现了很多struts功能)
-->
<package name="all" namespace="" extends="struts-default">
<!-- 控制action中全局跳转 -->
<global-results>
<!-- redirectAction容器外跳转,跳action -->
<result name="userlist" type="redirectAction">
<param name="namespace">/user</param>
<param name="actionName">list</param>
</result>
</global-results>
</package>
<include file="user.xml"></include>
<include file="picture.xml"></include>
</struts>

/src/user.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd"> <struts>
<package name="user" namespace="/user" extends="all"> <!-- 通配符方式配置action,解决action太多的问题 -->
<action name="*" class="myuser.UserAction" method="{1}">
<!-- 控制action中局部跳转 -->
<result name="main">${pageContext.request.contextPath}/main.jsp</result>
<result name="login">${pageContext.request.contextPath}/login.jsp</result>
<!--
加了type="redirect"代表,容器外跳转
容器外跳转跳不到userlist.jsp中去
在这里只能用容器内跳转(同一个request范围之内)
-->
<result name="list">/WEB-INF/user/userlist.jsp</result>
<result name="modify">/WEB-INF/user/modify.jsp</result>
</action>
</package>
</struts>

5.jsp登录页面

/WebContent/login.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>登录</title>
<script type="text/javascript" src="jslib/jquery-1.11.1.js"></script>
<script type="text/javascript">
$(function(){
$("[type='button']").click(function(){
if($.trim($("[name='user.userName']").val())=="")
{
$("[name='user.userName']").select();
$("[name='user.userName']").focus();
$("#msg").html("请输入用户名!");
return false;
}
if($.trim($("[name='user.pwd']").val())=="")
{
$("[name='user.pwd']").select();
$("[name='user.pwd']").focus();
$("#msg").html("请输入密码!");
return false;
}
//通过jquery的方式请求action,在action中跳转也跳不走,只能在jquery中跳转
$.post("${pageContext.request.contextPath}/user/checkLogin",{"user.userName":$("[name='user.userName']").val(),"user.pwd":$("[name='user.pwd']").val()},function(data){
if(data=="1")
{
location.href="main.jsp";
}
else
{
$("#msg").html("用户名和密码错误,请重新输入!");
}
});
});
});
</script>
</head>
<body>
用户登陆
<br>
<br>
<form>
<table>
<tr><td>用户名:</td><td><input type="text" name="user.userName"></td></tr>
<tr><td>密码:</td><td><input type="password" name="user.pwd"></td></tr>
<tr><td colspan="2"><input type="button" value="提交"></td></tr>
</table>
</form>
<div id="msg"></div>
<br>
<br>
<a href="${pageContext.request.contextPath}/main.jsp">返回主页面</a>
</body>
</html>

最新文章

  1. linux安装tomcat
  2. Java 之 常用类(一)
  3. JavaScript作用域和闭包
  4. centos 7.0 查看内存使用情况 和 查看硬盘使用情况
  5. eclipse使用tips-Toggle Mark Occurrences 颜色更改
  6. HTML 插入视频
  7. POJ 1988 Cube Stacking(带权并查集)
  8. Mysql触发器总结
  9. 【转】SQLite提示database disk image is malformed的解决方法
  10. JavaScript 对象的几种创建方法
  11. 离线安装maven,重新打开eclipse报错处理方法
  12. uva 1343 非原创
  13. 程序员面试必备经典CTCI,谷歌面试官经典作品!
  14. WPF(C#) 矩阵拖动、矩阵动画、边缘展开动画处理。
  15. iOS 博客资源精选
  16. flask 数据库操作(增删改查)
  17. stock 基本操作
  18. CO15批次确定,标准的太蛋疼了
  19. HTML 脚本 (Script) 实例
  20. html中如何让table显示的更好

热门文章

  1. OsharpNS轻量级.net core快速开发框架简明入门教程-Osharp.Hangfire使用
  2. sudo: Sorry, you must have a tty to run
  3. scr 和 href 区别
  4. 自定义AngularJS中的services服务
  5. mysql数据去重复distinct、group by
  6. SpringBoot非官方教程 | 第九篇: springboot整合Redis
  7. requirements.txt 快速备份与安装项目所需安装包
  8. 关于Vue-cli 跨域,即使是非自己的服务器也可以get到内容
  9. ABAP术语-Call Transaction
  10. Python实现trim函数