(一)struts2入门——登陆验证熟悉struts2部署
0.了解
Struts(支柱、支干)是什么?
Struts是流行和成熟的基于MVC设计模式的Web应用程序框架。使用它能帮助我们减少在运用MVC设计模型来开发Web应用时间。
为什么2.1.3之后用StrutsPrepareAndExecuteFilter而不用AdapterFilter,因为前者可以做到在action之前,过滤器之后写自己的过滤器
在Struts2框架中的处理大概分为以下几个步骤
1 .首先客户端通过HttpServletRequest向Servlet容器(例如Tomcat)提交一个请求。
2 .这个请求经过一系列的过滤器(Filter)。(这些过滤器中有一个叫做ActionContextCleanUp的可选过滤器,这个过滤器对于Struts2和其他框架的集成很有帮助,例如:SiteMesh Plugin)。
3 .接着Struts2的核心控制器FilterDispatcher(或最新的过滤器StrutsPrepareAndExecuteFilter(2.1.3版本以后))被调用,被核心控制器所过滤到以后,核心控制器FilterDispatcher
访问ActionMapper来决定用户是否要请求某个Action。
4 .如果ActionMapper决定需要调用某个Action,Struts2中的核心控制器FilterDispatcher会将控制权委派给ActionProxy(即Action代理)。
5 .ActionProxy通过对象ConfigurationManager(配置管理器)来加载Struts2核心配置文件struts.xml,找到需要调用的Action。
6 .ActionProxy会创建一个ActionInvocation的实例,ActionInvocation实例使用命名模式来调用配置中定义的Action,在调用Action的过程前后,还需要调用非常多的拦截器(Intercepter)。
7.依次执行完一系列拦截器(1,2,3...)后, 就执行Action,它会调用Action中的业务处理方法进行业务处理,同时这个业务处理方法会返回一个结果Result,实际会返回一个字符串,我们根据这个
字符串去调度我们的视图(Template),去匹配result。一般会返回一个JSP页面或者FreeMarker的模版,或者会调用另外一个Action链。
8.当返回视图(Template)以后,还需要将之前执行过的拦截器再依次反向执行一遍(3,2,1...),当这些拦截器被反向执行完以后,才会进行最终的请求的响应,通过HttpServletResponse去响应
客户端的请求。
工作流程
1、客户端浏览器发出HTTP请求.
2、根据web.xml配置,该请求被FilterDispatcher接收
3、根据struts.xml配置,找到需要调用的Action类和方法, 并通过IoC方式,将值注入给Aciton
4、Action调用业务逻辑组件处理业务逻辑,这一步包含表单验证。
5、Action执行完毕,根据struts.xml中的配置找到对应的返回结果result,并跳转到相应页面
以简单登录验证项目练习一下
1.建立一个Java Web项目UserManager
2.导入Struts相关jar包
commons-fileupload(上传下载包)
commons-io(输入输出包)
commons-lang -3.2(基础包)
commons-logging(日志包)
freemarker(模板引擎,通过模板生成文本输出的通用工具)
structs2-core(核心包)
xwork-core(一些类基于xwork)
ognl(表达式)
javassist-3.11..GA.jar(解析java类文件的一个包)
3.在web.xml文件中添加Struts2的过滤器
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
<display-name>UserManager</display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list> <!-- 添加过滤器 -->
<filter> <filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> </filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
4.建立Action类
package dps.action; import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport; public class UserAction extends ActionSupport{ private String username;
private String password;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
} @Override
public String execute() throws Exception{
//定义返回值变量
String strReturn =INPUT;
//业务逻辑判断
if(this.username.equals("abc")&&this.password.equals("123")){
strReturn=SUCCESS;
}else{
ActionContext.getContext().getSession().put("tip", "登录失败!");
}
return strReturn;
} }
5.搭建前台jsp页面
5.1 登录页面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> </head>
<body>
<center>
${tip}
<form action="login.action" method="post">
<table>
<tr>
<td>用户名:</td>
<td><input type="text" name="username"></td>
</tr>
<tr>
<td>密码:</td>
<td><input type="password" name="pasword"></td>
</tr>
<tr>
<td colspan="2"><input type="submit" value="登录"></td>
</tr>
</table>
</form>
</center>
</body>
</html>
5.2 登录成功页面loginSuccess.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>
</head>
<body>
<h1>用户登录成功!!</h1>
</body>
</html>
6.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> <!-- 设置struts对web页面的解码方式 -->
<constant name="struts.i18n.encoding" value="UTF-8" /> <package name="myPackage" extends="struts-default">
<!-- 定义登录的Action -->
<action name="login" class="dps.action.UserAction">
<result>loginSuccess.jsp</result>
<result name="input">login.jsp</result> </action>
</package>
</struts>
7.运行结果
修改web.xml文件,将起始页改为login.jsp
<welcome-file-list>
<welcome-file>login.jsp</welcome-file>
</welcome-file-list>
发布
(一)struts2入门——登陆验证熟悉struts2部署的更多相关文章
- Struts2入门-十分简单的登陆
Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互. 开始编写St ...
- java struts2入门学习--基于xml文件的声明式验证
一.知识点总结 后台验证有两种实现方式: 1 手工验证顺序:validateXxx(针对Action中某个业务方法验证)--> validate(针对Action中所有的业务方法验证) 2 声明 ...
- java struts2入门学习---中文验证、对错误消息的分离、结果(result)类型细节配置
一.需求 利用struts2实现中文验证并对错误消息的抽离. 详细需求:用户登录-->不填写用户名-->页面跳转到用户登录页面,提示用户名必填(以英文和中文两种方式提示)-->填写英 ...
- Struts2入门教程
最近闲来无事,学习s2sh框架,这里先写一点struts2的入门 我的环境 eclipse 4.3.2 tomcat 7.0.52 jdk 1.7.0_45 struts2 2.3.16.3 在ecl ...
- Struts2入门3 深入学习
Struts2入门3 深入学习 处理结果和异常 前言: Struts学习的差不多了,还有最后的一点就收官了就是结果处理和异常处理.前面学习Struts主要围绕就是Action以及struts.xml配 ...
- Struts2入门1 Struts2基础知识
Struts2入门1 Struts2基础知识 20131130 代码下载: 链接: http://pan.baidu.com/s/11mYG1 密码: aua5 前言: 之前学习了Spring和Hib ...
- struts2入门程序
struts2入门程序 1.示例 搭建编程环境就先不说了,这里假设已经搭建好了编程环境,并且下好了strut2的jar包,接下来程序. 1.1 新建web项目 点击File->New->D ...
- struts2入门
好久没有动博客了.今天看了一下慕课网的视频,简单了解一下struts2. 首先是在项目中引入struts2的文件,有一个比较简单的方法就是可以直接右键项目MyEclipse->Project f ...
- Struts2入门这一篇就够了
前言 这是Strtus的开山篇,主要是引入struts框架...为什么要引入struts,引入struts的好处是什么,以及对Struts2一个简单的入门.... 为什么要引入struts? 既然Se ...
随机推荐
- QTP 10 破解 之路
1.下载QTP 10 安装包 2.破解软件(mgn-mqt82.exe) (阿里云云主机里执行不了,一执行CPU就99%,也没有生成lservrc) 手动创建C:\Program Files (x8 ...
- Mysql报错 Cannot load from mysql.proc
Auth: Jin Date: 20140716 mysql --default-character-set utf8 -h127.0.0.1 -uroot -p < account-20140 ...
- UML建模之时序图(Sequence Diagram)教程
一.时序图 时序图是一种强调时间顺序的交互图,在时序图中,首先把参与交互的对象放在图的上方,沿X轴方向排列.通常把发起交互的对象放在左边,较下级对象依次放在 右边,然后把这些对象发送和接受的消息沿Y轴 ...
- 关于spring-mvc.xml的mvc:resources元素浅析。
配置如下: <!-- 配置静态资源 --><mvc:resources location="/static/" mapping="/static/**& ...
- Caliburn.Micro对目录结构的要求
Caliburn.Micro对MVVM目录结构的要求判定规则是如下正则表达式: (?<nsbefore>([A-Za-z_]\w*\.)*)(?<subns>ViewModel ...
- GO语言 -- 调用DLL函数,填平所有的坑,最详尽攻略
编译dll文件(源代码c++):g++ -shared main.cpp -o test.dll set GOARCH=386 第一个DLL函数,第一个参数,要求传入一个指针,直接指向[]byte类型 ...
- CentOS6.5配置网络
[ CleverCode发表在csdn博客中的原创作品,请勿转载.原创地址:http://blog.csdn.net/clevercode/article/details/46376985] 1 网卡 ...
- (原创)2. WPF中的依赖属性之二
1 依赖属性 1.1 依赖属性最终值的选用 WPF属性系统对依赖属性操作的基本步骤如下: 第一,确定Base Value,对同一个属性的赋值可能发生在很多地方.还用Button的宽度来进行举例,可能在 ...
- iOS: FFmpeg的使用二
1.下载并编译FFMPEG. https://github.com/kewlbear/FFmpeg-iOS-build-script 下载后有一个build-ffmpeg.sh文件.终端执行即可自动下 ...
- iOS:三种数据库的小总结
三种数据库总结:sqlite.FMDB.CoreData 1.sqlite数据库(C语言)需要方法和属性: (1)数据类型: –INTEGER 有符号的整数类型 –REAL 浮点类型 –TEXT ...