Struts2入门-十分简单的登陆
Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互。
开始编写Struts的项目的时候,准备:tomcat服务器,eclipse,Struts2开源包
下载地址:http://struts.apache.org/
在页面中点击Download,选择需要的包,我选得时Full Distribution:下的
解压完了之后是这样的:
里面的lib文件夹包含了开发struts所用的包,apps是一些简单项目,docs应该是文档,src大概是源文件吧。主要用得就是lib和apps。
在eclipse中导入开发所需的包,将apps/WEB-INF/lib里面的所有包导入。
放在web项目的WEB-INF/lib文件夹
编写初级项目需要配置web.xml,struts.xml
格式都是固定的,保存一份以后要写复制就好了
web.xml 加入如下代码,配置struts的核心过滤器
<!-- 配置Struts2 核心 Filter -->
<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>
struts.xml内配置Action
<!-- Action指定命名空间 -->
<package name="struts2" extends="struts-default">
<!-- login的Action,实现类为。。。 -->
<action name="login" class="StrutsFund.LoginAction">
<result name="success">/login_success.jsp</result>
<result name="error">/login_failure.jsp</result>
<result name="input">/login.jsp</result>
</action>
</package>
解析:package照抄。
action的name就是映射到struts的action的名称,也就是在这个项目里这个action就叫这个名了。class是你写的java类,继承ActionSupport实现Action具体事务的类。
ActionSupport的execute()方法会返回一些字符串,根据字符串来决定跳转的页面。例如上面代码,返回success就跳转到login_success.jsp页面。
LoginAction.java
package StrutsFund;
import java.util.Map; import javax.servlet.http.HttpServletRequest; import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport; public class LoginAction extends ActionSupport
{ /**
*
*/
private static final long serialVersionUID = 1L;
private String username ;
private String password; public String getPassword() {
return password;
} public void setPassword(String password) {
this.password = password;
} public String getUsername() {
return username;
} public void setUsername(String username) {
this.username = username;
}
@Override
public String execute() throws Exception { //方法一:在Action中使用ActionContext得到parameterMap获取参数:
ActionContext context=ActionContext.getContext();
Map paramMap=(Map) context.getParameters();
String[] s=(String[])paramMap.get("username"); //方法二:在Action中取得HttpServletRequest对象,使用request.getParameter获取参数
HttpServletRequest request = (HttpServletRequest)context.get(ServletActionContext.HTTP_REQUEST);
String httpString=request.getParameter("username");
for(String str:s)
System.out.println("str="+str);
System.out.println("httpString"+httpString);
//方法三:运用本类字段
System.out.println("username="+username); if(httpString.equals(""))
return ERROR;
else{ context.getSession().put("username", username); return SUCCESS;
} }
public void validate(){
if(getUsername()==null || getUsername().trim().equals(""))
this.addActionError("必须输入用户名");
if(getPassword()==null || getUsername().trim().equals(""))
this.addActionMessage("必须输入密码"); }
}
代码解释:execute()方法是重写的,框架会调用,只要写好javabean就好。里面写了三种和servlet通信的方法,可以获得jsp页面用户传来的参数。
validate()这个方法是验证方法,在执行execute()方法之前先验证输入。
写完java了,要编写jsp页面。
struts2自己带有标签库s。
必须在运用之前引入标签库
<%@taglib prefix="s" uri="/struts-tags"%>
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">
<%@taglib prefix="s" uri="/struts-tags"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>登陆</title>
</head>
<body>
<center>
<s:actionerror />
<s:form action="login"> <s:textfield name="username" label="用户名"></s:textfield>
<s:password name="password" label="密码"> </s:password> <s:submit value="提交"/>
<s:reset value="重置"/>
</s:form>
</center>
</body>
</html>
login_success.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>This is a success page</title>
</head>
<body>
<% String s=(String)session.getAttribute("username");%>
<h1>SUCCESS</h1>
<h2>用户名:<%= s%></h2>
</body>
</html>
login_failure.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>This is a failure page</title>
</head>
<body>
<h1>FAILURE</h1>
</body>
</html>
struts2的执行流程在于请求转发,主要由核心过滤器来负责的。
通过操作页面跳转,参数传递等功能,struts2会很容易做成一个进销存网站系统,但是大量业务代码写在jsp中,会难以维护和开发。
Struts2入门-十分简单的登陆的更多相关文章
- python入门:简单模拟登陆时UTF-8转换成GBK编码
#!/usr/bin/env python # -*- coding:utf-8 -*- """ 给变量x赋值为字符串‘请输入用户名:’ 变量x_unicode的赋值等于 ...
- Struts2入门3 深入学习
Struts2入门3 深入学习 处理结果和异常 前言: Struts学习的差不多了,还有最后的一点就收官了就是结果处理和异常处理.前面学习Struts主要围绕就是Action以及struts.xml配 ...
- Struts2入门2 Struts2深入
Struts2入门2 Struts2深入 链接: http://pan.baidu.com/s/1rdCDh 密码: sm5h 前言: 前面学习那一节,搞得我是在是太痛苦了.因为在Web项目中确实不知 ...
- 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框架(1)---struts2入门
struts2框架 如果你之前在MVC模式的时候一直都是通过servlet,获取和返回数据,那么现在开始学习struts2框架, Struts是一个实现MVC设计模式的优秀的框架.它的许多优点我就不说 ...
- ---web模型 --mvc和模型--struts2 入门
关于web模型: 早期的web 应用主要是静态页丽的浏览〈如新闻的制监),随着Internet的发展,web应用也变得越来越复杂,不仅要 和数据库进行交互 ,还要和用户进行交互,由此衍生了各种服务器端 ...
- Redis入门很简单之一【简介与环境搭建】
Redis入门很简单之一[简介与环境搭建] 博客分类: NoSQL/Redis/MongoDB redisnosqlmemcached缓存中间件 [Redis简介] <一>. NoSQL ...
- Struts2 入门
一.Struts2入门案例 ①引入jar包 ②在src下创建struts.xml配置文件 <?xml version="1.0" encoding="UTF-8&q ...
随机推荐
- UEFI与MBR区别
EFI与MBR启动的区别 大硬盘和WIN8系统,让我们从传统的BIOS+MBR模式升级到UEFI+GPT模式,现在购买的主流电脑,都是预装WIN8系统,为了更好的支持2TB硬盘 ,更快速的启动win ...
- git标签
git标签 如果你达到一个重要的阶段,并希望永远记住那个特别的提交快照,你可以使用 git tag 给它打上标签.-a 选项意为"创建一个带注解的标签". 添加标签命令: $ gi ...
- oracle 删除用户及相关表数据,释放磁盘空间
来源于:http://www.itpub.net/thread-513609-1-1.html http://bbs.csdn.net/topics/330251089 http://blog.csd ...
- dijkstra 最短路算法
最朴素的做法o(V*V/2+2E)~O(V^2)#include<iostream>using namespace std;#include<vector>#include&l ...
- java-测试synchronized使用xxx.class和this使用的区别
synchronized测试1 写两个线程调用同一个方法,在其中分别做一个class和this的调用,看结果 1.xx.class public class Test{ public static v ...
- c#读取excel
Provider根据实际EXCEL的版本来设置,推荐使用ACE接口来读取.需要Access database Engine. 注意修改注册表以下两项的值为0.否则导入EXCEL当单元格内字符长度超过2 ...
- ubuntu优化使用
1.开机程序设置 1.系统自带 Dash菜单中搜索gnome-session 2.安装扩展包 kamil@kamil-ThinkPad-X260:~$ sudo apt-get install rcc ...
- Hadoop 权威指南学习2 (Sqoop)
6. Sqoop Apache sqoop is an open source tool that allow users to extract data from structured data s ...
- js-JavaScript高级程序设计学习笔记13
第十五章 canvas绘图 1.WebGL是针对Canvas的3D上下文. 2.类型化数组 WebGL涉及的复杂计算需要提前知道数值的精度,而标准的JS数值无法满足需求.因此WebGL引入了一个概念, ...
- HTTP 长连接和短连接
1. HTTP协议与TCP/IP协议的关系 HTTP的长连接和短连接本质上是TCP长连接和短连接.HTTP属于应用层协议,在传输层使用TCP协议,在网络层使用IP协议.IP协议主要解决网络路由和寻址问 ...