Struts2(二.用户登录模块)

1.编写Javabean

/src/myuser/User.java

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

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

 1 package myuser;
 2
 3 public class User {
 4     private int id;
 5     private String userName;
 6     private String pwd;
 7     public int getId() {
 8         return id;
 9     }
10     public void setId(int id) {
11         this.id = id;
12     }
13     public String getUserName() {
14         return userName;
15     }
16     public void setUserName(String userName) {
17         this.userName = userName;
18     }
19     public String getPwd() {
20         return pwd;
21     }
22     public void setPwd(String pwd) {
23         this.pwd = pwd;
24     }
25
26 }

2.编写DAO类

/src/myuser/UserDAO.java

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>

原文地址:https://www.cnblogs.com/zizi-tothemoon/p/9297832.html

时间: 2024-10-11 18:24:47

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

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

时间 2014-01-19 16:14:54  CSDN博客原文  http://blog.csdn.net/nupt123456789/article/details/18504615 1.简介 用户登录模块,指的是根据用户输入的用户名和密码,对用户的身份进行验证等.如果用户没有登录,用户就无法访问其他的一些jsp页面,甚至是action都不能访问. 二.简单设计及实现 本程序是基于Java的SSH框架进行的. 1.数据库设计 我们应该设计一个用户表,其Userinfo表,对应的SQL语句为(

python用户登录模块(不使用函数等方法)

* 用户登录模块 给定用户信息表,需要满足条件如下: 1. 输入用户名密码判断 2. 输入错误次数3次时,询问用户是否需要继续尝试,Y继续,N结束 3. 可支持多用户登录 1 # 方案一:输入用户名后立即判断一次,共三次 2 li = [{'username': 'qqq', 'password': 'www'}, 3 {'username': 'aaa', 'password': 'sss'}, 4 {'username': 'zzz', 'password': 'xxx'}] 5 6 # 将

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

在搭建网站和web的应用程序时,用户的登录和管理是几乎是每个网站都必备的.今天主要从一个实例了解以下django本身自带的user模块.本文并不对user进行扩展. 主要使用原生的模块. 1.User模块基础: 在使用user 之前先import到自己的iew中.相当与我们自己写好的models.只不过这个是系统提供的models. from django.contrib.auth.models import User # 导入user模块 1.1User对象属性 User 对象属性:usern

基于Struts2的用户登录程序

基本步骤: 1.新建Java工程,File>New>Project>Web>Dynamic Web Project,并将工程命名为:Struts2_Demo 2.导入struts2的重要jar包到WebContent>lib下 3.新建web.xml,右击WEB-INF>New>Other>XML>XML File,并命名为web.xml 更改其内容如下: <?xml version="1.0" encoding="

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

版权声明:笔记整理者亡命小卒热爱自由,崇尚分享.但是本笔记源自www.jtthink.com(程序员在囧途)沈逸老师的<web级mysql颠覆实战课程 >.如需转载请尊重老师劳动,保留沈逸老师署名以及课程来源地址. 一.首先我们用上节课的存储过程对两张表压100万数据(各100万). 第一表 user_sys我们使用的是InnoDB模式,小卒自己的插入结果是: 第二张表 user_sys2我们使用的是MyISAM模式,小卒自己的插入结果是: 两个引擎的效率差异明显,所以我们再使用中根据实际情况

三、Asp.Net MVC4.0开发CMS系统案例之用户登录模块开发

本次开发是将三层架构与MVC结合一起来,我们看下面一个系统结构: View ->Contraller->Model->BLL->DAL->SQLSERVER |        |        | ----------->Extensions----->FrameWork | __>Common Extensions包括扩展类功能,例如控件的再重新,权限的重新验证等.Common是一些公共性功能. 第一步:创建用户登录模型,可以与注册模型类(SysComUe

#知识总结练习-用户登录模块

我的学习阶段是跟着CZBK黑马的双源课程,学习目标以及博客是为了审查自己的学习情况,毕竟看一遍,敲一遍,和自己归纳总结一遍有着很大的区别,在此期间我会参杂Java疯狂讲义(第四版)里面的内容. 前言:此随笔主要是Java基础中的基础,相信大家对这方面肯定有着自己的理解和认识,具体详解可以参照万能的baidu,有的我就一笔带过,希望在我的学习之路上能够有大牛进行指导,也有更多的小伙伴共勉. 用户登录案例要求: 1.编写login.html页面有username和password两个输入框 2.使用

day8:struts2小demo,实现一个用户登录模块

web.xml: <?xml version="1.0" encoding="UTF-8"?><web-app id="WebApp_9" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:sche

用户登录模块测试点

一.数据输入? (把账号和密码分类,有效的和无效的) 1.有效的:长度在XX之间的.类型为XX的? 2.无效的:?长度大于规定的.长度小于规定的.为负数.小数.英文字母.?字符.特殊字符?.中文.??转义字符?.空(包括:空的用户名和空的密码:正确的用户名和空的密码:?空的用户名和正确的密码:用户名的前/中/后含有空格:密码的前/中/后含有空格) 3.正确的帐号和正确的密码中,有字母的,换成其大写/小写字母. 4.输入错误的用户名或者密码时:正确的用户名与错误的密码:?错误的用户名与正确的密码: