Struts2 基础知识学习

JAVA web开发历史

早期的Java Web应用中,Jsp文件同时负责生产网页,控制到下一个网页的流程,以及负责业务逻辑,

这给web开发带来一系列问题:

HTML和Java耦合在一起,JSP文件的编写者必须是网页设计者,又是Java开发者。

缺点:

可读性差

调试困难

不利于维护,更改业务逻辑或者数据可能设计多个相关网页

现在通常分为四层:

表述层(JSP,HTML页面)

业务逻辑层(JavaBean)

持久化层(spring实现持久化)

数据库层

分层的优点:

可伸缩性

可维护性

可扩展性

可重用性

可管理性

分层的也体现了分而治之的思想。

web.xml中welcome 标签指定访问主页

<welcome-file-list>

<welcome-file>index.jsp</welcome-file>

</welcome-file-list>

JSP页面的pageEncoding和contentType两种属性的区别:

pageEncoding是jsp文件本身的编码

contentType的charset是指服务器发送给客户端时的内容编码

Struts2核心包

common-logging-1.0.4.jar Struts2框架的日志包

freemarker-2.3.8.jar Struts2的UI标签模板

ognl-2.6.11.jar 对象图导航语言包

strut2-core-2.0.11.jar Struts框架的核心类库

xwork-2.0.4.jar xwork类库,Struts2基于此构建

Struts 2的最终目的是将页面跳转以及模块处理进行解耦,可配置化。

STRUTS2的常见问题:

1. Tomcat 设置

Window->References->Tomcat

2.默认JDK设置,选中的JRE会被添加到新创建的JAVA 项目build path中

Window->References->Java->Installed JREs

3.项目名称太长

右击项目,copy qulified name

4.Struts 的常用配置步骤

1.web.xml配置 struts的filter 类

2.struts.xml 复制到 src 目录中。进行配置ACTION的页面跳转

3.lib 包复制到 WEB-INF\lib下

5. 配置在struts.xml中,当修改struts.xml文件后,不用重启Tomcat可以立马生效

<constant name="struts.devMode" value="true" />

6.如何在Eclipse中快捷的查看lib包的源码?

在Referenced Libraries中,右击lib包,选择Java Source Attachement,

C:/Users/anker/Desktop/Java学习/Struts2/struts-2.1.6-all/struts-2.1.6/src/core/src/main/java

7.设置 lib 包的 文档

在Referenced Libraries中,右击lib包,选择Java Location

file:/C:/Users/anker/Desktop/Java学习/Struts2/struts-2.1.6-all/struts-2.1.6/docs/struts2-core/apidocs/

8.问题:

Copy 项目后,当进行Tomcat部署时,报错此项目已存在。

解答:

需要修改上下文根,右击项目,选择Properties->MyEclipse->Web,修改 Web Context-root

9.Struts2配置简介

<package name="default" namespace="/path" extends="struts-default">

<action name="path" class="com.bjsxt.struts2.front.action.StudentAction">

<result name="SUCCESS">

/indexAction.jsp

</result>

</action>

</package>

package 主要用于解决action重名的问题

Namespace: 页面访问路径,等同于namespace=""或者namespace="/",意味着action标签,匹配所有其他namespace中未能匹配上的访问路径。

extends: 继承包

action:访问的模块处理,以后可跟.Action

class: 模块处理的实际类,若省略则访问Struts中的ActionSupport类,里面存在一个execute方法,返回success字符串。

result: 接受模块处理的返回处理

name: 根据返回的字符串访问jsp页面,若不填写,默认为"success"字符串。

global result配置:设置在当前namespace下,所有action公用的结果集

<global-results>

<result name="mainpage">login.jsp</result>

<global-results>

默认Action,当在当前包含的namespace中找不到匹配的action时,访问的action

<default-action-ref name="index"> </default-action-ref>

<action name="index">

<result>/default.jsp</result>

</action>

模块包含 <include file="login.xml"/>,login.xml文件内容与struts.xml结构一致

10.Action类的实现三种方法

1.普通类,实现一个返回字符串的方法。

2.实现Action接口

3.从ActionSupport集成,好处在于可以直接使用Struts2封装好的方法。(推荐)

Action的类在访问时,对象即被Strut2框架自动创建出来。当用户每次访问时,产生的是不同的Action对象。

而在Struts1时,此对象只有一个。多个线程访问存在安全隐患。

11.Action类的方法调用

1.不指定方法,则默认访问Action类的Execute方法。

2.通过XX!method.action 进行调用,XX是Action模块,method是Action类中的方法

3.在Action 标签中,添加method= "add" 字符串,即访问此Action模块时,访问的是add方法。

12.Action类如何来接受参数?

1.通过URL进行传递。传递的参数在Action类当中需要定义对应的成员变量。

例如

http://localhost:8080/Struts2_0700_ActionAttrParamInput/path/path!GetMessage.action?name=Anker&age=18

这里访问的是path 对应的Action类下的GetMessage方法,并将Anker,18传递给Action类的成员变量name以及age

2.通过域模型接受参数(推荐)

即建立对应的实体类,此实体类包含相应的成员变量。并在Action类中实现此对象的get,set方法。

调用方式

http://localhost:8080/Struts2_0700_ActionAttrParamInput/path/path!GetMessage.action?user.name=Anker&user.age=18

备注:若是调用Action的过程中,没有对实体类的属性进行赋值,则不会创建实体对象。

3.ModelDriven 模型驱动

实现ModelDriven接口,通过getModel返回实体类的对象,对对象成员变量进行赋值。

13.如何在Struts.xml使用通配符

使用通配符,可以大大简化我们的配置。不过,一定要遵循"约定优于配置"的原则

在ActionName当中使用*号,后面的class,method或者result标签,可以使用{1}来配置第一个*号对应的字符串,

{2}配置第二个*号对应的字符串,以此类推

<package name="actions" extends="struts-default" namespace="/actions">

<action name="Student*" class="com.bjsxt.struts2.action.StudentAction" method="{1}">

<result>/Student{1}_succes.jsp</result>

</action>

<action name="*_*" class="com.bjsxt.struts2.action.{1}Action">

<result>/{1}_{2}_success.jsp</result>

</action>

</package>

14.问题:如何解决页面的默认编码

解答:

Windows->Preferences-> JSP

Encoding 换位 Chinese , National Standard,这样默认建立出来的编码格式为GB18030。页面既可以写入中文。

15.JSP页面的绝对路径问题

struts2中的路径问题是根据action的路径而不是jsp路径来决定,所以尽量不要使用相对路径

由MyEclipse生成的jsp页面,生成的内容通常包括以下部分:

<%

String path = request.getContextPath();

String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";

%>

path是获取当前项目的上下文根

basePath = http://localhost:端口号/项目上下文根/

在head标签中,加入<base href="<%=basePath%>">,即意味着页面的链接皆采用绝对路径

<head>

<base href="<%=basePath%>">

</head>

16. 在1.6版本,在实现接口时,会自动生成字符串@override。而这字符串在1.5不支持

JDK 1.6设置:

Installed JRE 设置为1.6

项目的Java Compiler Level 也要设置为1.6

Tomcat 6.x下面的JDK也设置为1.6

17.MVC 的概念

MVC 中的

M : Model 实体

C : Action

V: View 视图

由C 进行控制访问,将Model与View分开。

18.如何查看Tomcat的端口号?

%TOMCAT%下的/conf/server.xml文件:

<Connector port="9090" protocol="HTTP/1.1"

connectionTimeout="20000"

redirectPort="8443" URIEncoding="UTF-8"/>

19.Struts2访问 Web元素的方法

(request,session,application)

request < session < application

request: 只在一次请求上(转发不算请求,因为转发是服务器的行为)生效。

session: 当用户访问某个站点时,服务器端会为客户产生一个sessionID,以cookie的方式返回给客户端。一个

用户就好比一个session对象,直到关闭浏览器.

application: 一个服务器就是一个application对象,当服务器停止时候,application被摧毁。

对应的接口

request : javax.servlet.http.HttpServletRequest

session : javax.servlet.http.HttpSession

application : javax.servlet.ServletContext

共有的方法

setAttribute(String name, object o), getAttribute(String name)

在Struts2 框架中,如何获取request,session,application对象

1.利用ActionContext容器去获取,获取的类型为MAP类型

2.实现接口RequestAware,SessionAware,ApplicationAware,Struts框架自动通过set方法注入对象。对象类型为MAP<String,object>(推荐)

3.利用ServletActionContext容器获取,对象类型为HttpServletRequest,HttpSession,ServletContext。

4.实现接口ServletRequestAware接口,Struts框架自动通过set方法注入对象。对象类型为HttpServletRequest,HttpSession,ServletContext。

IOC与DI概念

IOC : Inverse Of Control的简写。控制反转,由框架配置进行控制对象的创建

DI : Dependency Injection,依赖框架将对象注入,而非自动去NEW或者获取

20.利用javaScript 实现一个页面多个按钮提交

<input type="button" value="submit1" onclick="javascript:document.f.action=‘login/login1.action‘;document.f.submit();">

<input type="button" value="submit2" onclick="javascript:document.f.action=‘login/login2.action‘;document.f.submit();">

<input type="button" value="submit3" onclick="javascript:document.f.action=‘login/login3.action‘;document.f.submit();">

<input type="button" value="submit4" onclick="javascript:document.f.action=‘login/login4.action‘;document.f.submit();">

21. 使用addFieldError方法和s:fieldError标签简单处理数据校验

数据校验后,添加错误

this.addFieldError("name", "name is error");

添加Struts标签

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

将Action中添加进去的fielderror 取出来进行显示

<s:fielderror fieldName="name" theme="simple"/>

<s:debug> </s:debug>

Value Stack

值栈:中间存放着Property name 与 Property Value

栈就是个容器,后进先出,先进后出原则。

通过<s:property value="errors.name[0]"/> 对value Stacke中取值。

这里的errors是property name,

name是map类型集合的key,[0]是取集合数组值的第一个值。

22.如何快速打开编辑JSP页面?

右击jsp页面,选择open with,选择MyEclipse JSP Editor

23.ACTION接受中文参数时,中文乱码如何处理?

<constant name="struts.i18n.encoding" value="GBK"/>

struts 2.16存在bug,在struts.xml中设置此语句后,中文仍然存在乱码。在2.17版本后解决了此问题。

24.结果类型 result type

<result type="dispatcher" name="SUCCESS">/indexAction.jsp</result>

dispatcher(默认的,服务器跳转。等同于jsp的forward,只能跳转到jsp页面)

redirect (客户端跳转到jsp,无法共享value stack的内容。需要从action Context 中取值)

chain(跳转到action,跳转的类型为服务器跳转)

redirectAction(客户端跳转到action)

25.服务器跳转与客户端跳转的区别

1.从地址栏显示来说

forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器.浏览器根本不知道服务器发送的内容从哪里来的,

所以它的地址栏还是原来的地址.

redirect是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址.所以地址栏显示的是新的URL.

2.从数据共享来说

forward:转发页面和转发到的页面可以共享request里面的数据.

redirect:不能共享数据.

3.从运用地方来说

forward:一般用于用户登陆的时候,根据角色转发到相应的模块.

redirect:一般用于用户注销登陆时返回主页面和跳转到其它的网站等.

4.从效率来说

forward:高.

redirect:低.。

26.OGNL表达式

访问值栈(value stack)中的action普通属性: <s:property value="username"/>

访问值栈中的对象普通属性(get,set方法): <s:property value="user.age"/>

通过<s:debug></s:debug>可以查看值栈里面的内容

当Action中对象的属性有赋值的时候,Struts才会自动由构造对象。否则不会创建。

时间: 2024-10-16 15:36:36

Struts2 基础知识学习的相关文章

计算机基础知识学习

第一周学习 一.知识方面,总得来说,就是学习计算机基础知识. 1.从计算机的发展,应用,组成,网络等方面了解: 2.对计算机操作系统的学习:常用的操作系统,操作系统的功能.分类: 3.办公软件的学习:Word\Excel\ppt,像Word中编号格式.自动生成目录,Excel中条件格式的应用,图表插入,以及各种基础函数的使用: =SUM(Eoo*$E$3,Foo*$F$3,Goo*$G$3)  表示:用E\F\G列的各数与E3\F3\G3相乘后求和,count(if)\a 计数函数, =COUN

ARM基础知识学习笔记

/*****************数电知识*******************/ PN结(Positive-Negative) 三极管:BJT(双极结型三极管Bipolar Junction Transistor)               FET(场效应管Field Effect Transistor)          (单极结型) 1.MOSFET (金属氧化物半导体Metal Oxide Semiconductor FET)               2.JFET(结型Junct

C++基础知识学习笔记

基本语法 C面向过程思想:程序=(数据结构)+(算法) 数据结构与算法分离,以算法(函数)为主. C++面向对象思想:程序=(数据结构+算法) 数据结构(属性)与算法(操作)绑成一个类,定义一个个对象对象=(数据结构+算法)  ,程序=(对象+对象+对象+--) 面向对象程序设计的程序员有两类:1.面向对象应用程序设计2.类库的设计 头文件:类的声明            ---类的外部接口       (成员函数在类声明中实现时,一般很简短,默认为内联函数)源文件:类的成员函数定义     -

linux基础知识学习-linux架构

硬盘分区: 第一扇区(512bytes): MSR:master boot record (446bytes)主引导分区 partion table:(64bytes)分区表,四个.可以是主分区(primary)或者扩展分区(Extended), 每个表指向磁盘某段区间.最多只有一个扩展分区,扩展分区里面可以扩展多个逻辑分区.其余扇区(柱面(cylinder)):实际存储的地方 linux 中(\etc/fstab):IDE  总线形式不同 (a~d)/dev/hda SATA,SCSI,USB

Bash编程基础知识学习第一节

Bash编程基础知识学习 一.bash的由来 1 .什么是Bash 什么是Shell Bash 是GNU Bourne-Again SHell,是目前大多数Linux发行版采用的Shell. Shell 是*nix提供给用户使用的界面.一个操作系统的底层是独立运行的, 用户界面和底层分开,可以最大限度的保证系统稳定.Shell就是一个特殊的程序,负责接受用户的命令,并把系统的响应返回给用户. Bash Shell 一般不需要自己安装,在安装发行版的同时都会安装好. Shell的存在是和登陆相关的

(转)Linux基础知识学习

Linux基础知识学习 原文:http://blog.csdn.net/ye_wei_yang/article/details/52777499 一.Linux的磁盘分区及目录 Linux的配置是通过修改配置文件来完成. 1.1.Linux磁盘分区 Linux可以将磁盘分为多个分区,每个分区可以被当做一个独立的磁盘使用,磁盘类型:主分区.扩展分区.逻辑分区. 主分区标记为活动,用于操作系统的引导,一块磁盘最多划分4个主分区,主分区存放操作系统的文件或用户数据. 扩展分区:主分区小于4个时才可以划

PHP基础知识学习总结

从今天开始过一遍PHP的基础知识   加油  地址:http://www.runoob.com/php/php-operators.html   该看:PHP运算符 2017年5月23日23:38:30 笔记: PHP基础知识2017年5月23日23:38:411.PHP 是一种创建动态交互性站点的强有力的服务器端脚本语言.2.PHP 是服务器端脚本语言.3.PHP(全称:PHP:Hypertext Preprocessor,即"PHP:超文本预处理器")是一种通用开源脚本语言.PHP

〖前端开发〗HTML/CSS基础知识学习笔记

经过一天的学习,把慕课网的HTML/CSS基础知识学完了,笔记整理: 1. 文件结构: HTML文件的固定结构: <html> <head>...</head> <body>...</body> </html> html是根标签 head定义文档头部,包含: title, script, style, link, meta body是网页主要内容,包含:h1,h2-h6, p, a, img 2. 认识head标签: <head

web前端基础知识学习网站推介

内容:一.基础知识及学习资料1. HTML入门学习:http://www.w3school.com.cn/html/index.aspHTML5 入门学习:http://www.w3school.com.cn/html5/index.asp 2. CSS入门学习:http://www.w3school.com.cn/css/index.aspCSS3入门学习:http://www.w3schools.com/css3/default.asphttp://css3-tutorial.com/ 3.