hibernate_struts登陆教程
- 格式:doc
- 大小:4.35 MB
- 文档页数:27
hibernate的基本用法Hibernate是一个开源的Java框架,用于简化数据库操作。
它为开发人员提供了一个更加简单、直观的方式来管理数据库,同时也提高了应用程序的性能和可维护性。
本文将逐步介绍Hibernate的基本用法,包括配置、实体映射、数据操作等。
一、配置Hibernate1. 下载和安装Hibernate:首先,我们需要下载Hibernate的压缩包并解压。
然后将解压后的文件夹添加到Java项目的构建路径中。
2. 创建Hibernate配置文件:在解压后的文件夹中,可以找到一个名为"hibernate.cfg.xml"的文件。
这是Hibernate的主要配置文件,我们需要在其中指定数据库连接信息和其他相关配置。
3. 配置数据库连接:在"hibernate.cfg.xml"文件中,我们可以添加一个名为"hibernate.connection.url"的属性,用于指定数据库的连接URL。
除此之外,还需要指定数据库的用户名和密码等信息。
4. 配置实体映射:Hibernate使用对象关系映射(ORM)来将Java类映射到数据库表。
我们需要在配置文件中使用"mapping"元素来指定实体类的映射文件。
这个映射文件描述了实体类与数据库表之间的对应关系。
二、实体映射1. 创建实体类:我们需要创建一个Java类,用于表示数据库中的一行数据。
这个类的字段通常与数据库表的列对应。
同时,我们可以使用Hibernate提供的注解或XML文件来配置实体的映射关系。
2. 创建映射文件:可以根据个人喜好选择使用注解还是XML文件来配置实体类的映射关系。
如果使用XML文件,需要创建一个与实体类同名的XML文件,并在其中定义实体类与数据库表之间的映射关系。
3. 配置实体映射:在配置文件中,我们需要使用"mapping"元素来指定实体类的映射文件。
今天,写一个非常简单的通过struts+hibernate+spring的集成来实现用户登录验证的例子,让大家了解一下三者是如何是整合的。
我们可以通过myeclipse的向导,生成相应的环境搭建,如果使用向导添加SSH项目支持的话,大家记住我们我们添加的顺序为spring,hibernate,struts,我在这儿就不讲如何通过向导添加了,我会直接把源码给大家,大家按源码编写即可。
第一:applicationContext.xml文件的配置<?xml version="1.0" encoding="UTF-8"?><beansxmlns="/schema/beans"xmlns:xsi="/2001/XMLSchema-instance"xmlns:aop="/schema/aop"xmlns:tx="/schema/tx"xsi:schemaLocation="/schema/beans/schema/beans/spring-beans-2.0.xsd/schema/aop/schema/aop/spring-aop-2.0.xsd/schema/tx/schema/tx/spring-tx-2.0.xsd"><!-- 定义数据源 --><bean id="dataSource"class="mons.dbcp.BasicDataSource"><property name="driverClassName"value="com.mysql.jdbc.Driver"></property><property name="url"value="jdbc:mysql://192.168.1.90:3306/TestDB"></property><property name="username" value="root"></property><property name="password" value="hanxue123"></property></bean><!-- 定义使用hibernate --><bean id="sessionFactory"class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"><property name="dataSource"><ref bean="dataSource" /></property><property name="hibernateProperties"><props><prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop><prop key="hibernate.show_sql">true</prop></props></property><!-- 定义映射的文件 --><property name="mappingResources"><value>User.hbm.xml</value></property></bean><!-- 配置事务管理器 --><bean id="transactionManager"class="org.springframework.orm.hibernate3.HibernateTransactionManager"><property name="sessionFactory"><ref bean="sessionFactory"/></property></bean><!-- 配置事务的传播特性 --><tx:advice id="txAdvice" transaction-manager="transactionManager"><tx:attributes><tx:method name="find*" propagation="REQUIRED"/><tx:method name="save*" propagation="REQUIRED"/><tx:method name="del*" propagation="REQUIRED"/><tx:method name="modify*" propagation="REQUIRED"/><tx:method name="update*" propagation="REQUIRED"/><tx:method name="*" propagation="REQUIRED"/></tx:attributes></tx:advice><!-- 配置哪些类的哪些方法参与事务 --><aop:config><aop:pointcut id="allManagerMethod" expression="execution(*com.han.*.*.*(..))"/><aop:advisor pointcut-ref="allManagerMethod" advice-ref="txAdvice"/></aop:config><!-- 将业务逻辑对象通过spring注入到Action中,从而避免了在Action类中的直接代码查询 --><bean id="loginService" class="com.han.service.LoginServiceImpl"><property name="sessionFactory" ref="sessionFactory"></property></bean><bean name="/loginA" class="com.han.action.LoginA" scope="prototype"><property name="loginService" ref="loginService"></property></bean></beans>第二:user.hbm.xml文件的配置,定义与数据库的映射<?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC"-//Hibernate/Hibernate Mapping DTD 3.0//EN""/hibernate-mapping-3.0.dtd"><hibernate-mapping package="com.han.forms"><class name="LoginForm" table="t_user" lazy="false"><comment>Users may bid for or sell auction items.</comment><id name="id"><generator class="native"/></id><property name="username"></property><property name="password"></property></class></hibernate-mapping>第三:struts-config.xml文件配置<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.3//EN" "/dtds/struts-config_1_3.dtd"> <struts-config><form-beans><form-bean name="loginAF" type="com.han.forms.LoginForm"></form-bean></form-beans><global-exceptions /><global-forwards /><action-mappings><action path="/loginA"name="loginAF"type="org.springframework.web.struts.DelegatingActionProxy"scope="request"input="/index.jsp"><forward name="success" path="/success.jsp"></forward><forward name="failed" path="/failed.jsp"></forward></action></action-mappings><message-resources parameter="com.han.struts.ApplicationResources" /><plug-in className="org.apache.struts.validator.ValidatorPlugIn"><set-propertyproperty="pathnames"value="/org/apache/struts/validator/validator-rules.xml,/WEB-INF/validation.xml"/></plug-in></struts-config>第四:LoginService接口的配置package com.han.service;import com.han.forms.LoginForm;public interface LoginService {public abstract boolean findlogin(LoginForm user);}第五:接口实现的配置package com.han.service;import java.util.List;import org.springframework.orm.hibernate3.support.HibernateDaoSupport;import com.han.forms.LoginForm;public class LoginServiceImpl extends HibernateDaoSupport implements LoginService {public boolean findlogin(LoginForm user) {String hql="from LoginForm where username='"+user.getUsername()+"' and password='"+user.getPassword()+"'";System.out.println(hql);List userlist=this.getHibernateTemplate().find(hql);if (userlist.size()>0) return true;else return false;}}第六:ActionForm配置package com.han.forms;import org.apache.struts.action.ActionForm;public class LoginForm extends ActionForm {private int id;private String username;private String password;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getUsername() {return username;}public void setUsername(String username) {ername = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}}第七:Action配置package com.han.action;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.struts.action.Action;import org.apache.struts.action.ActionForm;import org.apache.struts.action.ActionForward;import org.apache.struts.action.ActionMapping;import org.apache.struts.actions.DispatchAction;import org.springframework.beans.factory.BeanFactory;import org.springframework.web.context.support.WebApplicationContextUtils; import com.han.forms.LoginForm;import com.han.service.LoginService;import com.han.service.LoginServiceImpl;public class LoginA extends DispatchAction {private LoginService loginService;public void setLoginService(LoginService loginService) {this.loginService = loginService;}public LoginService getLoginService() {return loginService;}public ActionForward execute(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response)throws Exception {LoginForm lf=(LoginForm)form;System.out.println(lf.getUsername());//loginService=new LoginServiceImpl();boolean flag=loginService.findlogin(lf);System.out.println(flag);if (flag){return mapping.findForward("success");}else{return mapping.findForward("failed");}}}第八:登录页面的配置<%@ page language="java" pageEncoding="ISO-8859-1"%><%@ taglib uri="/tags-bean" prefix="bean" %><%@ taglib uri="/tags-html" prefix="html" %><%@ taglib uri="/tags-logic" prefix="logic" %> <%@ taglib uri="/tags-tiles" prefix="tiles" %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html:html lang="true"><head><html:base /><title>index.jsp</title><meta http-equiv="pragma" content="no-cache"><meta http-equiv="cache-control" content="no-cache"><meta http-equiv="expires" content="0"><meta http-equiv="keywords" content="keyword1,keyword2,keyword3"><meta http-equiv="description" content="This is my page"><!--<link rel="stylesheet" type="text/css" href="styles.css">--></head><body><html:form action="loginA.do" method="post" ><table border="0"><tr><td>Login:</td><td><html:text property="username" /></td></tr><tr><td>Password:</td><td><html:password property="password" /></td></tr><tr><td colspan="2" align="center"><html:submit /></td></tr></table></html:form></body></html:html>第九:忘了web.xml文件了,加上<?xml version="1.0" encoding="UTF-8"?><web-app xmlns="/xml/ns/j2ee"xmlns:xsi="/2001/XMLSchema-instance" version="2.4"xsi:schemaLocation="/xml/ns/j2ee/xml/ns/j2ee/web-app_2_4.xsd"><servlet><servlet-name>action</servlet-name><servlet-class>org.apache.struts.action.ActionServlet</servlet-class> <init-param><param-name>config</param-name><param-value>/WEB-INF/struts-config.xml</param-value></init-param><init-param><param-name>debug</param-name><param-value>3</param-value></init-param><init-param><param-name>detail</param-name><param-value>3</param-value></init-param><load-on-startup>0</load-on-startup></servlet><servlet-mapping><servlet-name>action</servlet-name><url-pattern>*.do</url-pattern></servlet-mapping><welcome-file-list><welcome-file>index.jsp</welcome-file></welcome-file-list><context-param><param-name>contextConfigLocation</param-name><param-value>classpath*:applicationContext.xml</param-value></context-param><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener></web-app>以上设置,通过SSH框架实现了最基础的用户登录功能。
在上一篇博文中已经学习了如何整合mybatis和spring,实现持久层的CRUD操作、业务层的事务管理和spring的IoC。
现在我们这个demo的基础上,继续整合struts2,并利用json插件和jquery实现ajax,完成后系统将实现登录与注册的简单功能。
浏览器端如何简单、高效地与服务器端进行数据交互是web开发者最为关心的内容。
在客户端构造intput表单数据或者拼凑URL参数名称/参数值,然后在服务器端笨拙地用request.getParameter(“参数名称”)获取参数显然已经过时了,在struts2中,只要在action 里定义了input表单名称/URL参数名称对应的String类型属性,并设置getter和setter 方法,struts2在调用action的时候就可以根据参数值自动帮你设置好action中对应的属性值供你使用,这极大地方便了开发者。
但是json更为强大——它可以根据浏览器端上传的符合格式的数据设置action中对象的值,也就是说,struts2自动封装的数据只有一层,而json是无限层。
json给页面参数的传递带来极大的方便,结合jquery来使用,可以轻易地做到页面局部刷新、页面无跳转进行友好的系统异常提示等,其中后者是我觉得最有必要做到的一点,在action中定义一个message变量,把action方法执行的结果或者系统异常信息放到里面以json的方式返回给客户端,客户端根据这个变量的结果来进行下一步的操作或者提示系统异常信息,非常地好用。
json由javascript中的对象和数组构成,基本形式是{key:value},key为属性名称,value 为属性值,value可以为数字、字符串、数组、对象,value可以为数组和对象是json可以封装无限层数据的关键所在。
至于如何建构和解析json不是本篇博文的详细表述范围,请参考其他资料。
现在就让我们利用struts2作为MVC框架,整合json插件,在浏览器端使用jquery解析和系列化json数据,由此制作一个具有登陆/注册功能的小demo。
一个hibernate登录注册工程HibernateMySQLJSPXMLSQL项目名称:loginandregister.其目录:loginandregister|----src| -----hibernate.yan| -----LoginServlet.java |-----RegisterServlet.java | ---- User.java| -----WriterDB.java| -----user.hbm.xml| -----hibernate.cfg.xml|----jre sytem library|---J2EE 1.4 Library|---Referenced Library|---WebRoot|----Weta-inf|----WEB-INF|----lib|-----web.xml|-----login.jsp|-----register.jsp新建web project,命名为loginandregister,右击工程名,Myeclispe—>Add hibernate capabilities将hibernate的jar包加入,当然也可以通过项目属性—>构建路径,加入。
web.xml内容为:<?xml version="1.0" encoding="UTF-8"?><web-app version="2.4"xmlns="/xml/ns/j2ee"xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/xml/ns/j2ee/xml/ns/j2ee/web-app_2_4.xsd"><welcome-file-list><welcome-file>login.jsp</welcome-file></welcome-file-list><servlet><servlet-name>RegisterServlet</servlet-name><servlet-class>hibernate.yan.RegisterServlet</servlet-class></servlet><servlet-mapping><servlet-name>RegisterServlet</servlet-name><url-pattern>/RegisterServlet</url-pattern></servlet-mapping><servlet><servlet-name>LoginServlet</servlet-name><servlet-class>hibernate.yan.LoginServlet</servlet-class></servlet><servlet-mapping><servlet-name>LoginServlet</servlet-name><url-pattern>/LoginServlet</url-pattern></servlet-mapping></web-app>user.hbm.xml内容为:<?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""/hibernate-mapping-3.0.dtd"><hibernate-mapping><class name="er" table="user"><id name="id"><generator class="identity" /></id><property name="name" type="string" ><column name="name"></column></property><property name="password" type="string" ><column name="password"></column></property><property name="phonetype" type="int" ><column name="phonetype"></column></property></class></hibernate-mapping>hibernate.cfg.xml为:<?xml version='1.0' encoding='gbk'?><!DOCTYPE hibernate-configuration PUBLIC"-//Hibernate/Hibernate Configuration DTD 3.0//EN""/hibernate-configuration-3 .0.dtd"><!-- Generated by MyEclipse Hibernate Tools.--><hibernate-configuration><session-factory><!--统一设置成UTF-8编码--><propertyname="dialect">org.hibernate.dialect.MySQLDialect</property><propertyname="connection.url">jdbc:mysql://localhost/lrdatabase?useUnicode=tr ue&characterEncoding=UTF-8</property><property name="ername">root</property><property name="connection.password">123456</property><propertyname="connection.driver_class">com.mysql.jdbc.Driver</property><!--一些可选性能参数设置--><!-- Enable Hibernate's automatic session context management--><property name="current_session_context_class">thread</property><!-- Disable the second-level cache --><property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property><!-- Echo all executed SQL to stdout --><property name="show_sql">true</property><mapping resource="hibernate/yan/user.hbm.xml" /></session-factory></hibernate-configuration>login.jsp:<%@ page language="java" contentType="text/html; charset=utf-8"pageEncoding="utf-8"%><%request.setCharacterEncoding("GBK"); %><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>登录页面</title></head><body><form action="<%=request.getContextPath() %>/LoginServlet"> <table align="center" border=0 width="400" height="100" cellspacing="0"><tr align="center"><td>用户登录</td></tr><tr><td><font size="5">username:</font></td><td><input type="text" name="username"/></td></tr><tr><td><font size="5">password:</font></td><td><input type="password" name="password"/></td></tr><tr><td><input type="submit" name="login" value="login"/></td> <td><a href="register.jsp" target="_blank">注册</a></td></tr></table></form></body></html>register.jsp:<%@ page language="java" contentType="text/html; charset=utf-8"pageEncoding="utf-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN""/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>注册页面</title></head><body><span >注册</span><form id="form1" name="form1" method="post"action="<%=request.getContextPath() %>/RegisterServlet"><table align="center" width="571" height="165"border="0" cellspacing="0" ><tr><td>请输入名称:</td><td><input name="name" type="text"></td></tr><tr><td>请输入密码:</td><td><input name="password" type="text"></td></tr><tr><td>请选择手机型号:</td><td><select name="phonetype" ><option value="1">phone1</option><option value="2">phone2</option><option value="3">phone3</option></select></td></tr></table><div align="center"><input name="submit" type="submit" value="submit" /></div></form></body></html>loginServlet.java:public class LoginServlet extends HttpServlet {protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// TODO Auto-generated method stubdoPost(req, resp);}protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// TODO Auto-generated method stubresp.setContentType("text/html;charset=utf-8");String name=req.getParameter("username");String ssname = new String(name.getBytes("iso-8859-1"),"utf-8");System.out.println("ss=:" + ssname);String password=req.getParameter("password");Transaction tx=null;Session session=null;PrintWriter out=resp.getWriter();String sql="from User where name='"+ssname+"' andpassword='"+password+"'";if(true){try{Configuration conf=new Configuration().configure();SessionFactory sf=conf.buildSessionFactory();session=sf.openSession();tx=session.beginTransaction();System.out.println(sql);Query query=session.createQuery(sql);List list=(List) query.list();mit();Iterator it=list.iterator();if(it.hasNext()){User user=(User) it.next();System.out.println(user.getName()+" "+user.getPassword()+" "+user.getPhonetype());out.println("<html>");out.println("<head><title>login</title></title>");out.println("<body>");out.println("successfully login:name:"+user.getName()+" password:"+user.getPassword()+" phonetype:"+user.getPhonetype());out.println("</body></html>");out.close();}else{out.println("<html>");out.println("<head><title>login</title></title>");out.println("<body>");out.println("不存在此用户信息");out.println("</body></html>");out.close();}}catch(Exception e){e.printStackTrace();}}else{out.println("<html>");out.println("<head><title>login</title></title>");out.println("<body>");out.println("请输入信息完整");out.println("</body></html>");out.close();}}}RegisterServlet.javapublic class RegisterServlet extends HttpServlet {protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// TODO Auto-generated method stubdoPost(req, resp);}protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// TODO Auto-generated method stubresp.setContentType("text/html;charset=utf-8");String name=req.getParameter("name");String password=req.getParameter("password");String phonetype=req.getParameter("phonetype");String ssname = new String(name.getBytes("iso-8859-1"),"utf-8");System.out.println(ssname+" "+password);//int numofphonetype=Integer.getInteger(phonetype).intValue();//这句话导致异常int a=Integer.parseInt(phonetype);PrintWriter out=resp.getWriter();try{if(ssname!=""&&password!=""&&phonetype!=""){WriteDB writer=new WriteDB();writer.WriteLogToDB(ssname, password, a);out.print("注册成功");}else{out.print("请填写完整!");}}catch(Exception e){out.print("Error :"+e.getMessage());}}public void destroy() {// TODO Auto-generated method stubsuper.destroy();}public void init() throws ServletException {// TODO Auto-generated method stubsuper.init();}}WriterDB.javapublic class WriteDB {public static SessionFactory sf;static {try{Configuration conf=new Configuration().configure();sf=conf.buildSessionFactory();System.out.println("sf=conf.buildSessionFactory()");}catch(Exception e){e.printStackTrace();}}public void WriteLogToDB(String name,String password,int phonetype) {User user=new User();user.setName(name);user.setPassword(password);user.setPhonetype(phonetype);Session sessions=sf.openSession();Transaction tran=null;try{tran=sessions.beginTransaction();sessions.save(user);mit();//提交// System.out.println("已正常提交数据:"+con.getId()+" ,"+con.getLogcontent()+" ,"+con.getLogdate());}catch(Exception e){if(tran!=null){tran.rollback();}}finally{sessions.close();}}}User.javapublic class User {private int id;private String name;private String password;private int phonetype;public User() {}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) { = name;}public String getPassword() {return password;}public void setPassword(String password) { this.password = password;}public int getPhonetype() {return phonetype;}public void setPhonetype(int phonetype) {this.phonetype = phonetype;}}数据库脚本:/*MySQL Data TransferSource Host: localhostSource Database: lrdatabaseTarget Host: localhostTarget Database: lrdatabaseDate: 2010-4-1 14:51:51*/SET FOREIGN_KEY_CHECKS=0;-- ------------------------------ Table structure for user-- ----------------------------CREATE TABLE `user` (`id` int(11) NOT NULL AUTO_INCREMENT,`name` varchar(20) CHARACTER SET utf8 DEFAULT NULL,`password` varchar(20) CHARACTER SET utf8 DEFAULT NULL, `phonetype` tinyint(11) DEFAULT NULL,PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf-8;。
struts2入门手册首先这个教程是基于你已经安装了myeclipse的基础上的,如果你还没有安装myeclipse 工具软件的话,你需要马上去安装一个。
如果你已经有了工具软件了的话,现在就按照以下步骤来入门struts2吧。
一、下载struts2进入struts的官网/,点击download,选择Full Distrybution:下的struts2-xxx-all.zip,下载struts2的最新版本,将压缩包解压,放置到D盘目录下。
二、解压struts2进入你解压后的struts2文件夹中,到D:\struts2-xxx\apps中,解压其中的struts2-blank.war 压缩文件到D:\struts2-xxx\example,这是struts2提供的基础例子,里面的WEB-INF\lib目录下的包正是struts2正常工作所需要的基本包。
三、导入struts2基本包打开你的myeclipse,创建一个web project工程,命名为test(你也可以自己随意起一个),不要急着点击Finish,先选择Next>,继续选择Next>,在弹出的对话框中把第二个单选框打勾,如图,再点击Finish。
创建好之后在你创建的工程上目录下的WebRoot/WEB-INF/lib目录上单击右键,选择import...,选择General下的File System,点击Next>,选择Browse...,浏览选择到D:\struts\example\WEB-INF\lib目录,点击确定。
选择Sellct All,点击Finish,就完成了struts需要的最基础的核心包的导入。
四、用struts实现一个简单的登陆验证1.修改工程目录下的WebRoot\WEB-INF目录下的web.xml文件,将里面的内容替换为如下代码:<?xml version="1.0"encoding="UTF-8"?><web-app xmlns:xsi="/2001/XMLSchema-instance"xmlns="/xml/ns/javaee"xsi:schemaLocation="/xml/ns/javaee/xml/ns/javaee/web-app_3_0.xsd"id="WebApp_ID"version="3.0"><display-name>test</display-name><!-- 设置初始页面的URL --><welcome-file-list><welcome-file>login.jsp</welcome-file></welcome-file-list><!-- 设置struts过滤器 --><filter><filter-name>struts2</filter-name><filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class></filter><filter-mapping><filter-name>struts2</filter-name><url-pattern>/*</url-pattern></filter-mapping></web-app>2.在工程的src目录下创建struts.xml,代码如下:<?xml version="1.0"encoding="UTF-8"?><!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN""/dtds/struts-2.3.dtd"><struts><!-- 是否开启动态方法调用 --><constant name="struts.enable.DynamicMethodInvocation"value="false"/> <!-- 指定被struts2处理的请求的后缀类型,多个用逗号隔开 --><constant name="struts.action.extension"value="action"/><!-- 设置浏览器是否静态缓存内容,开发阶段最好关闭 --><constant name="struts.devMode"value="true"/><!-- 设置当struts.xml改动后,是否重新加载,默认为false,开发环境下最好打开 --> <constant name="struts.configuraction.xml.reload"value="true"/> <package name="myPackage"namespace="/"extends="struts-default"> <action name="login"class="action.LoginAction"><result name="success">/welcome.jsp</result> <result name="input">/login.jsp</result></action></package></struts>3.在工程的src目录下创建package(包),命名为action,在action中新建class,命名为LoginAction,代码如下:package action;import javax.servlet.http.HttpSession;import com.opensymphony.xwork2.ActionSupport;import org.apache.struts2.ServletActionContext;@SuppressWarnings("serial")public class LoginAction extends ActionSupport {private String name;private String password;public String getName() {return name;}public void setName(String name) { = name;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public String forward() throws Exception {return SUCCESS;}//重载ActionSupport中的execute()方法public String execute() throws Exception {//验证输入的Name是否为"name",是则返回"success"否则返回"input"if("name".equals(name)) {HttpSession session = ServletActionContext.getRequest().getSession();session.setAttribute("name", name);return SUCCESS;} else {return INPUT;}}}4.在工程的WebRoot目录下创建login.jsp,代码如下:<%@page language="java"contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><%@taglib prefix="s"uri="/struts-tags"%><!DOCTYPE html PUBLIC"-//W3C//DTD HTML 4.01 Transitional//EN""/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type"content="text/html; charset=UTF-8"> <title>Login</title></head><body><!-- 创建一个登陆表单 --><s:url action="login"id="loginUrl"></s:url><s:form action="%{loginUrl}"method="post"><s:textfield label="Name"name="name"/><s:password label="Password"name="password"/><s:submit></s:submit></s:form></body></html>5.在工程的WebRoot目录下创建welcome.jsp,代码如下:<%@page language="java"contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%><%@taglib prefix="s"uri="/struts-tags"%><!DOCTYPE html PUBLIC"-//W3C//DTD HTML 4.01 Transitional//EN""/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type"content="text/html; charset=UTF-8"> <title>Welcome</title></head><body><h1>登陆成功</h1></body></html>现在就来验证一下我们的登陆页面吧,选择工具栏中的按钮,在弹出的对话框中单击project后的矩形选框,从下拉列表中选择你创建的工程,然后单击Add,从弹出的对话框中单击sever后的矩形选框,从下拉列表中选择tomcat7,单击Finish。
*编写环境:*开发工具:Myeclipse6.01*SPRING :spring2.0*STRUTS :struts1.2*HIBERNATE:hibernate3.0*JDK: 1.6*TOMCAT: 6.0*WINDOW641.新建web项目。
2.选中新建项目,右键--》选择“myeclipse”--》添加Struts支持。
3.在弹出的信息框,有必要修改一下图中的地方。
4.上面的操作完成之后,打开我们的项目我们可以看到我们的项目结构发生了变化,引入了一些struts标签和生成了struts-config.xml配置文件。
5.开始添加spring支持,同样选中新建项目,右键--》选择“myeclipse”--》“添加spring 支持”,在弹出的信息框,做如下内容修改:6.点击“next”,直接选择默认,当然也可根据自己的规则做修改。
7.在添加“Hibernate”支持的时候,首先做的工作是创建一个数据源。
这个创建方法有很多中(找百度可得)这里只介绍一种:打开你的myeclipse的右上角的小三角,选择“myeclipsedatabase explorer”在弹出的界面中,在如图位置右键“new”在弹出的界面中做如下修改:修改完成后点击“test driver”成功则继续。
8.暂时回到myeclipse开发界面。
正式开始添加“Hibernate”支持。
在弹出的界面中做如图修改:点击“next”这里如图,选择spring的配置文件。
下一步操作后,做如下图修改操作:下一步之后,界面修改操作,如下图:去掉复选框中的选项,然后点击“finish”完成整个操作。
之后将会直接打开spring的配置文件,然后你核对一下您的数据库连接是否正确。
至此三大支持操作完成,启动没有问题说明框架雏形已经完成。
9.在项目中的WEB-INF下找到web.xml,做如下修改:格式头部分省略,下面是需要新增的代码<!--初始化spring配置参数 --><context-param><param-name>contextConfigLocation</param-name><param-value>classpath:applicationContext.xml</param-value></context-param><!-- 配置监听 --><listener><listener-class>org.springframework.web.context.ContextLoaderListener</list ener-class></listener><!-- 配置spring过滤器解决中文乱码问题 --><filter>Ps :这个时候我们再次启动服务的时候,发现可能会报错:因为我们在刚才已经把spring 的配置文件做了初始化,而在spring 的配置文件中有数据源的连接,而我们的项目中可能还缺少一个包:commons-pool-1.4.jar(/detail/u013806366/7897665 )当我们把这个包放在lib 下,我们再次启动项目的时候,错误信息应该会消失。
Struts2(上)一、经典的MVC模式二、Struts1.x对MVC的实现三、Struts1.x的主要组件和作用组件作用ActionServlet 中央控制器Action 分控制器,调用JavaBean实现业务逻辑,Action可以分为Action、DispatchAction等不同类型ActionForm 封装参数,实现服务器验证,文件上传等Forward 转发到目的地,可以是JSP,也可以是另一个ActionStruts-config.xml 配置文件,配置有ActionForm,Action,Forward等,通过XML解析,然后使用反射技术使用该文件Struts标签库和JSTL类似,和Struts-config.xml、ActionForm、Action等对象可以紧密集成四、Struts1.x 开发实例-登录程序见案例。
五、Struts2(WebWork)的MVCStruts2的MVC架构六、Struts2的主要组件组件作用FilterDispatcher 起中央控制器作用的过滤器Action 处于Model层的Action,调用JavaBean实现业务逻辑struts.xml 核心配置文件,配置有Action、Result等result 和forward类似,转发的目的地,支持多种视图技术。
七、Struts2的实例-登录在MyEclipse环境中建立一个新的web工程,名称“Struts2Login”,存放路径“f:\Struts2Login”。
在Struts2.0.11版本中找到war包struts2-blank-2.0.11.war,解开该war包,在WEB-INF/lib 目录下复制出所有的jar包,这些jar包就是一个Struts2程序所需要的基础jar包,把它们复制到新建的web工程的WEB-INF/lib目录中。
在src目录下建立一个类,包名mypack,类名UserAction,其代码如下:package mypack;import com.opensymphony.xwork2.ActionSupport;public class UserAction extends ActionSupport {private String username;private String userpass;public String getUsername() {return username;}public void setUsername(String username) {ername = username;}public String getUserpass() {return userpass;}public void setUserpass(String userpass) {erpass = userpass;}@Overridepublic String execute() throws Exception {if ("Mike".equals(username) && "123".equals(userpass)|| "张三".equals(username) && "abc".equals(userpass))return "success";elsereturn "error";}}在src目录下建立Struts2的配置文件struts.xml,内容如下:<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN""/dtds/struts-2.0.dtd"><struts><!-- 定义包管理配置的action 继承struts-default.xml中的配置 --><package name="actions" extends="struts-default"><!-- 定义Action(login.action) --><action name="login" class="erAction"><!-- 定义转发路径对应的字符串名 --><result name="success">/Success.jsp</result><result name="error">/Error.jsp</result></action></package></struts>修改web.xml,在其中加入一个过滤器,过滤/*路径。
Struts-hibernate登陆程序
功能:简单的身份认证系统JSP+struts+hibernate+mysql5.x 开发平台myeclipse 6.0 GA 数据库mysql 5.x 数据库名test 表名logic
1、new->project->myeclipse->web project
输入工程名,如blipnet。
2、右击test 选择myeclipse->add struts capability
修改yourcompany为你所在的公司,点击finish完成struts功能的添加
3、添加hibernate支持
建立连接
数据库连接
ID Generator :native .自动增长
同样,ID Generator :native .自动增长
4,STRUTS部署删除index.jsp
如下,可以修改数据输入路径
与上面建立的Form关联
填写跳转页面,注意不要选redirect=true,不然后面无法用request获取参数….
下图为业务流程图
前台index.jsp页面.
一,页面中文处理
1.将pageEncoding=”gbk”
2.保存即可
二,排版
1.用<table></table>,大小,位置便可自行调整了.代码如下图:
在longinForm.java找到ActionErrors validate()如下:
判断用户输入为空:
public ActionErrors validate(ActionMapping mapping,
HttpServletRequest request) {
// TODO Auto-generated method stub
ActionErrors errors=new ActionErrors();
if(==null||.equals(""))
errors.add("name.null",new ActionMessage("name.null"));
if(this.password==null||this.password.equals(""))
errors.add("passwd.null", new
ActionMessage("passwd.null"));
return errors;
}
注意名字要统一errors.add("name.null",new ActionMessage("name.null"));
如下图:
服务器发布
找到ApplicationResource.
1.输入name.null=您输入的用户名不能为空.
passwd.null=您输入的密码不能为空.
JA V A不支持中文,那么问题就来了.
如何处理中文呢?
同仁们不要急,很简单听我详细道来.
1.找到你所按装的JDK目录下的jdk1.5.0\bin
2.启动native2ascii.exe
3.复制您输入的用户名不能为空.
4.选择编辑->粘贴
5.按回车即生成JA V A所能读懂的语言了,将其拷贝到开始的ApplicationResource文件.
6.将原来的中文覆盖
name.null=\u60a8\u8f93\u5165\u7684\u540d\u5b57\u4e0d\u80fd\u4e3a\u7a7 a.
passwd.null=\u4f60\u8f93\u5165\u7684\u5bc6\u7801\u4e0d\u80fd\u4e3a\u7 a7a.
呵呵,好了中文处理到此完成了,以后还会有其他中文处理问题再去研究吧.
具体如下组图:
回到浏览器http://localhost:8080/hblogin/index.jsp 就可以进行判断为空的测试了.
好吧,再开始做后台数据登陆验证吧!
由Hibernate 操纵数据.
1.进入MyEclipse Hibernate
2.找到所在的表.
添加pojo类.
Hibernate将自动生成DAO类
其中所有操作将通过Session.
下面我们来编写POJO类,也就是DAO
重新建立新的函数,此函数主要用于后面在ACTION登陆是否成功.
public boolean isLogin(Admin admin){
boolean flag=false;
String hql="from Admin as a where =? and a.password=? "; //因为session Myeclipse已经给你写好了函数,现在我们直接调getSession() Query q=getSession().createQuery(hql);
q.setString(0,admin.getName());
q.setString(1,admin.getPassword());
List l=q.list();//存入链表
Iterator iter=l.iterator();//进行迭代
if(iter.hasNext()){
flag=true;//如果数据库中有则,设为TRUE
admin.setName(((Admin)iter.next()).getName());
}
getSession().close();
return flag;
}
进入uerLoginAction.java
在ActionForward execute()
写下如下的代码:
//以下编码很简单,在这里就不多少了
String name=longinForm.getName();
String password=longinForm.getPassword();
System.out.println(name+","+password);
Admin admin=new Admin();
admin.setName(name);
admin.setPassword(password);
AdminDAO admindao=new AdminDAO();
boolean flag=false;
flag= admindao.isLogin(admin);
System.out.println("flag="+flag);
if(flag)
{request.setAttribute("name", name);
return mapping.findForward("admin");
}
else
return mapping.findForward("error");
好了,后台数据处理基本做完了
接下来我们来写前台页面:
1.admin.jsp和error.jsp
2.设计如下图
admin.jsp
error.jsp
呵呵!!!
终于完成!!!最后我们来测试下吧!
2008.03.25
星期二刘刚博士指导刘玄后续完善。