准备阶段

在使用学习Struts2的时候首先要下载相应的架包

Struts2资源下载

这里建议下载第一个,在struts-2.5.14.1-all.zip里有很多实用的东西,不仅有架包还有官方为开发者准备的实例等。

任何所学的知识最有效的检测方式就是做一个小小的实例,这里吉力就带着大家看看Struts2是怎么实现这个功能的。

Struts2核心jar包
struts2-core-2.3.15.3.jar
asm-3.3jar
asm-common-3.3jar
asm-tree-3.3jar
xwork-core-2.3.15.3.3.jar
commons-io-2.0.1.jar
commons-lang-3.3.1.jar
commons-fileupload-1.3.jar
commons-logging-1.1.3.jar
freemarker-2.3.16.jar
log4j-1.2.17.jar
ognl-3.0.6.jar
javassist-3.11.0.GA.jar

项目框架:


1.配置web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> <display-name>Struts01</display-name>
<!-- 配置 Struts2框架核心Filter -->
<filter>
<!-- 过滤器名 -->
<filter-name>struts2</filter-name>
<!-- 配置Struts2核心Filter实现类 -->
<filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<!-- 让Struts2的核心Filter拦截所有请求 -->
<filter-mapping>
<!-- 过滤名 -->
<filter-name>struts2</filter-name>
<!-- 匹配所有请求 -->
<url-pattern>/*</url-pattern>
</filter-mapping> <!-- <welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
-->
</web-app>

任何MVC框架需要与Web应用整合时都要借助web.xml配置文件。通常MVC框架只需要在Web应用里加载一个核心控制器即可,对于Struts2来说就是加载StrutsPrepareAndExecuteFilter。一个Web应用只要加载StrutsPrepareAndExecuteFilter后,就具有Struts2的基本功能。


2.创建登录视图

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>"> <title>My JSP 'index.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head> <body>
<form action="login.action" method="post"> 用户名:<input type="text" name="useName"><br>
密码:<input type="password" name="password"><br>
<input type="submit" value="登录"><input type="reset" value="重置"> </form>
</body>
</html>

上述页面代码里定义了一个表单,该表单提交给login.action进行处理。表单里有2个输入文本框,分别接收用户名和密码。


3.创建实体POJO层

在src下的com.beans包里创建实体User

package com.beans;

public class User {
private String useName;
private String password; public User() {
// TODO 自动生成的构造函数存根
}
public User(String useName, String password) {
super();
this.useName = useName;
this.password = password;
}
public String getUseName() {
return useName;
}
public void setUseName(String useName) {
this.useName = useName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
} }

在Strut2里,不对,是在整个SSH框架里实体的概念特别重要,它与数据库表相对应,将数据很好的保持了起来,实现了数据的持久化,这样我们以实体的形式传递数据和映射就变得简单。


4.创建业务控制器

在src下的com.action包里添加用于处理用户登录的业务控制器LoginAction类

package com.action;

import com.beans.User;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven; public class LoginAction extends ActionSupport implements ModelDriven<User>{
User user=new User(); public User getUser() {
return user;
} public void setUser(User user) {
this.user = user;
} public String execute()
{
if(user.getUseName().equals("jili")&&user.getPassword().length()>=6)
{
return SUCCESS;
}
else
{
return ERROR;
}
} @Override
public User getModel() {
// TODO 自动生成的方法存根
return user;
} }

这里采用了模型驱动的方式实现了对于用户输入数据的映射,这个方法比再在action里添加属性接收后再赋给User更加高效。


5.配置业务控制器struts.xml

再src下新建struts.xml配置文件,在该文件配置LoginAction

<?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>
<constant name="struts.devMode" value="true"/>
<constant name="struts.enable.DynamicMethodInvocation" value="true"/> <package name="default" namespace="/" extends="struts-default">
<!-- 定义一个叫user的Action,并带上实现类的路径 -->
<action name="login" class="com.action.LoginAction">
<!-- 配置execute()方法返回值与视图资源之间的映射关系 -->
<result name="success">/suc.jsp</result>
<result name="error">/error.jsp</result>
</action>
</package>
</struts>

该配置文件配置了一个名为login的Action,并指明了Action实现类com.action.LoginAction。在


6.运行显示

suc.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>"> <title>My JSP 'suc.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
--> </head> <body>
欢迎${param.useName}登录!
</body>
</html>

error.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>"> <title>My JSP 'error.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
--> </head> <body>
账号或者密码错误!<a href="input.jsp">返回</a> <br>
</body>
</html>

小结

本篇博文只是最简单地实现了用户登录,这也直观验证了Struts2是MVC的很好的应用。

当然,Struts2还有很多应用比如动态方法的调用、标签库等使用,吉力会在今后的博文里会给大家举例子说明。

原文出自:https://www.cnblogs.com/jilige/p/8029918.html

【SSH学习笔记】用Struts2实现简单的用户登录的更多相关文章

  1. [转载]SharePoint 2013搜索学习笔记之搜索构架简单概述

    Sharepoint搜索引擎主要由6种组件构成,他们分别是爬网组件,内容处理组件,分析处理组件,索引组件,查询处理组件,搜索管理组件.可以将这6种组件分别部署到Sharepoint场内的多个服务器上, ...

  2. OGG学习笔记03-单向复制简单故障处理

    OGG学习笔记03-单向复制简单故障处理 环境:参考:OGG学习笔记02-单向复制配置实例 实验目的:了解OGG简单故障的基本处理思路. 1. 故障现象 故障现象:启动OGG源端的extract进程, ...

  3. QML学习笔记(六)- 简单计时器和定时器

    做一个简单的qml计时器和定时器,左键触发计时,右键触发定时 GitHub:八至 作者:狐狸家的鱼 本文链接:QML学习笔记(六)- 简单计时器和定时器 左键点击按钮,触发计时器,中键可以暂停计时,同 ...

  4. Django学习笔记(9)—— 开发用户注册与登录系统

    一,项目题目: 开发用户注册与登录系统 该项目主要练习使用Django开发一个用户注册与登录的系统,通过这个项目然后巩固自己这段时间所学习的Django知识. 二,项目需求: 开发一个简单的用户登录与 ...

  5. sau交流学习社区第三方登陆github--oauth来实现用户登录

    sau交流学习社区第三方登陆github--oauth来实现用户登录 最近在丰富nodejsBlog开发的“交流学习社区”(https://www.mwcxs.top)的其他功能以及修复一些bug. ...

  6. Spring学习之SpringMVC框架快速搭建实现用户登录功能

    引用自:http://blog.csdn.net/qqhjqs/article/details/41683099?utm_source=tuicool&utm_medium=referral  ...

  7. Springboot - 建立简单的用户登录系统

    在开始编码前,先建立几个Package(可以按个人习惯命名),如图 1.Controllers 用于存放控制器类 2.Models 用于存放数据实体类 3.Repositories 用于存放数据库操作 ...

  8. 用javascript实现简单的用户登录验证

    用javascript实现简单的用户登录验证 <!DOCTYPE html> <html lang="en"> <head> <meta ...

  9. 《Cocos2d-x游戏开发实战精解》学习笔记4--实战一个简单的钢琴

    上一节学习了使用Cocos2d-x播放音乐的方法,但是那种方法一般只适合于播放较大的音乐,而一般比较短小的音乐(如游戏中的打斗.按键音效等)则要通过playEffect来播放.本节使用该方法以及之前学 ...

随机推荐

  1. warning LNK4099: PDB 'vc100.pdb' was not found... 解决方案

    使用VS2010在编译得代码工程的时候,原本在debug下是没有问题,但是在release下编译始终会报: “warning LNK4099: PDB 'vc100.pdb' was not foun ...

  2. 6 MySQL--表--完整性约束

    参考:https://www.cnblogs.com/alice-bj/p/8824693.html 完整性约束: http://www.cnblogs.com/linhaifeng/articles ...

  3. zookeeper 节点讲解以及实际项目运用

    转自:https://www.jianshu.com/p/86acf1df6cdd 前言:最近工作不是很忙,本应该乘着闲暇的时间看书的,之前每天晚上都要翻翻的,可是自己竟然迷恋上了王晓磊 写的 卑鄙的 ...

  4. C#抽象类与接口的区别【转】

    一.抽象类:      抽象类是特殊的类,只是不能被实例化(可以用派生类实例化基类对象):除此以外,具有类的其他特性:重要的是抽象类可以包括抽象方法(当然它可以有普通方法),这是普通类所不能的.抽象方 ...

  5. mapreduce of hadoop

    [mapreduce of hadoop] 1. MapReduce作业(Job)是客户端想要执行的一个作单元, 它包括: 输入数据, MapReduce程序, 配置信息. 2. Hadoop将作业成 ...

  6. 二维数组中的查找(java)

    问题描述                                                                                                 ...

  7. 使用tengine解决负载均衡的session问题

    事情的经过时这样的~~,我看了好多好多百度中nginx负载均衡中解决session问题的方式,我选择了研究url_hash的方式.经过一番配置之后,我越发觉得这百度搜出来的帖子也太过久远了吧,去htt ...

  8. Workflow笔记2——状态机工作流(转)

    出处:http://www.cnblogs.com/jiekzou/p/6192813.html 在上一节Workflow笔记1——工作流介绍中,介绍的是流程图工作流,后来微软又推出了状态机工作流,它 ...

  9. CodeForces 681A A Good Contest (水题)

    题意:给定 n 个人和before, after的分数,让你找 before 的分数大于等于2400并且before 小于 after. 析:看完题意就知道怎么算了吧..不用说了 #include & ...

  10. UVa 1614 Hell on the Markets (贪心+推理)

    题意:给定一个长度为 n 的序列,满足 1 <= ai <= i,要求确实每一个的符号,使得它们和为0. 析:首先这一个贪心的题目,再首先不是我想出来的,是我猜的,但并不知道为什么,然后在 ...