java Web表示层技术

来源:互联网 发布:淘宝5.5还包邮怎么挣钱 编辑:程序博客网 时间:2024/06/05 16:31

WEB应用程序的目录结构:

新建一个文件夹,在其中方html文件和js文件和css文件和jpg图片,在当中新建一个WEB-INF文件夹。

 WEB-INF目录中的内容是不能被客户端直接访问的,存放一些比较隐秘的信息

WEB-INF目录中建一个classes文件夹,存放开发者书写业务类编译生成的class文件;新建一个lib文件夹,存放web应用程序中所使用的jar文件

web.xml 用于web组件的注册

tomcat的目录结构:

bin:用于存放tomcat中的可执行文件。其中startup.bat用于启动tomcat。shutdown.bat用于关闭tomcat

conf:存放tomcat的配置文件.其中server.xml用于tomcat服务器相关的配置。web.xml用于tomcat中web应用相关的配置。

server.xml

<Connector port=“8088” protocol=“HTTP/1.1”>…….

描述tomcat启动端口

<Host  appBase=“webapps”  unpackWARs=“true”>




lib:用于存放tomcat运行时所使用的jar包。其中servlet-api.jar是tomcat根据Servlet规范提供实现类,所生成的jar文件。


logs:用于存放日志文件。

temp:用于存放临时文件。

webapps:用于存放和部署web应用程序的目录

web服务器,web容器  web应用服务器的区别。

web服务器主要作用于开启服务器,监听端口,接受请求,产生响应,只是智能产生静态的html响应信息,极大的影响响应信息灵活性。

web容器是辅助应用的一种解决方案。允许将请求信息处理完成后,动态产生响应信息。

web服务器加上web容器,合成web应用服务器。


servlet请求路径的问题:

在form的action 属性中,直接写Servley的url路径。默认是在当前的目录下查找。一旦网页在子目录中,那么会在提交路径中加上子目录的名称。可以通过../回到上一级目录。

如果目录比较深,频繁用../很繁琐,而且移植性不好。可以在url路径中,以/开始,表示会到webapps根目录,再加上部署名,再书写servlet请求路径<from action=“/webTest/tt”>

Svelte的URL路径书写的方式:

1,精确映射  /abc    2,表示只能以/abc路径来查找servlet

2,扩展映射   *.action  表示凡是以.action结尾的请求都能访问Servlet。

3,路径映射  /abc/*   表示凡是在/abc/路径下的请求都能访问Servlet


Servlet生命周期

1,启动tomcat,读取conf/server.xml文件,以确定启动端口和web应用程序的布署目录

2,读取布署目录中所有的web应用程序中的web.xml。以确定注册的web组件。所以一旦有一个web应用程序中的web.xml书写错误,那么解析失败,从而跑出解析异常。正确解析web.xml 可以确定布署的web组件信息。

3,加载并实例化Servlet。加上<load-on-startup>标签。如果该标签的值为0或者正数,表示web容器一启动就实例化,如果该标签布鞋或为负数,表示第一次访问再实例化。

4,调用init()方法完成初始化。

5,当请求到达后,调用service()完成业务。

6,销毁阶段,调用destory()完成清理工作。

在整个生命周期中,1,2,3,4,6都只执行一次。只有5才是每次请求都会执行。而且servlet对象只有一个,是单实例多线程的类。


在注册servlet时,可以加入

<init-param>

<param-name>aaa</param-name>

<param-value>111</param-value>

</init-param>


进行serclet初始化信息的描述。可以通过ServletConfig配置对象中的getInitParameter()根据参数名称,得到参数值。但是该初始化参数只能在当前servlet中使用,不能在别的serclet中使用。


@Override强制检测是否重写父类方法


状态行分为HTTP协议,状态码和状态描述三个部分

HTTP状态码:

100-199:表示信息性代码,标示客户端应采取的其他动作,请求正在进行。

200-299:表示客户请求成功。

300-399:表示用于已经移走的资源文件,请示新的地址。

400-499:表示you客户端引发的错误。

500-599:表示由服务器端发生的错误。


注意:在使用PrintWriter向客户端输出信息之前,设置状态码。


通过响应对象HttpServletResponse的setHeader()可以设置响应头,但是响应头必须要被浏览器识别才有意义。所以通常会把响应头的设置封装成响应对象的方法,比如:serContentType(),addCookie()…..


由于自己有HTTP协议才会有响应头,所以setHeader()只存在于HttpServletResponse中。


HttpServletResponse响应对象有两个方法可以向客户端输出数据。

1,getWriter(),得到打印字符流,可以向客户端输出文本数据。

2,getOutputStream(),得到输出字节流,可以向客户端输出二进制数据。


重定向工作流程:客户端访问服务器。服务器调用response.sendRedirect(),产生响应时,会产生302状态码,同时产生location响应头。客户端浏览器在接受到响应信息之后,发现时302状态码,那么久会读区location响应头的内容。然后将该内容更新浏览器地址栏,再向服务器发出第二次请求。sGTo5fYfTq.r


GET/POST提交方法

浏览器向web服务器发送http请求:

用户在网页上点击一个超链接

用户提交在网页上填写好的表单

用户在浏览器地址栏中输入URL地址并回车


默认情况下都是使用htto协议的GET方法提交请求

定制浏览器行为:<FORM name=‘loginFrom’ method=‘POST’ action=‘/loginServlet’>


GET和POST方式的区别

1,流格式的区别。

get方式表单数据附加在URL后面,而POST方式表单数据在消息体汇总,所以GET方式没有消息体。

2,用途的区别

get方式主要用于资源的查找,而POST方式主要用于数据的传输。

3,传输性能的区别

get方式只能传输数据文本数据,而post方式可以传输文本和二进制数据。

get方式不能传输大数据,而post方式可以传输大数据。

get方式的表单数据附加在URL后面,所以表单数据会在浏览器地址栏中显示出来,而POST方式的表单数据在消息体中,所以浏览器地址栏不会显示,相对GET方式数据安全一点。

get方式的数据会在浏览器中缓存,而POST方式不会缓存。


超链接href,表单的action,重定向 如果以/开始,必须加上布署名 /webTest/all

获得真实路径getRealPath,内部转发,如果以/开始,应该书写相对于web应用程序的路径,不加布署名


req.getParameter(“  *** ”)  只会获得第一个符合条件的值


req.getParameterValues(“ ***  ”) 得到一个表单名对应的所有值

请求转发:在服务器内部作资源调配,客户端只发出一次请求

request请求对象中,也提供了setAttribute和getAttribute方法,不过,在请求对象中封装的对象,作用范围只在一次请求范围内。

在servlet中转发页面有两种方式:重定向和内部转发

他们的区别在于:

1,重定向由response发出,而内部转发由RequestDispatcher发出。

2,重定向,客户端发出两次请求,而内部转发,客户端只发出一次请求。所以内部转发可以共享request请求对象中封装的数据,而重定向不行。

3,内部转发只能转发服务器内部的资源,但重定向可以在第二次请求时,转向别的服务器。



状态跟踪:http协议是一种无状态的协议,当请求和响应完成后,会断开连接,以释放服务器的内存资源。所以服务器无法保存客户端的状态,服务器会认为每次请求的客户端都是新用户。但是很多时候,我们需要得到客户的状态,完成一系列的商务活动,这时需要状态跟踪。


状态跟踪有四种解决方案:

1,隐藏表单        2,cookie       3,session      4,URL重写

cookie工作流程:客户端访问服务器,服务器调用response.addCookie()方法。产生响应时,会产生ser-cookie响应头,将cookie文本发送给客户端。客户端会将cookie文本保存起来。当客户端再次请求服务器时,会产生cookie请求头,将之前服务器发送的cookie信息,再发送给服务器。服务器就可以根据cookie信息跟踪客户端的状态。

cookie的分类:

1,存放在客户端浏览器的缓存中。浏览器不关闭,cookie信息一起存在,浏览器一关闭,cookie消失。

2,存放在客户端的文件中,并可以设置cookie的过期时间,过期时间之内,即使浏览器关闭,也可以将cookie信息发送给服务器。超过过期时间,cookie消失。

cookie信息是以文本方式存放在客户端的,所以容易引起一些安全隐患,所以不要把隐秘信息以cookie方式保存。


session的工作流程:

客户端访问服务器,服务器调用request.getSesion()产生session对象。用于跟踪用户的状态。同时给sessionid 对象分配一个唯一标识。为了管理session对象,以sessionid为键,以session对象为值,封装成Map集合。

产生响应时,将sessionId以cookie方式发送给客户端。存放在客户端浏览器的缓存中。当客户端再次请求服务器器,会将sessionId以cookie请求头的方式发送给客户端。服务器的到sessionId后,从Map 集合中,的到session’对象,从而跟踪状态。

session是服务器端用于保存客户端相关状态的对象。由于http协议是无状态的协议,所以,客户端是否关闭浏览器,服务器并不知道。客户端即使关闭浏览器下限,服务器也会一致保存session对象。这样,会极大好肥服务器的内存资源。所以服务器应该及时清理过时的session,以释放服务器的内存资源。

session的销毁有三种方式:

1,设置超时时间

2,调用session对象的invalidate(),强行销毁。

3,应用服务器崩溃。


 

cookie和session的区别:

1,cookie信息是存在客户端的,session信息是以对象方式存放在服务器的

2,cookie信息存放的事文本数据,而session对象可以绑定对象共享。

3,客户端和服务器之间传递cookie,传递的事具体的数据。而使用session时,传递的只是sessionid,所以使用session安全性比较好。

URL重写:

当客户端禁用了cookie之后,这时,服务器发送给客户端的sessionID,客户端就不能通过cookie方式进行保存了。这样,客户端请求时,也不能将sessionid,以cookie请求头方式,提交给服务器。服务器得不到sessionid,也就无法取出session对象。


解决方案是:当客户端禁用了cookie之后,在URL后面,强行附加sessionid。

<a href=“/lovobook/WriteURL;jsessionid=F7A5”> Click</a>这样,客户端无论是否金庸cookie,服务器都可以得到sessionID,从而跟踪状态。

0 0
原创粉丝点击