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>

Struts2(二.用户登录模块)的更多相关文章

  1. Java SSH框架系列:用户登录模块的设计与实现思路

    1.简介用户登录模块,指的是根据用户输入的用户名和密码,对用户的身份进行验证等.如果用户没有登录,用户就无法访问其他的一些jsp页面,甚至是action都不能访问.二.简单设计及实现本程序是基于Jav ...

  2. mysql颠覆实战笔记(二)-- 用户登录(一):唯一索引的妙用

    版权声明:笔记整理者亡命小卒热爱自由,崇尚分享.但是本笔记源自www.jtthink.com(程序员在囧途)沈逸老师的<web级mysql颠覆实战课程 >.如需转载请尊重老师劳动,保留沈逸 ...

  3. 基于Struts2的用户登录程序

    基本步骤: 1.新建Java工程,File>New>Project>Web>Dynamic Web Project,并将工程命名为:Struts2_Demo 2.导入strut ...

  4. Window上python开发--4.Django的用户登录模块User

    Android系统开发交流群:484966421 OSHome. 微信公众号:oshome2015 在搭建站点和web的应用程序时,用户的登录和管理是差点儿是每一个站点都必备的. 今天主要从一个实例了 ...

  5. Struts2(三.用户登录状态显示及Struts2标签)

    1.编写main.jsp /WebContent/main.jsp 之前用户登录时已把用户存入session <%@ page language="java" content ...

  6. 项目开发-->身份认证及用户登录模块

    1.首先明确的两个问题 如何判断当前申请是由一个已登录用户发起的?如果Request.IsAuthenticated为true,则表示是一个已登录用户. 如何获取当前登录用户的登录名?如果是一个已登录 ...

  7. 学习笔记48_Memcache跟用户登录模块结合

    public interface ICacheWriter {  void AddCache(string key,object value, DateTime expDate);  void Add ...

  8. Struts1.x 用户登录模块的实现

    页面验证部分: <%@ page language="java" contentType="text/html; charset=UTF-8" pageE ...

  9. Struts2_day04讲义_使用Struts2完成用户登录的权限拦截器的代码编写

随机推荐

  1. JavaScript常用方法

    判断运行客户端 function isPhone() { var flag = false; var userAgentInfo = navigator.userAgent; var Agents = ...

  2. pv与单广告位曝光统计优化

    上一篇文章<巧用域名发散,缓解单广告位并发请求限制>中提到了我已经将广告的数据请求写成了单广告位请求.既然数据请求都已经是单广告位的了,那么曝光统计也理所应当是单广告位的. pv是什么? ...

  3. AngularJS 使用 even 和 odd 表格

    <!DOCTYPE html><html><head><meta http-equiv="Content-Type" content=&q ...

  4. SpringMVC知识点总结

    1. SpringMVC概述        SpringMVC是一个WEB层框架,主要用来负责与页面的交互.        SpringMVC是Spring家族的一大组件.Spring整合Spring ...

  5. Oracle 11g行字段拼接WMSYS.WM_CONCAT问题Not A LOB

    Oracle 11g行字段拼接WMSYS.WM_CONCAT问题Not A LOB 一.问题出现 项目中的某个查询需要将表中某个字段不重复地拼接起来,百度得到该函数WMSYS.WM_CONCAT(字段 ...

  6. 剑指offer js算法练习(1-10)

    1.二维数组中的查找       在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数, ...

  7. js中的throw err的作用

    1.阻止程序的运行 2.把错误消息打到控制台

  8. awk分隔符

    最近需要检测日志,shell中用到了awk,因为分割条件不止一个,并且包括了中括号.在此记录一下关于多分隔符并且包含中括号的情况 awk -F'[=,]|[][]+' '{print $6}'

  9. POJ 2318--TOYS(二分找点,叉积判断方向)

    TOYS Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 17974   Accepted: 8539 Description ...

  10. VMware ESXi-6.7——安装

    前提条件: 下载ESXi-ISO镜像文件 制作启动文件 将服务器调试为U盘启动 进入U盘启动模式 1. 进入ESXi的安装页面 选择要安装的磁盘 选择USB口驱动 设置一个root密码 保存数据提示 ...