java web:struts2框架基础

6 篇文章 0 订阅

struts2

基于MVC的java web框架。与Servlet类似。

模型对应javabeans,表示业务和数据库代码;

视图表示页面设计的jsp文件;

控制器由过滤器、拦截器和Action组件构成。

与Servlet区别

servlet是映射型,一个jsp页面映射一个Servlet类。

struts2是过滤(拦截)型。为事件处理类设置要处理的类型如/*,.action

使用步骤:如登陆

  1. 写一个jsp前端界面login.jsp,这里要用到form,用系统中的struts标签:<%@taglib prefix='s' url="/struts-tags"%>
  2. 在web.xml中配置<filter>,<filter-class>指定处理动作类;配置<filtet-mapping>,在它的子元素<url-pattern>中填/*,表示将struts2过滤器应用到所有请求url上.
  3. 配置struts.xml文件.配置<action>与<result>,action元素属性有name,class与method,默认method为execute().result为action的子元素,指定动作结束后到哪个页面。
  4. 添加事件处理类如Login.java,继承ActionSupport类 
  5. 注意:表的属性名要和处理类中变量名同名!这点和servlet不同

应用实例(一):Struts2开发一个登陆系统。(不用数据库)

(1)写一个logon.jsp。(根据需要,一般还要写success.jsp与error.jsp供登录后跳转) 其中使用struts标签<%@ taglib prefix="s" uri="/struts-tags" %>  <s:form action="Login">等,访问格式:http://localhost:8080/Struts12/login.jsp

<%@ page contentType="text/html; charset=UTF-8"
           pageEncoding="UTF-8"%>  
<%@ taglib prefix="s" uri="/struts-tags" %> 
<html>
<head><title>登录页面</title></head>
<body>
<p>请输入用户名和密码:</p>
<s:form action="Login">
  <s:textfield name="userName" label="用户名" 
       tooltip="输入用户名" labelposition="left" />
  <s:password name="passWord" label="密码"
       tooltip="输入密码" labelposition="left" />
  <s:submit value="登录" align="center" />
</s:form>
</body>
</html>

(2)创建Action动作类,这里命名为HelloAction,继承ActionSupport类 ,类中定义的成员变量要与form表单中元素name相同,才能映射成功!注意类HelloAction要符合javabeans规范,每个成员变量要有getter,setter方法。

package com;
import com.opensymphony.xwork2.ActionSupport;


public class HelloAction 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,默认执行execute()方法,可以在struts.xml中指定
	public String execute() throws Exception {
		if (userName.equals("lang") && passWord.equals("lang")) {
			return "success";
		} else {
			return "error";
		}
	}
}

(3)配置web.xml文件,配置<filter>与<filter-mapping>元素,设置过滤页面类型。

可以右键项目->myeclipse->add stuts capabilities自动配置,结果:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" 
	xmlns="http://java.sun.com/xml/ns/javaee" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
	http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
  <display-name></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)配置struts.xml,设定每个动作的处理类及函数与执行完成后的跳转函数。

这里只有一个动作,就是Login,当点击登录按钮时,工作传到com.HelloAction的execute()函数处理,执行完成后,如果返回success,则跳转到success.jsp,返回error则跳转到error.jsp.

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
	 <constant name="struts.devMode" value="false" />
	<package name="basicstruts2" extends="struts-default">
	   
	  <action name="Login" class="com.HelloAction"
	           method="execute">
            <result name="success">/success.jsp</result>
            <result name="error">/error.jsp</result>
      </action> 
        
  </package>
</struts>    

应用实例(二):整合Hibernate和Struts2开发一个注册、登陆系统。

实例 (一)中对用户名和密码的验证直接写在execute()函数里很不安全,且包含组合少。对于登录操作,应该与数据库结合起来,并增加注册操作,将数据插入数据库。所以这里结合Hibernate框架。

整个项目:

重要函数:

保存到数据库:

org.hibernate.Session session=HibernateSessionFactory.getSession();
Transaction tx=session.beginTransaction();
session.save(email);
tx.commit();

执行sql语句查询获得数据:

org.hibernate.Session session=HibernateSessionFactory.getSession();
Transaction tx=session.beginTransaction();
Query query=session.createQuery("from Emailtab where email="+email.getEmail());
List list=query.list();
tx.commit();

if(list.size()==1){
    return SUCCESS;
}

(1)在数据库中建表emailtab,表中包含email与password两个属性,email为主键。

(2)用Hibernate建立与数据库的联系:构建可持久化类Emailtab.java,生成session工厂:HibernateSessionFactory.java。配置映射文件Emailtab.hbm.xml与配置文件hibernate.cfg.xml,这些通过右键项目->myeclipse->add stuts capabilities可自动完成。

(3)数据库连接完成,接下来就是和(一)一样编写jsp页面:

注册register.jsp:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<%@taglib uri="/struts-tags" prefix="s" %>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>My JSP 'register.jsp' starting page</title>
  </head>
  
  <body>
    <p>注册一个新用户</p>
    <s:form action="Register">
    <s:actionerror/><s:fielderror/>
    <s:textfield name="email.email" label="邮箱名"/>
    <s:password name="email.password" label="口令"/>
    <s:submit value="注册"/>
    </s:form>
  </body>
</html>

login.jsp<body>部分:

<body>
    <p>请输入邮箱名和密码:</p>
   <s:form action="Login">
   <s:actionerror/><s:fielderror/>
   <s:textfield name="email.email" label= "邮箱名"   tooltip="输入邮箱名" labelposition="left"/>
   <s:password name="email.password" label="密码"   tooltip="输入密码" labelposition="left"/>
   <s:submit value="登陆" align="Center"/>
   </s:form>
</body>

(4)动作类:RegisterAction:

这时它的成员变量为Emailtab类对象,两个方法register()与login()分别处理注册于登录动作。

package com;

import java.util.List;
import javax.jms.Session;
import org.hibernate.Query;
import org.hibernate.Transaction;
import com.opensymphony.xwork2.ActionSupport;

public class RegisterAction extends ActionSupport {
	private Emailtab email;

	public Emailtab getEmail() {
		return email;
	}

	public void setEmail(Emailtab email) {
		this.email = email;
	}

	@Override
	public String execute() throws Exception {
		// TODO Auto-generated method stub
		return SUCCESS;
	}
	
	public String register() throws Exception {
		try {
			org.hibernate.Session session=HibernateSessionFactory.getSession();
			Transaction tx=session.beginTransaction();
			session.save(email);
			tx.commit();
			return SUCCESS;
		} catch (Exception e) {
			e.printStackTrace();
			HibernateSessionFactory.closeSession();
			return ERROR;
		}
	}
	
	public String login() throws Exception {
		try {
			org.hibernate.Session session=HibernateSessionFactory.getSession();
			Transaction tx=session.beginTransaction();
			Query query=session.createQuery("from Emailtab where email="+email.getEmail());
			List list=query.list();
			tx.commit();
			System.out.println(list.size());
			if(list.size()==1)
			{
				System.out.print("111\n");
				return SUCCESS;
			}
			return ERROR;
		} catch (Exception e) {
			e.printStackTrace();
			HibernateSessionFactory.closeSession();
			return ERROR;
		}
	}	
}

(5)web.xml:同(一)

(6)struts.xml:

4个动作。进入注册界面、注册、进入登录界面、登录。输入registerInput进入注册界面;输入loginInput进入登录界面。当然也可以直接输入register.jsp等进入

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
 <constant name="struts.devMode" value="false" />
 <package name="basicstruts2" extends="struts-default">

	<action name="registerInput">
		<result>/register.jsp</result>
	</action>
	
	<action name="loginInput">
		<result>/login.jsp</result>
	</action>
	
	<action name="Register" class="com.RegisterAction" method="register">
		<result name="success">/success.jsp</result>
		<result name="error">/error.jsp</result>
	</action>
	
	<action name="Login" class="com.RegisterAction" method="login">
		<result name="success">/welcome.jsp</result>
		<result name="error">/error.jsp</result>
	</action>

  </package>
</struts>    

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值