Head First Servlet & JSP读书笔记续

Head First Servlet & JSP读书笔记续

第七章JSP(因为时间不够以及后面要专门看JSP,这里就水过去了)

1、语法
scriptlet:<%i++;%>
指令:<%@ page import="foo.*"%>
表达式代码:<%= Counter.getCounter()%>
声明:<%!int i = 0;%><%! int doubleCount(){pass}%>
JSP注释:<%-- JSP注释 --%>
HTML注释:
EL:${applicationScope.mail}
动作:???????????
注意:使用表达式不必加分号
2、从JSP到Servlet
查看指令(指令的优先级最高,其次再就近原则)
创建HttpServlet子类
page指令的import属性 - > 声明 - > 建立服务方法,使用PrintWriter输出
3、隐式对象p298,使用pageContext操作属性p313
4、生成servlet的api
jspInit()
jspDestroy()
_jspService()
5、直接初始化JSP,即不通过servlet传入请求和响应引用——部署
和配置servlet类似,将改成即可
6、EL表达式直接从html中获得数据
7、EL绕过servlet直接向JSP发送请求

第十一章、web应用部署

1、在DD中可以做的事情:
配置欢迎页面、配置错误界面、配置servlet(url、name、初始化时间、全限定路径)、配置标签、配置安全
例子:


2、war
第十二章、web应用安全(以声明方式)
1、四大概念:认证、授权、机密性、数据完整性
2、认证:
1)四种类型:
基本(BASIC):加密安全性低
摘要(DIGEST):安全性较高,但容器或http不一定支持
客户证书(CLIENT-CERT):非常安全但客户必须有一个证书
表单(FORM):最不安全,在http请求中发回
2)语法
非表单:



BASIC          \\or  DIGEST  or  CLIENT-CERT


表单:


FORM

/loginPage.html
/loginError.html


在html中:

3、授权:
第一步:定义角色
在开发商的部署文件中修改(如:tomcat-user.xml)






在web.xml中修改

Admin

第二步:方法约束(对servlet和访问方式这一组合进行约束)



/Beer/AddRecipe/*
/Beer/ReviewRecipe/*

GET
POST



Admin
Guest


在有多种授权定义时:全禁止(有标签、没元素)>>全访问(*)>>允许访问(一个以上元素)

另外如果在程序中使用了isUserInRole(),出于统一性和规范性的考虑,必须需在再DD中再进行映射
例如

\\servlet
if(request.isUserInRole("Manage")){
\\处理页面
}


\\DD

Manage
Admin              \\对应部署文件中的角色名

3、https
在部署文件中:







CONFIDENTAIL           \\合法值有NONE(默认)、CONFIDENTAIL、INTEGRAL三种,后两者几乎一样


注意:需要在所有与页面有关的地方做https保护
https进一步了解。。。。。。。。。。。。。。。。。????????????

第十三章、过滤器与包装器(包装器还有别的用处??比如封装安全模块????)

1、过滤器:
本质:实现了Filter接口的java类,在DD中单独声明,进行url映射
filter类源码:

package wyn;

import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;

@WebFilter("/BeerRequestFilter")
public class BeerRequestFilter implements Filter {
    private FilterConfig fc;

    public BeerRequestFilter() {

    }
    public void destroy() {

    }
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        //完成一个日志功能,对用户登录进行记录
        HttpServletRequest httpreq = (HttpServletRequest)request;               //强转
        String name = httpreq.getRemoteUser();              //得到认证用户名(见后文)
        if(name!=null) {
            fc.getServletContext().log("User "+name+" is updating!");
        }
        chain.doFilter(request, response);//调用后面的过滤器或servlet
                //在调用完servlet之后才运行的代码放在这里,但一般要包装response
    }

    public void init(FilterConfig fConfig) throws ServletException {
        // TODO Auto-generated method stub
        this.fc = fConfig;
    }
}

DD部署:

  
  BeerRequest
  wyn.BeerRequestFilter
  
  LogFileNameUserLog.txt
  


BeerRequest
*.do

其中mapping也可以使用servlet-name替代url-pattern,源码略
注意1:对转发的请求也可以使用filter过滤,但默认是不过滤


BeerRequest
*.do

REQUEST          
FORWARD          
ERROR          

注意2:过滤器调用顺序是:谁的写在上面,谁先被过滤!
技术应用:完成一个响应端过滤器压缩输出
问题1:response仍是servlet调用意味着在chain.doFilter(request, response);调用完servlet之后输出已经完成了,之后的过滤器代码对response的作用没有意义
解决方案:不将repsonse交给servlet,而是我们自己实现的响应类!
(明天再看??????????????????)
响应类(压缩包装器)代码:

压缩过滤器代码:

输出流代码:

第十四章:企业设计模式

0、软件工程原则
1、分布式web开发(JNDI RMI) ???????????????
2、MVC进阶(完成控制器的重用)
为了完成重用,必须松耦合
新的控制器伪代码:

public class ServletController extends HttpServlet{
  public void doPost(HttpServletRequest request, HttpServletResponse response)
    \\以声明方式调用一个表单验证组件
    \\验证错误也由它处理

    \\以声明方式调用一个请求处理组件
    \\来调用一个模型组件

    \\以声明方式分派到试图JSP
}

这实际上就是Struts!

struct学习:
表单bean:对表单元素定义getter和setter,以及验证错误处理
Action对象:处理业务逻辑,即使用模型对象。其中主要的方法execute传入表单bean,转发请求给JSP,但具体的对象实在DD中部署,完成松耦合
struts-config.xml:集成表单bean、Action对象、JSP
web.xml:配置ActionServlet,但不太懂

完结感想:
1、编程任务:压缩过滤器、hjn的网站
2、笔记还需完善
3、本书内容还是比较浅显,需要结合深刻的一起理解
4、接下来的任务:JSP、计算机网络、javaee轻量级开发

你可能感兴趣的:(Head First Servlet & JSP读书笔记续)