设置tomcat
Window —— Preferences —— MyEclipse —— Servers —— Tomcat —— Tomcat 6.x
设置JRE(JDK包含调试,JRE不包含调试)
Window —— Preferences —— Java —— Installed JREs
注意64位机器下选择Program Files下Java目录下的JDK,而不要选择Program Files(x64)下Java目录下的JDK
配置结束后,在试运行配置的tomcat时,出现了如下错误:
a configuration error occured during startup.please verify the preference field with the prompt: cannot connect to VM
解决方法是在tomcat 6.x左边点+号,设置tomcat 的JDK,设置完成后,问题解决
struts目录
一般使用apps目录下的示例程序
首先把struts2-blank —— WEB-INF —— classes下的配置文件struts.xml拷贝
将这个配置文件拷贝到src目录下就可以,因为编译后默认后就会发到WEB-INF目录下
还要拷贝相关类库,在struts2-blank —— WEB-INF —— lib目录下
实际上,现在的struts里面已经不包含这两个jar包了
将这些jar包拷贝到WEB-INF的lib目录下
拷贝完后是看不到的,因为这是PackageExplorer,想要能看到在硬盘上完整的样子,
需要在Navigator视图中(现在的MyEclipse版本貌似也可以看到了)
添加后,可以看到添加的类库(Referenced Libraries 或者 Web App Libraries)
对web.xml文件的配置
也是参考struts2-blank项目
自己重写struts.xml的配置文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<!-- 不要删除,注释掉即可,可以仿写 -->
<!--
<constant name="struts.enable.DynamicMethodInvocation" value="false" />
<constant name="struts.devMode" value="true" />
<package name="default" namespace="/" extends="struts-default">
<default-action-ref name="index" />
<global-results>
<result name="error">
/error.jsp
</result>
</global-results>
<global-exception-mappings>
<exception-mapping exception="java.lang.Exception"
result="error" />
</global-exception-mappings>
<action name="index">
<result type="redirectAction">
<param name="actionName">
HelloWorld
</param>
<param name="namespace">/example</param>
</result>
</action>
</package>
<include file="example.xml" />
-->
<!-- Add packages here -->
<package name="default" namespace="/" extends="struts-default">
<action name="hello">
<result>
/Hello.jsp
</result>
</action>
</package>
</struts>
在WebRoot(或者WebContent)目录下建立Hello.jsp文件
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!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=ISO-8859-1">
<title>Hello struts2</title>
</head>
<body>
Hello struts2! This is Hello struts2 page!
</body>
</html>
这样运行后,就显示出了Hello.jsp的内容
说明:
1、应当访问的路径是:/项目名/Action名称.action,对应struts.xml中action标签的名字
即应当访问的是:/Struts2_0100_Introduction/hello.action
但实际访问时,.action是可以忽略的
2、struts.xml中package标签中的namespace与路径一一对应
由于此时没有默认处理,所以目前访问/Struts2_0100_Introduction/的时候会出错
而action标签的name与子路径是对应的
3、配置常量devMode
由于tomcat需要重启才能使一些配置的变化生效(比如action的name)
但是每次更改配置就重启服务器是不好的
所以在struts.xml中的常量devMode配置
<constant name="struts.devMode" value="true" />
devMode改为true后表示为“开发模式”
有改动即可以有所反馈(不需要重新启动重新部署)
4、想在查看源码
直接查看jar中的.class文件是看不到源码的,因为是编译过的
比如想查看在web.xml中配置的StrutsPrepareAndExecuteFilter类
点击Attach Source
指定到/struts-2.1.6/src/core/src/main/java目录下
这样我们就能看到struts的源码了
还有javadoc location
在struts2-core-2.3.16.jar包上点右键,选择Propertities,选择Javadoc Location
指定到\struts-2.3.16\docs\struts2-core\apidocs文件夹下
(有些all的struts2下载包可能不包含,单独下载docs压缩包即可)
这样在用到的类名上点F1键就可以看到Javadocs了
5、在struts.xml中输入<应该默认没有提示,因为不知道提示什么(语法,关键字等等)
红框内是定义当前xml文档语法的位置
在Window —— Preference —— 搜索Catalog
添加一项,Key type选择为URI,Key设为指定文档位置的url(xml文档中指定的那个)
然后去struts目录下,lib目录下,找到struts2的core文件struts2-core-2.3.16.jar,并解压
找到解压中的struts-2.0.dtd文件,把文件位置放到Location即可
这样就有提示了
现在说明一下struts的运行机制
用户(客户端)输入访问路径http://localhost:8080/Struts2_0100_Introduction/hello
请求通过HTTP发送到tomcat,发现请求的是Struts2_0100_Introduction这个web application,并交给对应的项目去处理
然后去读取项目的web.xml
读取web.xml中配置了一个能够过滤所有的URL地址(/*)
所以这个请求会被对应的StrutsPrepareAndExecuteFilter所处理
首先看namespace,是与访问的路径一一对应的,会查到struts.xml
之前配置的是/的namespace,然后从中找到是否有一个name为hello的action
如果找到了的话,就去访问这个action中的内容,所以会直接跳到Hello.jsp的页面
示意图
为什么要用struts2?
设计模式的特点:简单的东西复杂化(这个地方哈哈哈……)
最大的好处:扩展性,灵活
可以把请求和结果(视图)分离,而不是直接写死
有更改的时候会更加灵活,直接在配置文件中修改即可