ssh2步骤.docx

上传人:b****3 文档编号:6967420 上传时间:2023-05-10 格式:DOCX 页数:20 大小:28.81KB
下载 相关 举报
ssh2步骤.docx_第1页
第1页 / 共20页
ssh2步骤.docx_第2页
第2页 / 共20页
ssh2步骤.docx_第3页
第3页 / 共20页
ssh2步骤.docx_第4页
第4页 / 共20页
ssh2步骤.docx_第5页
第5页 / 共20页
ssh2步骤.docx_第6页
第6页 / 共20页
ssh2步骤.docx_第7页
第7页 / 共20页
ssh2步骤.docx_第8页
第8页 / 共20页
ssh2步骤.docx_第9页
第9页 / 共20页
ssh2步骤.docx_第10页
第10页 / 共20页
ssh2步骤.docx_第11页
第11页 / 共20页
ssh2步骤.docx_第12页
第12页 / 共20页
ssh2步骤.docx_第13页
第13页 / 共20页
ssh2步骤.docx_第14页
第14页 / 共20页
ssh2步骤.docx_第15页
第15页 / 共20页
ssh2步骤.docx_第16页
第16页 / 共20页
ssh2步骤.docx_第17页
第17页 / 共20页
ssh2步骤.docx_第18页
第18页 / 共20页
ssh2步骤.docx_第19页
第19页 / 共20页
ssh2步骤.docx_第20页
第20页 / 共20页
亲,该文档总共20页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

ssh2步骤.docx

《ssh2步骤.docx》由会员分享,可在线阅读,更多相关《ssh2步骤.docx(20页珍藏版)》请在冰点文库上搜索。

ssh2步骤.docx

ssh2步骤

MyEclipse7.5快速半手工开发SSH2(Struts2+Spring+Hibernate)应用之“超光速”教程

下面是一篇ssh2快速入门教程。

需要有java+数据库的基础。

附件中是该文的word文档,可以下载阅读。

 

MyEclipse7.5快速半手工开发SSH2(Struts2+Spring+Hibernate)应用之“超光速”教程

1. 新建一个Web Project,命名为:

struts2_template

2. 导入样例程序struts2-blank-2.1.8.war中lib下的包

(暂时只需要这几个,网上提醒不能随便加包!

):

commons-fileupload-1.2.1.jar

commons-io-1.3.2.jar

freemarker-2.3.15.jar

ognl-2.7.3.jar

struts2-core-2.1.8.jar

xwork-core-2.1.6.jar

 如果出现类似Unable to load configuration. - bean - jar:

file:

   

 的错误,一般可能是导入的jar包有问题了。

但是,当你更正了问题之后

 错误还出现!

这是因为你没有将发布到tomcat中的应用移除干净!

   

 方法是:

退出MyEclipse,到workspace文件夹中,找到原来的工程文件夹,删除之;

然后再到workspace的

 .metadata\.me_tcat\webapps

文件夹中,找到相应的发布文件夹也删除之,然后重新启动MyEclispse就可以了。

提醒:

如果你做了许多工程,后来删除了。

其实都还在

.metadata/.me-tcat/webapps下面!

如果他们有错,就会影响到你后来的工程!

3. 在web.xml中加入支持struts2的filter,并将mapping设为/*

Filter的名字叫“struts准备与执行”,就是strutsPrepareAndExecute,敲入前面 几个字母系统就会找到了。

-------------------- 到此为止,我们的工程已经可以支持struts2了。

下面是实验 --------------

4. 在src目录中拷贝一个struts.xml作为书写配置的起点

(注意!

和以前版本不同,是src目录!

一个最简单的配置文件包括下面内容:

xml version="1.0" encoding="UTF-8" ?

>

DOCTYPE struts PUBLIC

    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"

    "http:

//struts.apache.org/dtds/struts-2.0.dtd">

   

        

            /index.jsp

        

        

-- Add actions here -->

    

    

-- Add packages here -->

其中重要的其实就一个:

action的执行和导航。

上面的

表示,当从URL请求名为HelloWorld的action时候,实际执行的是example.HelloWorld类。

附注:

类的分包:

在src下面建包即可。

/index.jsp

表示当HelloWorld返回字符串“gotoIndex”时候,跳转到/index.jsp。

5. 下面建一个实现上面action的类。

先在src下面建一个package,名为example;

下面建一个HelloWorld类,继承ActionSupport(在com.opensymphony.xwork2中)

   里面就一个函数:

    public String execute() throws Exception {

    System.out.println("Hello from www.WarpSpeedE");

        return "gotoIndex";

    }

6. 运行一下试试,访问URL为/HelloWorld.action

浏览器还是显示index.jsp,因为这个action自动跳到index.jsp了,

但console窗口却出现了提示,说明该action已经运行。

========= 好了,我们的action已经配置成功了 ===========

7. 下面我看看表单的提交;表单当然是放在jsp文件中。

我们将jsp文件放到WebRoot下面(!

这才是网站的根目录!

)。

作为实验,我们建一个子目录login来存放我们的样例表单login.jsp;

(遗憾的是现在还没有理想的可视化的编辑struts2表单的IDE)

一个最基本的jsp文件如下:

<%@ page contentType="text/html; charset=UTF-8" %>

<%@ taglib prefix="s" uri="/struts-tags" %>

也就是说,最上面两行最关紧要!

拷下即可。

然后,使用DreamWeaver之类,编写相应的表单:

下面是使用Eclipse自动生成的带表单的一个简单页面:

------------------------------------------------------------------------

DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

  

    www.WarpSpeedE

    

    

    

    

    

---->

  

  

  

    

      

        

          Login:

          

        

        

          Password:

          

         

        

          

        

      

    

  

-----------------------------------------------------------------------------

我们做一下修改即可将它变成struts2的jsp表单页面:

(1)第一行替换成struts2要求的那两行<%@...

(2)替换所有表单字段。

例如:

替换成:

form action="Login">

注意:

这里的action="Login"指明要提交给一个名为Login的action

换成:

textfield name="login" />

替换成

password name="password" />

替换成:

submit/>

惊奇小发现:

我在MyEclipse7.5中发现一个Web Page Editor,用这个编辑器可以插入struts2的标签!

虽然还很是primitive,但总是好多了,。

好了,改名存盘为login.jsp。

8. 我们的action还没有呢!

好办,将HelloWorld.java拷贝粘贴一个出来Login.java:

package example;

import com.opensymphony.xwork2.ActionSupport;

public class Login extends ActionSupport {

    public String execute() throws Exception {

        return "toIndex";

    }

}

再做这样一些工作:

(1)把表单字段写出来:

    private String login;

    private String password;

(2)菜单Source->Generate Getters & Setters生成所有的getter和setter方法。

注意了啊!

看似简单,实际上内涵极为深奥:

这里的setter可是struts2“注入”调用的

    (当我们执行execute()的时候,表单字段已经设置好了!

(3)修改执行函数,把表单的输入打印到控制台(console,这样打印没什么用处,只是试验一下而已):

    public String execute() throws Exception {

    System.out.println(login + ":

" + password);

        return "gotoIndex";

    }

9. 好了,现在东西都有了,只要配置一下struts.xml,就可以让表单login.jsp提交给Login.action了:

拷贝一份原来的action, 修改一下:

        

            /index.jsp

        

10. 部署并运行看看

---hmm, 还可以,console打印出来输入的值,页面跳到index.jsp了。

但是!

好像输入表单本身的现实有些怪!

为什么呢?

看看页面源码:

怎么多出来许多table标签呢?

-----原来,默认模式下,struts2会将你的form标签自动加上table标签!

可是我们已经做好了table了,美工过了!

对策:

简单:

类似下面那样加上这样theme属性即可:

textfield name="login" theme="simple" />

要求struts使用simple主题,它就不多事了。

11. 数据的显示:

Struts将action处理的数据(包括表单提交给action的数据)和应用(Application)范围内的数据

都存储在一个叫做“值栈”(valueStack)的地方;有很多种方法可以从这里取出值来:

我们将struts.xml中Login.action的配置改一下,让它转到logok.jsp页面:

        

            /login/logok.jsp

        

然后做一个logok.jsp, 放到WebRoot/login目录下, 其内容主要是在body标签中间,加上:

text name="login"/>


property name="login" />


${login}


这样3行代码;

运行一下试试。

可以看到,三种方法都可以将输入的用户名显示出来。

12. 老革命的老问题:

汉字问题

试试输入一个汉字,显示出来的是乱码。

解决:

方法很多;不过既然我们要整合Spring, 不如现在就使用Spring的解决模式:

13. 加入Spring支持:

在工程名上点鼠标右键,在菜单中选择“MyEclipse”->“Add Spring Capabilities”;

选中所有Spring开头的包;

选择“拷贝支持包到lib目录”;另注意:

(1)注意将applicationContext.xml放到WEB-INF/目录下;

(2)增加一个listener:

ContextLoaderListener

(3)删除掉重复的包:

asm和cglib

14. 解决汉字乱码问题:

在web.xml中,增加一个filter:

org.springframework.web.filter.CharacterEncodingFilter

并设置两个参数:

encoding=UTF-8

forceEncoding=true

设置其mapping为/*

再输入汉字试试,没问题了吧!

(没有告诉你的小秘密:

如果你还是出错误,那么在web.xml的filter配置中,

看看是否encoding filter放到了struts filter的后面...提到(map到)前面来!

15. 增加Hibernate支持

现在干脆将Hibernate的支持一并加入:

只需要注意几点:

选中前面三个包;拷贝到lib目录;使用Spring的配置文件。

16. 启动数据库。

我们使用MyEclipse自带的“德贝(Derby)”数据库:

Window->Show->DB Browser中,双击MyEclipse Derby即可启动数据库。

17. 逆向工程生成ORM对象和DAO类

在Derby数据库中,找到CLASSICCARS, 右击CUSTOMER表,选择Hibernate 逆向工程

选择Java src folder(我们以前已经创建了一个src/hib目录,就用它)

选中三个复选框,但不生成抽象类。

Finish!

18. 看看我们完成了什么:

hib目录下面生成了许多类,其中最重要的是CustomerDAO,我们可以通过其中的

getFromApplicationContext(ApplicationContext ctx)

静态方法得到它的一个实例,就可以开始数据操作了!

19. 将HelloWorld.java复制一个到ListCustomers.java

然后修改其execute方法:

public String execute() throws Exception {

ApplicationContext ct = WebApplicationContextUtils

.getWebApplicationContext(ServletActionContext

.getServletContext());

CustomerDAO dao =

CustomerDAO.getFromApplicationContext(ct);

List list = dao.findAll();

int n = list.size();

for (int i = 0; i < n; i++) {

Customer c = list.get(i);

String name = c.getCustomername();

String phone = c.getPhone();

System.out.println(name + ":

" + phone);

}

return "gotoCustomerList";

}

直接从浏览器地址栏访问一下这个action:

http:

//localhost:

8080/ListCustomers

会发现客户的信息已经打印到console中了,只是由于没有配置导航,所以页面显示404错误。

没关系,下面fix这个问题。

遗留问题:

网上有说:

action当然不应该封装业务逻辑,但是action是controller,比如在 

一个action里面可能会由几个Business Service的方法组成一个流程, 

如果仅对service的方法实现事务控制,那如果流程中某一个service 

的方法出现了问题,流程中之前调用的其他service怎么回滚呢。

20. 在页面view显示结果

先在struts.xml中配置导航:

/login/customerlist.jsp

上面导航要求控制跳转到customerlist.jsp,因此我们需要在login子目录中,新建一个customerlist.jsp,其内容可先从原来的页面中拷贝过来。

核心代码:

iterator value="list" >

name:

 

property value="customername" />

city:

 ${city}

address:

 

text name="addressline1"/>

iterator>

这里面,我们尝试了几种不同的表现方法。

首先,是

iterator>标签。

它的作用是遍历由value指定的“集合型”对象(一般为Map或List类型);

然后是

property>标签,它的作用是将iterator中的对象的属性取出来。

property value="customername" />的作用相当于调用list的getCustomername()方法。

从上面的代码中可以看出,除了使用

property>之外,我们还尝试了另外两种标签方法,一是

text>,它可以生成一个国际化的信息文本;一个是${city},好象是OGNL表达式语言。

细节问题以后研究。

网上说:

既然是struts2,就尽量用struts2的标签。

又说:

OGNL是主流,和

…>配合使用

注意:

上面的代码有一个重大问题!

实际上它的运行结果是空,不显示任何东西!

为什么呢?

因为:

看看上面execute()方法中的一个变量声明(带下划线的那句):

List list = dao.findAll();

这个变量(属性)就是我们在

iterator>标签中要迭代(循环)的那个对象。

但是,迭代的对象必须是action类的属性!

而且必须有getter方法!

所以,ListCustomers.java类中必须先声明一个属性:

private List list;

然后,再加入一个list的getter方法:

public List getList(){

  return list;

}

(而在execute()内部的list前面的类型声明需要去掉。

一个实例:

简单新闻发布

1. 创建一个表:

表名:

MSG

字段:

id,integer, primary key

      Au, varchar, 40

      Msg, varchar, 255

      

2. hibernate逆向工程(注意第二页要选hibernate type,即使用hibernate数据类型,assigned)

3. 设计流程(struts.xml):

表单页面index.jsp包含输入表单和数据显示两个部分

action类aaa.java用来接受表单数据。

Action将数据写入数据库后再回去(跳转)向index.jsp

        

            /index.jsp

            /index.jsp

        

4. 建struts2表单,其中msg是新闻对象

form action="aaa" method="post" theme="simple">

ID:

textfield name="msg.id" value="0">

textfield>

MSG:

textfield name="msg.msg">

textfield>

AU:

textfield name="msg.au">

textfield>

submit>

submit>

form>

5. 在aaa.java中使用属性msg来接收表单数据。

写入数据的“三板斧”是:

1) 获取应用程序上下文

2) 获取DAO对象实例

3) 获取Session对象并启动事务处理

//1

ApplicationContext ct = WebApplicationContextUtils

.getWebApplicationContext(ServletActionContext

.getServletContext());

//2

MsgDAO dao = MsgDAO.getFromApplicationContext(ct);

//3

Session s = dao.getSessionFactory().openSession();//HibernateSessionFactory.getSession();

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 高中教育 > 高考

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2