Struts2的一个入门实例----登录功能
一、搭建环境与测试
1、web.xml文件,配置核心Filter
1: <?xml version="1.0" encoding="UTF-8"?>
2: <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3: xmlns="http://java.sun.com/xml/ns/j2ee"
4: xmlns:web="http://xmlns.jcp.org/xml/ns/javaee"
5: xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
6: id="WebApp_9" version="2.4">
7: <filter>
8: <filter-name>struts2</filter-name>
9: <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
10: </filter>
11: <filter-mapping>
12: <filter-name>struts2</filter-name>
13: <url-pattern>/*</url-pattern>
14: </filter-mapping>
15: <filter>
16: <filter-name>struts-cleanup</filter-name>
17: <filter-class>org.apache.struts2.dispatcher.ActionContextCleanUp</filter-class>
18: </filter>
19: <filter-mapping>
20: <filter-name>struts-cleanup</filter-name>
21: <url-pattern>/*</url-pattern>
22: </filter-mapping>
23: </web-app>
2、将框架的类库放在WEB-INF/lib路径下
3、用户请求页面
1: <%@ page language="java" contentType="text/html; charset=UTF-8"
2: pageEncoding="UTF-8"%>
3: <%@ taglib prefix="s" uri="/struts-tags" %>
4: <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
5: <html>
6: <head>
7: <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
8: <title>login</title>
9: </head>
10: <body>
11: <s:form action="login" align="center">
12: <s:textfield name="username" key="user" value="用户名"/>
13: <s:textfield name="password" key="pass" value="密 码"/>
14: <s:submit value="登录" key="login"/>
15: </s:form>
16: </body>
17: </html>
4、实现控制器类
Action就是一个包含execute方法的普通java类。代码如下
LoginAction.java
1: package cc.openhome;
2:
3: import com.opensymphony.xwork2.Action;
4: import com.opensymphony.xwork2.ActionContext;
6:
7: public class LoginAction implements Action {
8: private String username;
9: private String password;
10: public String getUsername() {
11: return username;
12: }
13: public void setUsername(String username) {
14: this.username = username;
15: }
16: public String getPassword() {
17: return password;
18: }
19: public void setPassword(String password) {
20: this.password = password;
21: }
22:
23: public String execute() throws Exception {
24: // TODO Auto-generated method stub
25: ActionContext ctx=ActionContext.getContext();
26: if(getUsername().equals("nihao") && getPassword().equals("nihao")){
27: ctx.getSession().put("user", getUsername());
28: return SUCCESS;
29: }else{
30: return ERROR;
31: }
32: }
33: }
34:
5、配置Action
修改struts.xml如下:struts.xml
1: <?xml version="1.0" encoding="UTF-8" ?>
2: <!DOCTYPE struts PUBLIC
3: "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
4: "http://struts.apache.org/dtds/struts-2.3.dtd">
5:
6: <struts>
7: <package name="struts2" extends="struts-default">
8: <action name="login" class="cc.openhome.LoginAction">
9: <result name="success">/success.jsp</result>
10: <result name="error">/error.jsp</result>
11: </action>
12: </struts>
6、success.jsp页面
1: <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
2: <%@ taglib prefix="s" uri="/struts-tags" %>
3: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
4: <html>
5: <head>
6: <title>success</title>
7: </head>
8: <body>
9: <%=request.getAttribute("username")%>:您已经登录!
10: </body>
11: </html>
12:
7、error.jsp页面
1: <%@ page language="java" contentType="text/html; charset=UTF-8"
2: pageEncoding="UTF-8"%>
3: <%@ taglib prefix="s" uri="/struts-tags"%>
4: <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
5: <html>
6: <head>
7: <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
8: <title>error</title>
9: </head>
10: <body>
11: <%=request.getAttribute("username")%>:登录失败,请重新登录!
12: </body>
13: </html>
8、运行结果
二、运行机制处理流程
三、定义国际化资源
1、定义两个语言资源文件,并且命名为message_zh_CN.properties和message_en_US.properties
message_zh_CN.properties
1: successPage=\u767B\u5F55\u6210\u529F\u9875\u9762
2: failPage=\u767B\u5F55\u5931\u8D25\u9875\u9762
3: user=\u7528\u6237\u540D
4: pass=\u5BC6\u7801
5: login=\u767B\u5F55
6: welcome=\u6B22\u8FCE\uFF0C
7: fail=\u767B\u5F55\u5931\u8D25\uFF0C
message_en_US.properties
1: successPage=successPage
2: failPage=failPage
3: user=username
4: pass=password
5: login=login
6: welcome=welcome,
7: fail=fail,
2、修改success.jsp
输出国际化信息的方式有两种:
(1)、<s:text name=”welcome” />
(2)、<s:property value=”%{getText(“welcome”)}” />
1: <%@ page language="java" import="java.util.*" pageEncoding="gbk"%>
2: <%@ taglib prefix="s" uri="/struts-tags" %>
3: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
4: <html>
5: <head>
6: <title><s:text name="successPage"/></title>
7: </head>
8: <body>
9: <%=request.getAttribute("username")%>:<s:text name="welcome"/>
10: 您已经登录!
11: </body>
12: </html>
3、修改error.jsp
1: <%@ page language="java" contentType="text/html; charset=UTF-8"
2: pageEncoding="UTF-8"%>
3: <%@ taglib prefix="s" uri="/struts-tags"%>
4: <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
5: <html>
6: <head>
7: <title><s:text name="successPage"/></title>
8: </head>
9: <body>
10: <%=request.getAttribute("username")%>:<s:text name="fail"/>请重新登录!
11: </body>
12: </html>
4、在struts.xml中添加<constant name="struts.custom.i18n.resources" value="message"/>
1: <?xml version="1.0" encoding="UTF-8" ?>
2: <!DOCTYPE struts PUBLIC
3: "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
4: "http://struts.apache.org/dtds/struts-2.3.dtd">
5:
6: <struts>
7: <constant name="struts.custom.i18n.resources" value="message"/>
8: <action name="login" class="cc.openhome.LoginAction">
9: <result name="success">/success.jsp</result>
10: <result name="error">/error.jsp</result>
12: </action>
13: </struts>
5、运行结果
三、增加数据校验
继承ActionSupport类,它是一个工具类,实现了Action接口,还实现了Validateable接口,提供了数据校验功能。在Validateable接口中,定义了一个validate()方法,如果校验表单输入域出现错误,则将错误添加到ActionSupport类的fieldErrors域中,通过OGNL表达式负责输出。则LoginAction修改后为:
1、LoginAction.java
1: package cc.openhome;
2:
3: import com.opensymphony.xwork2.Action;
4: import com.opensymphony.xwork2.ActionContext;
5: import com.opensymphony.xwork2.ActionSupport;
6:
7: public class LoginAction extends ActionSupport implements Action {
8: private String username;
9: private String password;
10: public String getUsername() {
11: return username;
12: }
13: public void setUsername(String username) {
14: this.username = username;
15: }
16: public String getPassword() {
17: return password;
18: }
19: public void setPassword(String password) {
20: this.password = password;
21: }
22:
23: public String execute() throws Exception {
24: // TODO Auto-generated method stub
25: ActionContext ctx=ActionContext.getContext();
26:
27: if(getUsername().equals("nihao") && getPassword().equals("nihao")){
28: ctx.getSession().put("user", getUsername());
29: return SUCCESS;
30: }else{
31: return ERROR;
32: }
33: }
34: public void validate(){
35: if(getUsername()!=null || getUsername().trim().equals("")){
36: addFieldError("username", "user.required");
37: }
38: if(getPassword()!=null || getPassword().trim().equals("")){
39: addFieldError("password", "pass.required");
40: }
41: }
42: }
43:
2、修改struts.xml
1: <?xml version="1.0" encoding="UTF-8" ?>
2: <!DOCTYPE struts PUBLIC
3: "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
4: "http://struts.apache.org/dtds/struts-2.3.dtd">
5:
6: <struts>
7: <constant name="struts.custom.i18n.resources" value="message"/>
8: <action name="login" class="cc.openhome.LoginAction">
9: <result name="success">/success.jsp</result>
10: <result name="error">/error.jsp</result>
11: <result name="input">/denglu.jsp</result>
12: </action>
13: </struts>
3、运行结果
4、校验信息的国际化
(1)、message_zh_CN.properties
1: successPage=\u767B\u5F55\u6210\u529F\u9875\u9762
2: failPage=\u767B\u5F55\u5931\u8D25\u9875\u9762
3: user.required=\u7528\u6237\u540D\u5FC5\u987B\u6B63\u786E\u8F93\u5165
4: pass.required=\u5BC6\u7801\u5FC5\u987B\u6B63\u786E\u8F93\u5165
5: user=\u7528\u6237\u540D
6: pass=\u5BC6\u7801
7: login=\u767B\u5F55
8: welcome=\u6B22\u8FCE\uFF0C
9: fail=\u767B\u5F55\u5931\u8D25\uFF0C
(2)、message_en_US.properties
1: successPage=successPage
2: user.required=user.required
3: pass.required=pass.required
4: failPage=failPage
5: user=username
6: pass=password
7: login=login
8: welcome=welcome,
9: fail=fail,
(3)、修改validate()方法
1: public void validate(){
2: if(getUsername()!=null || getUsername().trim().equals("")){
3: addFieldError("username", getText("user.required"));
4: }
5: if(getPassword()!=null || getPassword().trim().equals("")){
6: addFieldError("password", getText("pass.required"));
7: }
8: }
(4)、运行结果
5、使用Struts2的校验框架
如果不需要写大量代码,可以用基于XWork的validator框架,新建一个校验规则文件即可。把文件命名为: LoginAction-validation.xml
LoginAction-validation.xml
1: <?xml version="1.0" encoding="UTF-8"?>
2: <!DOCTYPE validators PUBLIC
3: "-//Apache Struts//XWork Validator 1.0//EN"
4: "http://struts.apache.org/dtds/xwork-validator-1.0.dtd">
5: <validators>
6: <field name="username">
7: <field-validator type="requiredstring">
8: <message key="user.required"/>
9: </field-validator>
10: </field>
11: <field name="password">
12: <field-validator type="requiredstring">
13: <message key="pass.required"/>
14: </field-validator>
15: </field>
16: </validators>
Struts2的一个入门实例----登录功能的更多相关文章
- Struts2整合Hibernate3实现用户登录功能
所用技术:struts2 ,hibernate,jsp,mysql 本DEMO仅仅实现用户登录功能,采用MVC思想,自己也觉得相对是比较简单,比较容易理解数据流向的一个例子,通过整合这个过程,能够清晰 ...
- SSH入门开发(实现一个简单的登录功能)详解
开头,首先想记录下一首诗,是今天拇指阅读看到的:很有感触,所以乐于分享: 那么,下面正式开始进入正题,搭建一个 SSH完整的项目: 首先,我们需要在WEB-ROOT下创建一个login.jsp(登录) ...
- Android+struts2+json方式模拟手机登录功能
涉及到的知识点: 1.Struts2框架的搭建(包括Struts2的jSON插件) 2.Android前台访问Web采用HttpClient方式. 3.Android采用JSON的解析. 服务端主要包 ...
- Struts2自定义拦截器实例—登陆权限验证
版本:struts2.1.6 此实例实现功能:用户需要指定用户名登陆,登陆成功进入相应页面执行操作,否则返回到登陆页面进行登陆,当直接访问操作页面(登陆后才能访问的页面)时则不允许,须返回登陆页面. ...
- EF6CodeFirst+MVC5+Autofac泛型注册 入门实例
贴一个EF6 CodeFirst模式结合MVC5和Autofac(泛型注册)的一个入门实例 网上类似的例子实在太少,最近自己也有用到这一块的知识,总结了一下,不要让后人踩了自己踩过的坑. 1:新建三个 ...
- 菜鸟级springmvc+spring+mybatis整合开发用户登录功能(上)
由于本人愚钝,整合ssm框架真是费劲了全身的力气,所以打算写下这篇文章,一来是对整个过程进行一个回顾,二来是方便有像我一样的笨鸟看过这篇文章后对其有所帮助,如果本文中有不对的地方,也请大神们指教. 一 ...
- mybatis 详解(二)------入门实例(基于XML)
通过上一小节,mybatis 和 jdbc 的区别:http://www.cnblogs.com/ysocean/p/7271600.html,我们对 mybatis有了一个大致的了解,下面我们通过一 ...
- C#实现登录功能(连接SQLServer数据库)
本例使用C#实现一个简单的登录功能,分为用户和管理员两个角色登录. 效果图: 核心代码 login.cs private void button1_Click(object sender, Event ...
- Struts2+Spring+Hibernate实现员工管理增删改查功能(一)之登录功能
昨天的博客中我分享了个人关于ssh实现员工管理的框架整合,今天我在分享管理员登录功能的实现. 转载请注明出处"http://www.cnblogs.com/smfx1314/p/78013 ...
随机推荐
- Android Paint画笔及Color .
引自:http://blog.csdn.net/q445697127/article/details/7736926 Paint paint = new Paint(); // 设置paint为无锯齿 ...
- 程序员 10Tips
理解技术债务 技术债务就像信用卡一样,会有很高的利息率,时间越长,修复所花的代价就越大,程序员对这个要有深刻的认识.同时团队应该培养一种保证设计质量的文化,应当鼓励重构.同时也应当鼓励其它有关代码质量 ...
- phpstorm9如何配置interpreter
找到php.exe的路径. 把php.exe 放进去就ok了
- Android5.1图库Gallery2代码分析数据加载流程
图片数据加载流程. Gallery---->GalleryActivity------>AlbumSetPage------->AlbumPage--------->Photo ...
- 高效PHP编程
1.尽量静态化: 如果一个方法能被静态,那就声明它为静态的,速度可提高1/4,甚至我测试的时候,这个提高了近三倍. 当然了,这个测试方法需要在十万级以上次执行,效果才明显. 其实静态方法和非静 ...
- 微信小程序实例教程(四)
第八章:微信小程序分组开发与左滑功能实现 先来看看今天的整体思路: 进入分组管理页面 --> 点击新建分组新建 进入到未分组页面基本操作 进入到已建分组里面底部菜单栏操作 --> 从名 ...
- css3盒模型学习--利用box自适应布局
box-flex是css3新添加的盒子模型属性,它的出现可以解决我们通过N多结构.css实现的布局方式.经典 的一个布局应用就是布局的垂直等高.水平均分.按比例划分. 目前box-flex属性还没 ...
- Java6.0中Comparable接口与Comparator接口详解
Java6.0中Comparable接口与Comparator接口详解 说到现在,读者应该对Comparable接口有了大概的了解,但是为什么又要有一个Comparator接口呢?难道Java的开发者 ...
- 引用 struts2标签详解 - wo的的日志 - 网易博客
引用 元元 的 struts2标签详解 引用 COLD 的 struts2标签详解 要在jsp中使用Struts2的标志,先要指明标志的引入.通过jsp的代码的顶部加入以下的代码: <%@t ...
- openstack controller ha测试环境搭建记录(四)——配置mysql数据库集群
内容正式开始前,我已经在集群中添加了新的节点controller1(IP地址为10.0.0.14). 在所有节点上安装软件:# yum install -y mariadb-galera-server ...