`
yunchow
  • 浏览: 324430 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

Servlet与Struts1.2简单总结

    博客分类:
  • J2EE
阅读更多
servlet & struts 总复习
------------------------
1. Servlet 基础概念

HttpServlet extends Servlet
生命周期(init(), destroy(), service())
init(Config)->获得initParam
HttpServlet -> service()(获得当前提交的方式,分别调用doGet或者是doPost方法)
doGet/doPost(HttpServletRequest, HttpServletResponse)

1.1 现在没有其他的JSP内置对象

如何获得这些内置对象?
Session,Application,out->JspWriter
request.getSession()/request.getSession(boolean)
session.getServletContext()->application
response.getWriter()->PrintWriter

1.2 编码的问题

request的编码
如果没有在conf/server.xml做配置的话
在doGet,doPost方法中需要做不同的处理
否则, 直接在doPost做或者在filter里做
response 编码
response.setContentType("text/html; charset=GBK");
JS 的编码
out.println("<script>出错了("error");</script>");
---> 显示的都是乱码
解决方式一:中文部分特别做转码后再放进去
new String("出错了".getBytes("GBK"), "ISO8859-1");
解决方式二:
而是把信息放在request.setAttribute中

1.3 Servlet 做什么

出生的时候比JSP早, 古代的时候是拿Servlet来输出页面的
servlet 承担一个控制器的职责
纯JSP方式(不分层,所有代码都在页面上,包括业务逻辑, 包括访问数据库)类似ASP方式.
JSP + JavaBean 方式(JavaBean 可以是狭义上的, 属性和getter/setter方法
--> entity里的实体, 在广义上,一般的后台Java类)
<jsp:useBean> <jsp:getProperty> <jsp:setProperty>和后台的bean打交道.
这样的方式又叫model I
jsp+servlet+javabean -> model 2 -> MVC(Model-View-Controller)
DAO/Service -> 承担Model(访问数据库,执行业务逻辑)
entity -> 承担Model(把数据库的E-R变成OO)
Jsp -> 承担View职责, 只做把Controller转来的内容显示, 接收用户的输入,再提交.
配合上适当的标签, 就可以消灭小的脚本<% %>
Servlet -> 承担Controller职责,把页面的提交获取,调用M层的方法,最后把调用返回结果放在对应的页面内置对象中, 最后完成页面的转发或重定向.
具体来说, 一般一个Servlet中包括了如下步骤:
* 继承 HttpServlet
a, request.setCharEncoding("GBK");
b, 从request中获得提交内容: request.getParameter();->获得单个属性
request.getParameterValues();->获得数组
request.getParameterMap();->获得提交内容的Map封装,可以用BeanUtils.populate()填充.
在Servlet的提交里不会存在自定义对象, 集合对象(Struts才有的)
c, 对所有获得的这些内容要做转换和验证.
d, 根据需要封装entity中的实体对象
e, 实例化service的对象, 调用对应的业务方法
f, 返回结果放到request或者session或者是application上.
g, 根据不同的返回做不同的跳转或重定向.
request.getRequestDispatcher("xx.jsp").forward();

1.4 Servlet 如何配置

配置在web.xml中
<servlet>
  <servlet-name>action</servlet-name>
  <servlet-class>xxx.xxx.xx.XXServlet</servlet-class>
</servlet>
<servlet-mapping>
  <servlet-name>action</servlet-name>
  <url-pattern>*.htm</url-pattern>
/aa/*.do -> error
*abc.jsp -> error
/*  -> Yes
*.do -> Yes
ACB - > Yes
</servlet-mapping>
多个servlet-mapping可以对应一个servlet配置段, 反之是不行的.
顺序无关
在<servlet>中可以配置一些其它的属性<init-param>
<param-name><param-value>, 在这里配置的属性将在init的时候被放在
config对象中, 我们可以通过getInitParameter()获得.

1.5 Servlet使用的注意事项

a, servlet是只被实例化一次的, 所以考虑到线程安全问题, 尽量在Servlet中写全局变量.
b, 所有的entity中的对象需要实现序列化接口.
c, 在servlet中, 如果说在response.sendRedirect()后还有代码,一定在sendRedirect后加一句return;

2. Filter

2.1 filter是实现Filter接口.
init(), destroy().
2.2 doFilter(request, response, chain)
2.3 是在过滤器chain上的, 顺序是由在web.xml里出现的顺序决定的.
2.4 request 的时候是写在前面的先被过滤到, response 是反过来接受到request时候的过滤.
chain.doFilter -> 向下一个过滤器提交
2.5 chain.doFilter(request, response), 如果写的url-pattern是*,Jsp也要经过Filter
2.6 如何配置,
<filter><filter-name><filter-class>
<filter-mapping><url-pattern>
* 有顺序要求, 先配先执行

2.7 如何写
2.7.1 转换成HttpServletRequest和HttpServletResponse

2.8 应用范围
转码, 验证, 权限, 防止盗链 -> 基本Filter可实现
替换, 压缩 -> HttpServletResponseWrapper: 装饰模式
* 首先在当前Filter中把原来的Response包装成自写的ResponseWrapper类
在doFilter()方法后
首先获得当前的包装对象, 对这个对象转成String,char[], byte[]
对转完的内容进行处理
处理完了以后,把处理结果通过真正的response给out出去.
在out.println()之前, 要修改真正的response对象的contentLength

3. Listener

3.1 和过滤器一样也是实现接口的.
3.2 request, Session, ServletContext
HttpSessionListener->监听创建和销毁的
HttpSessionAttributeListener -> 监听属性的增加删除和修改的
对于基本的监听器, 只需要在web.xml中配置一个<listener><listener-class>即可.

3.3 HttpSessionListener和HttpSessionBindingListener区别
HttpSessionListener: 整个应用就生成一个实例负责监听所有的session创建和销毁.
如果要做特别的处理就不好做了.
HttpSessionBindingListener:
valueBound()
valueUnBound()
可以每个不同的客户使用不同的监听器实例.
不需要在web.xml中配置.
session.setAttribute("aaaxx", new HttpSessionBindingListener())将触发valueBound方法
session.removeAttribute("aaaxx")或者session就销毁了那么就触发valueUnBound()方法.
为了标识不同的客户的不同监听器实例, 我们常常在自已写的BindingListener定义UserName, UserId
灵活但消耗资源.
3.4 所有的Listener所实现的方法里的参数都是event
在自已写Listeners的方法的时候,都要从event中来进一步获得内置对象
3.5 Listeners可以做什么?
初始化-> 把编码表的信息放在session里.
在application 上做一个监听器, 同时启动一个定时器, 这种应用是很常用的, 可以负责监控系统状态产生报警信息, 在线列表.

============================================================
------------------------------------------------------------

4. Struts整理流程

4.1 jsp -> ActionServlet -> RequsetProcessor(我们可以自己扩展的)
ActionServlet init()(读入配置文件的内容, 形成一个ModuleConfig, freeze())
doGet/doPost() -> process() -> requestProcessor.process()

4.2 RequestProcessor.process()方法
a, 获得ActionMapping
把页面上<form action="/x.do"> 和
struts-config.xml中的<action path="x" >对应.
b, 判断ActionMapping中的name, 有无对应的actionForm
c, 如果有name, 就进行填充
填充之前首先做二次接头,把<action name="abc">
和<form-bean name="abc">相对应.
如果对应上了,就根据<form-bean type="xx">
来实例化ActionForm对象,然后再填充,调用populate()方法填充的.
在填充之前, 如果有initial或者是reset方法,先做初始化.
d, ActionMapping中的validate是不是true, 如果是的话就验证(validate方法, 验证框架)

2.5 如果ActionErrors对象不为空(不是null, 而是里面有ActionError对象),返回到
input页面, 为空就继续

2.6 建立Action实例

2.7 调用Action有execute方法或者是根据parameter来决定调用分发Action中的具体方法

2.8 根据返回的ActionForward对象, 进行转发或者是重定向
ActionForward里有一个redirect属性决定是转发还是重定向
<forward name= path= redirect="true|false" >

3, Action 中
execute:
ActionMapping, ActionForm, HttpServletRequest, HttpSErvletResponse
返回的是个ActionForward
execute 中的执行流程
a, 避免直接在这个方法中写业务逻辑
把from强制转换成我们需要的类型.
b, 从ActionForm中取值
c, 验证(是验证业务逻辑)
d, 把值封装成VO对象
e, 调用对应的M层方法
f, 返回结果

导航文件:
1, 各个部分的元素是有顺序的.
2, data-sources
forbeans(当中有N个formbean)
nam 名字 type 所在类
globle-forward
name path 路径
action-mappings
<action name 对应form-bean 中的name
path 页面请求
attribute 对应范围的属性名
scope request或者session
type 对应的Action类的带包名的类名
parameter 丰富,主要用于分发,不同Action有不同的含义
input 错误跳转页面
validate true|false
roles 声明式定义权限"user, admin, sys"
forward(局部forward)
controller
processorClass 对应的扩展的RequestProcessor类
message-resources
  对应的资源文件的名字, 刻不带后缀, 不带国家地区代码
Plug-in 放验证框架

web.xml
ActionServlet
导航文件所在的位置
Minit-param><param-name>config
这里的<param-value>可以写多个用逗号隔开的配置文件.

5. ActionForm

6. Action
ForwardAction
<path="/" forward="" /> = <jsp:forward>
includeAction = <jsp:include>
SwitchAction->模块转换
分发Action
共同点:
1, 不能写execute()方法
2, 这里面都有一系列方法,方法签名都和execute相同.
3, 所有的分发Action都要利用到parameter参数
DispatchAction
带参数或隐藏表单域

8 自定义验证器
随便写个类,里面的方法是以validateXX形式开头
public static boolean validateXX(
	Object bean,
	Field field,
	ActionMessages messages,
	HttpServletRequest request,
	ValidatorAction va,
	Validator validator) {

  Field.getVarByValue("xx");
  Field.getProperty(); -> str
  BeanUtils.getProperty(bean, str);
  if(messages == null) messages = new ActionMessages();
  Resources.getActionMessage()->获得通过validation配置出来的错误消息.
}
修改validator-rules.xml在其中增加自已的验证类

  对于DispatchAction来说, 要想使用验证规则, 就必须要扩展原有的FieldCheck类
在所有的验证规则前都首先判断是否属于当前要验证的方法.

9 Struts标签
html, bean, logic, nested, tiles
html: 生成表单元素的, 显示错误消息的.
<html:form action="/xx">
<html:select property="xx">
  <html:options collection="xx"
property="xx"
labelProperty="xx" />
</html:select>
<html:errors><html:messages>

<form action="">
<html:text>
</form> --> 这样写要报错, 所以要使用HTML, 就要使用<html:form>
<html:submit>

bean -> 定义, 输出
<bean:write name="" property="" format="" > 可以是bean中的属性也可以是map中的key
里面不能有default
<bean:define id="" value="" />
<bean:define id="" name="" />
<bean:define id="" name="" property="" scope="" toScope="" />
<bean:message key="" bundle="" />
<bean:size id="" name="" />

logic -> 比较,判断, 迭代
<logic:equal>
<logic:empty> <logic:notEmpty>
<logic:present> <logic:notPresent> 是否存在
<logic:match location="start|end"> 字符串匹配
<logic:iterate name="" id="item" indexedId="index"(从1开始) offset="1" length="2">
<c:forEach items="${list}" var="item" varStatus="" begin="1" end="3">
<logic:iterate>可以遍历各类集合, 但是不能做空循环.
可以比较好的与Struts结合
<html:text property="num" indexed="true" />

nested -> 访问嵌套属性
tiles -> 做页面布局
Template Method
layout.jsp -> 模板页面
通过xml来决定以何种方式来填充模板来的不定的内容
要使用XML,就要把<tiles>框架通过<Plug-in>加入struts-config.xml文件.

分享到:
评论

相关推荐

    struts1.2驱动包

    Struts1.2驱动包是Java Web开发中一个重要的组件,它是Apache Struts框架的特定版本,用于支持基于Model-View-Controller (MVC)设计模式的应用程序开发。Struts1.2因其稳定性和广泛的功能集而在过去备受推崇,尤其在...

    struts1.2资源整合

    在配置Struts1.2时,你需要在web.xml中设置Struts的前端控制器Filter(通常为`org.apache.struts.action.ActionServlet`),并配置相应的Action Mapping。同时,还需要在struts-config.xml文件中定义Action、Form ...

    struts1.2 + spring2.5 + hibernate3.2框架demo

    总结来说,这个demo项目提供了一个学习和实践Struts1.2、Spring2.5和Hibernate3.2集成的平台,涵盖了MVC设计模式、依赖注入、面向切面编程和对象关系映射等多个关键概念。通过深入研究和修改这个项目,开发者能够...

    struts1.2下载包

    总结来说,Struts1.2是一个强大的Java Web框架,通过其MVC架构,能够帮助开发者构建结构清晰、易于维护的Web应用。下载的"struts1.2"压缩包提供了所有必要的组件和示例,便于开发和学习。在实际应用中,需要正确配置...

    struts、struts1.2 学习教程

    1. **ActionServlet**:Struts1.2使用单一的ActionServlet处理所有请求,而Struts2引入了Front Controller模式,所有的请求都由StrutsPrepareAndExecuteFilter处理。 2. **表达式语言**:Struts2使用OGNL(Object-...

    struts1.2 jar包

    在`struts1.2-jars`这个压缩包中,包含了Struts1.2运行所需的各个jar文件,比如`struts-core.jar`包含了框架的核心组件,`struts-tiles.jar`包含Tiles视图管理组件,`struts-taglib.jar`提供了与JSP相关的标签库,...

    struts1.2 from表单提交包含list的对象

    在Struts1.2中,这个请求会被Struts的ActionServlet捕获,ActionServlet会根据配置的Struts配置文件(struts-config.xml)来决定调用哪个Action类来处理请求。 对于包含列表的表单,用户可能需要在页面上输入多条...

    struts 1.2驱动包

    5. **国际化与本地化**:Struts 1.2支持多语言环境,通过资源文件可以轻松实现应用的国际化。 6. **异常处理**:提供了全局的异常处理机制,可以统一处理应用程序中的异常,提高代码的可维护性。 7. **配置管理**...

    Struts 1.2 API详细讲解.rar

    Struts 1.2 是一个基于MVC(Model-View-Controller)设计模式的Java Web应用程序框架,由Apache软件基金会开发。它极大地简化了构建动态、数据驱动的Web应用的过程,提高了开发效率和代码的可维护性。这个压缩包文件...

    struts1.2源码研究

    **Struts 1.2配置文件解析与管理** Struts的配置文件主要包括`struts-config.xml`,它定义了Action、Forward、Form Bean等组件。在初始化过程中,`configDigester`使用SAX解析技术解析这些配置文件,生成...

    struts1.2源代码及文档

    Struts1.2是Apache软件基金会的一个开源项目,它是一个基于MVC(Model-View-Controller)设计模式的Java Web应用程序框架。这个框架的主要目的是为了简化Web应用开发,提高开发效率,提供一套标准的方式来处理HTTP...

    struts1.2.jar包

    6. **国际化与本地化**:Struts1.2提供对多语言环境的支持,通过资源文件实现动态切换,便于实现国际化和本地化功能。 7. **异常处理**:Struts1.2提供了统一的异常处理机制,可以在全局范围内捕获和处理应用程序中...

    struts1.2随意写的小项目

    在这个名为"ShoppingMall"的项目中,我们可以推测这是一个简单的商城购物系统,利用Struts1.2的核心特性实现了用户浏览商品、添加到购物车以及进行结算等功能。 首先,让我们深入了解Struts1.2框架。它是Apache软件...

    struts1.2+spring2.0 登录 例子

    **Struts1.2与Spring2.0的集成** 集成Struts1.2和Spring2.0的主要目的是利用Spring的DI特性来管理Struts的Action。这样可以避免硬编码依赖,提高代码的可测试性和可维护性。 1. **配置Spring**: 在Spring的配置文件...

    struts1.2+hibernate开发的小项目

    1. **Struts1.2框架**:了解Struts1.2的核心组件,如Action、Form Bean、ActionServlet、ActionMapping和ActionForward。理解控制器如何转发请求到相应的业务逻辑,并最终将结果展示给视图。 2. **MVC设计模式**:...

    struts1.2-jars.rar 所有jar包

    Struts1.2 是一个基于MVC(Model-View-Controller)设计模式的Java Web应用程序框架,由Apache软件基金会开发并维护。这个框架的主要目的是为了简化Web应用开发过程,提高可维护性和可扩展性。在"struts1.2-jars.rar...

    struts1.2-jars.zip

    Struts1.2-jars.zip 是一个专门为Java开发者准备的压缩包,包含了Struts1.2框架所需的多个jar文件。Struts是一个非常经典的MVC(Model-View-Controller)架构框架,它在Java Web开发中占有重要地位,尤其是在早期的...

    Struts1.2

    Struts1.2是Apache软件基金会的一个开源项目,它是一个基于MVC(Model-View-Controller)设计模式的Java Web应用程序框架。这个框架的主要目的是为了简化开发过程,提供一种结构化的方式来组织Java Servlets和JSP...

Global site tag (gtag.js) - Google Analytics