前言:上次我和大家分享了SSH框架的Maven。 今天我和大家分享SSH框架的Struts。 其中Struts与自古以来与大家共享的自定义MVC非常相似,但也有不同之处。 接下来我会和大家分享自己学到的知识一、明确的目标。 1、Struts结构
2、struts的动态调用方法
3、struts传播的三种方式
4、struts与tomcat的整合(合作) ) )。
二、struts配置1、步骤:(与自定义mvc比较) ) ) ) ) ) ) ) ) ) )。
1、建立依赖关系---导入jar包(mvc手动导入jar包,但struts只需在Maven的pom.xml文件中直接写入相关代码) ) ) )。
创建新的struts项目后,与Maven一样,首先将web版本更改为3.1
然后将java版本从2.3更改为3.1,并将Dymanic版本从1.5更改为1.8。 (在此稍加修改,然后完成版本更改后,填写webapp时写绝对路径的是src/main/webapp,而不是直接写webapp。 )
然后更改jdk的版本。 上次和大家分享的是手动改造。 今天和大家分享代码改造,把以下代码复制到maven的pom.xml文件中就可以了。 当然,在复制之前,请先写plugins/plugins,然后在其间写代码。
pluginsplugingroupidorg.Apache.maven.plugins/groupidartifactidmaven-compiler-plugin/artifactidversion3.7/0
最后,是struts和Tomcat的集成。 必须将以下代码写在dependencies/dependencies中,写完之后耐心等待。 (此时,正在下载所需的jar包。 )
dpendenciesdependencygroupidjavax.servlet/groupidartifactidjavax.servlet-API/artifactidversion4.0.1/version scret ependencydependencygroupidorg.Apache.struts/groupidartifactidstruts2- core/artifactidversion2.5. 13 /
web.xml: (其中,对于filter-class/filter-class中的类名,请单击ctrl shfit t以搜索StrutsPrepareAndExecuteFilter,然后单击该类的完整路径名
filter filter-name struts/filter-name filter-class org.Apache.struts2. dispatcher.filter.strutsprepareandexecutefefecter 过滤器- name URL-pattern *.action/URL-pattern/filter-mapping
3、开发:struts和自定义mvc一样的都要写好子控制器继承Actionsupport 三、struts的动态调用方法与自定义mvc的方法相比,struts的动态调用方法更加灵活;struts的配置文件有三个(三个配置文件相同于自定义mvc的配置文件,三个配置文件相辅相成),自定义mvc的配置文件只有一个(web.xml)
1、配置文件(最主要的配置文件struts-sy.xml):
struts是调用的动态方法,理所当然写法与自定义mvc的写法不一样,如下图所示,在action中的name属性中,写法是/demo1_*,但是在自定义mvc中是直接写/demo1,class表示要进入的类。
第二大不同:
在struts-sy.xml中出现result节点,表示最后进入的结果界面。
第三大不同:
图中还出现了method属性,{1}表示取访问路径的第一个方法,改1是对应 /demo1_*后面的*
注意:有一个*,自然而然的想到了有两个*的写法/demo1_*_*,其中第一个*同样表示方法,第二个方法就表示要跳转的结果界面了
有两个*的写法:
2、子控制器类:对应的方法
public String add() throws Exception {System.out.println("add方法");return "bookEdit";}public String del() throws Exception {System.out.println("del方法");return "bookEdit";}public String edit() throws Exception {System.out.println("edit方法");return "bookEdit";}3、bookEdit界面:
4、实现类Demo1.jsp:
<h3>struts方法调用 </h3> <a rel="external nofollow" href="${pageContext.request.contextPath }/sy/demo1_add.action">新增</a><br><a rel="external nofollow" href="${pageContext.request.contextPath }/sy/demo1_del.action">删除</a><br><a rel="external nofollow" href="${pageContext.request.contextPath }/sy/demo1_edit.action">修改</a><br>5.运行结果:
运行成功:
四、struts的传参的三种方式:
三种方式:
1、Modeldriven传参
2、set方式传参:
3、根据对象属性传参:
1、Modeldriven传参:在子控制类写好实现modeldriven类的代码:
实体类:
package com.zking.one.entity;public class User {private String uid;private String uname;public String getUid() {return uid;}public void setUid(String uid) {this.uid = uid;}public String getUname() {return uname;}public void setUname(String uname) {this.uname = uname;}public User() {// TODO Auto-generated constructor stub}@Overridepublic String toString() {return "User [uid=" + uid + ", uname=" + uname + "]";}public User(String uid, String uname) {super();this.uid = uid;this.uname = uname;}}demo1.jsp:
<h3>struts传参方式 </h3> <a rel="external nofollow" href="${pageContext.request.contextPath }/sy/demo1_list.action?uid=001&&uname=zs">Modeldriven传参</a><br><a rel="external nofollow" rel="external nofollow" href="${pageContext.request.contextPath }/sy/demo1_list.action?sex=nv">通过set方法传参</a><br><a rel="external nofollow" rel="external nofollow" href="${pageContext.request.contextPath }/sy/demo1_list.action?user2.uid=002&&user2.uname=ls">通过对象属性</a><br>Demo1Action:
public String list() throws Exception {System.out.println("list方法");System.out.println(user1);运行效果:
2、set方式传参:User中没有sex这个属性,那么就独自在action中写一个sex,生成get和set方法
Demo1Action:
demo1:
<a rel="external nofollow" rel="external nofollow" href="${pageContext.request.contextPath }/sy/demo1_list.action?sex=nv">通过set方法传参</a><br>运行效果:
3、根据对象属性传参:同时在Demo1Action中定义一个user叫做user2并且写好user1和user2的get和set方法,但是并没有new,同时也能够运行出效果:
Demo1Action:
demo1:
<a rel="external nofollow" rel="external nofollow" href="${pageContext.request.contextPath }/sy/demo1_list.action?user2.uid=002&&user2.uname=ls">通过对象属性</a><br>运行结果:
五:struts与tomcat的集成(合作)今天写struts项目的目的就是要进行测试:1、两种方式:
1、直接定义ServletActionContext.getRequest()进行集成
2、在Demo1Action类中实现ServletRequestAware ,ServletResponseAware两个接口进行集成。
2、直接定义ServletActionContext.getRequest()进行集成:
Demo1Action:
HttpServletRequest request = ServletActionContext.getRequest();request.setAttribute("age", 20);bookEdit.jsp:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><!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=UTF-8"><title>Insert title here</title></head><body>成功界面。。。。${ age }运行结果:
3、在Demo1Action类中实现ServletRequestAware ,ServletResponseAware两个接口进行集成:
在Demo1Action:
public String list() throws Exception {System.out.println("list方法");System.out.println(user1);System.out.println(sex);System.out.println(user2);HttpServletRequest request = ServletActionContext.getRequest();request.setAttribute("age", 20);req.setAttribute("name", "sjx");return "bookEdit";}并且重写setServletRequest和setServletResponse方法:
运行结果:
运行成功:
总结:struts框架和自定义MVC相比起来,struts框架用起来更加方便,在今天分享的 知识中,第二点struts的动态调用方法更加的新颖,其中struts框架的传参方式比自定义MVC更加丰富,自此可见struts框架的强大之处。今天的知识就分享到这里了。希望对大家有帮助,有疏忽之处还请大神多加指点!