Head First Servlets and JSP(三)

第十一章 部署Web应用

WAR文件只是Web应用结构的一个快照,实际上就是一个JAR文件;
在Tomcat中,WAR文件的文件名就会成为Web应用的名字;
在Tomcat中部署Web应用时,Tomcat会解开WAR文件,创建上下文目录;
部署静态HTML和JSP时,可以选择是否允许从Web应用外部直接访问;把文件放在WEB-INF下就能避免访问;
每个servlet映射有两个部分——<servlet>元素和<servlet-mapping>元素,/定义一个servlet名和类,<servlet-mapping>定义了映射至一个servlet名的URL模式;
DD中的URL模式不会映射到DD中<servlet-name>元素以外的其他元素;
<servlet-name>元素是servlet映射的键,它们把请求<url-pattern>映射到具体的servlet类;
servlet映射的规则:容器首先会查找完全匹配,再查找目录匹配,再查找扩展名匹配;如果请求与多个目录<url-pattern>匹配,容器会选择最长的匹配;
在DD中配置欢迎文件;无论请求哪个目录,容器会从<welcome-file-list>所列的第一个欢迎文件开始,选择找到的第一个匹配;
在DD中配置错误页面:

//声明一个“普遍”型错误页面
<error-page>
	<exception-type>java.lang.Throwable</exception-type>
	<location>/errorPage.jsp</location>
</error-page>
//根据一个HTTP状态码声明错误页面
<error-page>
	<error-code>404</error-code>
	<location>/notFoundError.jsp</location>
</error-page>

可以调用HttpServeltResponse的sendError()方法生成错误码;
希望在部署时加载servlet而不是等到第一个请求到来才加载,可以在DD中使用<load-on-startup>元素;
在DD中可以配置扩展名和MIME类型之间的映射;
资源的位置放置:
资源放置位置

第十二章 Web应用安全

Impersonator,Upgrader和Eavesdropper;
servlet安全可以划分为4大概念:认证、授权、机密性和数据完整性;
开发商会提供某种方法维护你的公司特定的认证数据,存储在一个关系数据库或LDAP系统中;
授权:

  • 定义角色:部署人员在DD中创建<role-name>元素,使容器将角色映射到用户;
  • 定义资源、方法约束:以声明方式指定资源/方法组合,只能由特定角色的用户访问;
    资源约束<web-resource-collection>元素的<security-constraint>规则:告诉容器那些资源和HTTP方法组合要以某种方式受约束;
    如果两个不同的非空<auth-constraint>元素应用于同一个受限资源,那么两个<auth-constraint>元素中所有角色的并集都允许访问;
    程序式安全,不同于声明式安全,由三个方法与之相关:
    getUserPrincipal(),getRemoteUser(),isUserInRole();
    调用isUserInRole()前,用户要得到认证,否则总会返回false;如果用户可以映射到参数角色,容器返回true;

认证:询问一个用户名和口令,再验证它们是否匹配——4种认证类型;
BASIC认证、DIGEST认证、CLIENT认证、FORM认证;
表单认证要为用户登录创建你自己的定制HTML表单,创建一个定制的HTML错误页面,在DD中使用<login-config>元素把这两个表单关联起来;使用基于表单的认证,要启用SSL或会话跟踪;
HTML登录表单中3项是与容器通信的关键:

  • j_security_check
  • j_username
  • j-password
//DD中
<login-config>
<auth-method>FORM</auth-method>
<form-login-config>
<form-login-page>/loginPage.html</form-login-page>
<form-error-page>/loginError.html</form-error-page>
</form-login-config>
</login-config>
//longinPage.html中
<form method="POST" action="j_security_check">
	<input type="text" name="j_username">
	<input type="password" name="j_password">
	<input type="submit" value="Enter">
</form>
//loginError.html中
<html><body>
Sorry dude,wrong password
</body></html>

保护正在传输的数据——HTTPS;
以声明方式保守地实现数据机密性和完整性——设置transport-gurantee的属性值为CONFIDENTIAL;
为了确保用户的登录数据能安全地传输到服务器,要对每个可能触发登录过程的受限资源设置一个传输保证;

第十三章 过滤器和包装器

过滤器就是java组件,请求发送到servlet之前,可以用过滤器截获和处理请求;在响应发回给客户之前,可用过滤器处理响应;
请求过滤器可以做安全检查,重新格式化请求首部,建立请求审计或日志;
响应过滤器可以压缩响应流;追加或修改响应流;创建一个完全不同的响应;
每个过滤器都必须实现Filter接口中的三个方法:init(),doFilter()和destroy();
FilterChain可以调用一个过滤器或一个servlet(取决是否到达链尾);
可以认为过滤器“可入栈”;
包装器类——创建定制请求或响应对象,只需要派生某个便利请求或响应包装器类;
压缩过滤器设计:

class CompressionResponseWrapper extends HttpServletResponseWrapper {
//覆盖想定制的方法;
}
class MyCompressionFilter implements Filter{
	public void init(FilterConfig cfg){}
	public void doFilter(request,response,chain){
		CompresssionResponseWrapper wrappedResp=new CompressionResponseWrapper(response);//定制包装器类包装响应
		chain.doFilter(request,wrappedResp);
		//这里完成压缩逻辑
		}
		public void destroy(){}
	}
}	

第十四章 企业设计模式:模式和Struts

web应用的性能要求

  • 性能(吞吐量)
  • 模块性
  • 灵活性、可维护性、可扩展性

业务对web的支持:
流程
JNDI和RMI处理远程对象
传输对象
Struts框架的思想:
Struts关键组件
表单bean任务是验证用户的表单参数,Struts直接将表单验证任务放在体系中;
ActionServlet调用Action对象的excute()方法;
Action对象
在struts-config.xml文件中声明和映射Web应用中的Struts组件;
struts的部署文件
安装struts,导入jar包即可部署该框架(略);

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值