jre与jdk:
jre不包含调试
jdk包含调试
Struts:
Struts1 :看可以不学,
Struts2 : 学
二者无任何联系。
Struts1和Struts2的区别:
Struts1的action和具体的Struts的环境绑定,离不开Servlet环境
Struts2代替掉servlet,只需一个java类即可。
Struts1里Action对象只有一个,任何人访问都只有一个,就需要做很好的线程同步的控制,Struts2每次访问一个Action时都会New一个对象出来,永远不会有线程同步的问题。
Sturts2环境搭建:
Struts.xml放在src根目录下
Struts2学习目录:
实验软件下载
1.下载struts2.1.6 http://struts.apache.org/download.cgi#struts217 (选择下载full distribution)
2.下载myeclipse,http://www.myeclipseide.com
3.下载tomcat,http://tomcat.apache.org
4.下载xwork,http://www.opensymphony.com/xwork (要注意的是下载与struts2.1.6的对应版本,即2.1.2)
安装与设置
1. 解压struts2.1.6,假设解压后位于d:\struts2目录
2. 安装MyEclipse,任何版本都可以
3. 假设你已经安装好jdk和tomcat了,如d:\tomcat
Hello World项目
一、搭框架
1.新建项目
1)打开myeclipse
2)File-->New project-->Myeclipse-->Java Enterprise Projects-->Web Project
3)项目名称:Struts2_0100_Introduction
4)选择JavaEE5.0以上,这样可以引入JSTL等。
注意:最好选Java EE5.0以上,这样可以引入JSTL
2.设定Server部署Tomcat
1)Window-->Preferences-->Myeclipse-->Servers-->Tomcat-->Tomcat7.0
2)选择Tomcat home directory
3)选择snable
4)finish
3.设定JDK环境
1)Window-->Preferences-->Java-->Installed JREs打开后如下图
红线是Myeclipse自带的JDK。如果不放心的话,可以添加自己下载的JDK
2)或者如果没有对应的JDK(不是JRE)的话:Add-->Standard VM-->next
3)选择自己安装的JDK对应的Directory
4)点击finsh完成后,选中自己添加的JDK即将刚刚设定的JDK设为默认。如下图
二、建立第一个Struts2的程序(下载Struts2或者直接从myeclipse导入)
1.方法一:
1)找到自己下载的Struts2 3.16.1jar包解压后,在Struts2.3.16.1目录下对应的apps目录
2)解压struts2-blank.war(直接用解压软件解压)
3)Copy对应的struts2-blank-->WEB -INF-->lib的jar文件到WebRoot-->WEB-INF-->lib,需要除junit和Spring-test之外的所有文件,其中commoms-io的jar包会在文件上传和下载时需要,其他为必须。
4)Copy对应的struts.xml到src目录,在package explorer视图进行操作
5)注释掉struts.xml的多余内容,(是注释不是删掉,以便以后自己写的时候做参考)(注释Struts标签内的信息)
<?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 -->
</struts>
6)建立Hello.jsp文件
7)*修改jsp文件的默认编码属性Window-->Prederences-->web-->jspfiles-->设为Chinese,National Standard
8)在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>
9)修改对应的web.xml,建立struts2的filter(参考struts自带的项目)可以先将之前解压的struts2-blank-2.1.6.war里的WEB-INF-->web.xml拷贝过来进行参考。
<?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>
2.方法二:(对于Myeclipse)
1)右键项目名称-->Myeclipse-->Add Struts2 Capabilities
这样可以自动导入Struts的jar包、修改Web.xml、添加Struts.xml。
三、运行项目
1.可以首先部署到tomcat上运行项目
2也可以项目右键debug as-->myeclipse server application,选择刚刚建立好的server
注意:输入访问路径前一般先输入http://127.0.0.1:8080回车,测试tomcat是否正常。
输入http://127.0.0.1:8080/Struts2_0100_Introduction直接回车会报错。因为在struts.xml中namespace="/"
namespace和访问的路径一一对应,所以/与路径一一对应
http://127.0.0.1:8080/Struts2_0100_Introduction/hello.action 或者 http://127.0.0.1:8080/Struts2_0100_Introduction/hello回车成功
Struts2的运行机
a)用户输入URL地址:http://localhost:8080/Struts2_0100_Introduction/hello URL地址的请求通过HTTP协议发送给Tomcat,
b)Tomcat收到请求后,知道请求的是名为Struts2_0100_Introduction的web application,Tomcat将名为Struts2_0100_Introduction的web application交给对应的程序去处理,
c)读这个web application对应的web.xml文件,于是发现了一个配置:
<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>
d)filter会过滤所有的URL地址,当输入hello时,改地址就会被org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter接收到,接受到后对地址进行处理:首先看namespace,(namespace与访问的路径是一一对应的),从Struts.xml查到一个namespace叫"/",然后地址“/”后是Hello,就会差有没有一个action叫hello.若有就会找里面对应的result是谁,找到Hello.jsp,反馈给大家。
设计模式的好处:可扩展性。
Struts2的好处把请求和最后的结果(视图)分开,而不是写死。分开的好处是可以随时更换成别的视图,更灵活。
设计模式和Struts随操作方面比普通方式更复杂,但增强了灵活性。