Struts2(二.用户登录模块)
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(二.用户登录模块)的更多相关文章
- Java SSH框架系列:用户登录模块的设计与实现思路
1.简介用户登录模块,指的是根据用户输入的用户名和密码,对用户的身份进行验证等.如果用户没有登录,用户就无法访问其他的一些jsp页面,甚至是action都不能访问.二.简单设计及实现本程序是基于Jav ...
- mysql颠覆实战笔记(二)-- 用户登录(一):唯一索引的妙用
版权声明:笔记整理者亡命小卒热爱自由,崇尚分享.但是本笔记源自www.jtthink.com(程序员在囧途)沈逸老师的<web级mysql颠覆实战课程 >.如需转载请尊重老师劳动,保留沈逸 ...
- 基于Struts2的用户登录程序
基本步骤: 1.新建Java工程,File>New>Project>Web>Dynamic Web Project,并将工程命名为:Struts2_Demo 2.导入strut ...
- Window上python开发--4.Django的用户登录模块User
Android系统开发交流群:484966421 OSHome. 微信公众号:oshome2015 在搭建站点和web的应用程序时,用户的登录和管理是差点儿是每一个站点都必备的. 今天主要从一个实例了 ...
- Struts2(三.用户登录状态显示及Struts2标签)
1.编写main.jsp /WebContent/main.jsp 之前用户登录时已把用户存入session <%@ page language="java" content ...
- 项目开发-->身份认证及用户登录模块
1.首先明确的两个问题 如何判断当前申请是由一个已登录用户发起的?如果Request.IsAuthenticated为true,则表示是一个已登录用户. 如何获取当前登录用户的登录名?如果是一个已登录 ...
- 学习笔记48_Memcache跟用户登录模块结合
public interface ICacheWriter { void AddCache(string key,object value, DateTime expDate); void Add ...
- Struts1.x 用户登录模块的实现
页面验证部分: <%@ page language="java" contentType="text/html; charset=UTF-8" pageE ...
- Struts2_day04讲义_使用Struts2完成用户登录的权限拦截器的代码编写
随机推荐
- OsharpNS轻量级.net core快速开发框架简明入门教程-Osharp.Hangfire使用
OsharpNS轻量级.net core快速开发框架简明入门教程 教程目录 从零开始启动Osharp 1.1. 使用OsharpNS项目模板创建项目 1.2. 配置数据库连接串并启动项目 1.3. O ...
- lucene&solr学习——索引维护
1.索引库的维护 索引库删除 (1) 全删除 第一步:先对文档进行分析 public IndexWriter getIndexWriter() throws Exception { // 第一步:创建 ...
- Extjs 4.2 panel 添加 click 事件及右键菜单
listeners: { render: function(c) { c.body.on('click', function() { //TODO 添加点击事件功能 }); c.body.on('co ...
- Openresty最佳案例 | 第9篇:Openresty实现的网关权限控制
转载请标明出处: http://blog.csdn.net/forezp/article/details/78616779 本文出自方志朋的博客 简介 采用openresty 开发出的api网关有很多 ...
- 菜鸟笔记 -- Chapter 11 格式化
我们在String中介绍过它有一个格式化的方法,在其它很多地方,也都能看到格式化的操作,那么这节我们就来认真了解一下Java中的格式化操作. 我们在操作中涉及到的格式化有字符串的格式化和一些其它数据类 ...
- B. Train Seats Reservation 2017 ACM-ICPC 亚洲区(南宁赛区)网络赛
You are given a list of train stations, say from the station 1 to the station 100. The passengers ca ...
- [JSOI2010]Group 部落划分 Group
Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 3661 Solved: 1755[Submit][Status][Discuss] Descripti ...
- 搭建两个节点的大数据集群-1.hdfs集群
0.规划 两个节点: ip 部署的程序 备注 192.168.56.2/bigdata.lzf namenode,datanode,NodeManager,hive,presto,mysql, ...
- 基于SpringBoot+SpringSecurity+mybatis+layui实现的一款权限系统
这是一款适合初学者学习权限以及springBoot开发,mybatis综合操作的后台权限管理系统 其中设计到的数据查询有一对一,一对多,多对多,联合分步查询,充分利用mybatis的强大实现各种操作, ...
- djangorestframework怎么这么好用!
一年前就已经用过restframework, 当时觉得这个只是给web框架打辅助的, 他能实现的我也都实现(可能没有那么好用, 嘿嘿) 但是我有一种东西叫做效率, 时间就是金钱, 别人造好的就直接用就 ...