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 ...
随机推荐
- Qt5:QSystemTrayIcon类实现程序托盘图标
windows下,在许多应用程序中都会实现一个托盘图标,用于隐藏应用程序窗口时还能对该应用程序进行简单的操作,例如 QQ ,renren等程序 那么,在Qt中,如何实现呢? 这就要用到Qt提供的 QS ...
- 怎样把人物处理的清晰PS教程
首先打开PS软件,导入一张人物图片 然后复制图层,点滤镜---杂色----减少杂色 点高级 点确定. 点图像-----调整-----匹配颜色在点一下中和,中和看图效果,也可点 也可不点 切记,然后确定 ...
- thinkphp5.0入口文件
入口文件 ThinkPHP采用单一入口模式进行项目部署和访问,无论完成什么功能,一个应用都有一个统一(但不一定是唯一)的入口. 应该说,所有应用都是从入口文件开始的,并且不同应用的入口文件是类似的. ...
- mysql优化---优化工具MySQL performance tuning primer script
MySQL performance tuning primer script一个简单好用的mysql优化工具,其实一个shell脚本 下载: $ wget http://www.day32.com/M ...
- Android Studio的使用(三)--包不分级、修改包名
1.如果不喜欢将包逐级展开的话,可以将每一个包名都完整展现出来,只需要勾选Flatten Packages. 2.修改包名 3.填写新的包名 4.点击确认
- MC34063中文资料及应用实例(转)
源:http://blog.chinaunix.net/uid-26199686-id-3207838.html MC34063A(MC33063)芯片器件简介 该器件本身包含了DC/DC变换器所需要 ...
- Bundle versions string, short与Bundle version
在提交更新的app至appstore中时,需要在**.plist中设置app的version信息.Bundle versions string, short --- CFBundleShortVers ...
- CodeForces 609D Gadgets for dollars and pounds
二分天数+验证 #include<cstdio> #include<cstring> #include<cmath> #include<algorithm&g ...
- ASP.NET MVC 5 WEB API 用户验证
参考博客:ASP.NET MVC5+EF6+EasyUI 后台管理系统(65)-MVC WebApi 用户验证 (1) 参考博客:MVC WebApi 用户验证 (2)构建ASP.NET MVC5+E ...
- 密钥public/private key登陆linux
Public Key认证是什么这是一种认证方法,类似于常见的用户名密码认证方法.不同的是需要在客户端机器上保留一个很长很长的加密key,而在服务器端需要做出相应的配置.当客户端想要访问服务器时,服务器 ...