Java面试问题总结(Java web)

1.JAVA应用服务器都有那些

  • BEA WebLogic Server,
  • IBM WebSphere Application Server,
  • Oracle9i Application Server
  • jBoss
  • Tomcat

2.在什么情况下会使用assert(断言)

assertion (断言)在软件开发中是一种常用的调试方式,很多开发语言中都支持这种机制。在实现中,assertion就是在程序中的一条语句,它对一个 boolean表达式进行检查,一个正确程序必须保证这个boolean表达式的值为true;如果该值为false,说明程序已经处于不正确的状态下,系统将给出警告或退出。一般来说,assertion用于保证程序最基本、关键的正确性。assertion检查通常在开发和测试时开启。为了提高性能,在软件发布后,assertion检查通常是关闭的。

3.如何在链接里不输入项目名称的情况下启动项目

可在taomcat配置虚拟目录。

4.JSP中的静态包含和动态包含的有哪些区别

  • 静态包含是通过JSP的include指令包含页面,动态包含是通过JSP标准动作包含页面。
  • 静态包含是编译时包含,如果包含的页面不存在则会产生编译错误,而且两个页面的"contentType"属性应保持一致,因为两个页面会合二为一,只产生一个class文件,因此被包含页面发生的变动再包含它的页面更新前不会得到更新
  • 动态包含是运行时包含,可以向被包含的页面传递参数,包含页面和被包含页面是独立的,会编译出两个class文件,如果被包含的页面不存在,不会产生编译错误,也不影响页面其他部分的执行。

例如:

<%-- 静态包含 --%>
<%@ include file="..." %>
<%-- 动态包含 --%>


5.表达式语言(EL)的隐式对象以及该对象的作用

EL的隐式对象包括:

  • pageContext(页面上下文,该对象主要用于访问JSP之间的共享数据)
  • initParam(访问上下文参数)
  • param(访问请求参数)
  • paramValues、header(访问请求头)
  • headerValues、cookie(访问cookie)
  • applicationScope(访问application作用域)
  • sessionScope(访问session作用域)
  • requestScope(访问request作用域)
  • pageScope(访问page作用域)

6.JSP有哪些内置对象?以及这些对象的作用分别是什么?

JSP有9个内置对象:

  • request:封装客户端的请求,其中包含来自GET或POST请求的参数,并且提供了几个用于获取cookie, header, 和session数据的有用的方法;
  • response:封装服务器对客户端的响应;并提供了几个用于设置送回浏览器的响应的方法(如cookies,头信息等)
  • pageContext:通过该对象可以获取其他对象;用于方便存取各种范围的名字空间、servlet相关的对象的API,并且包装了通用的servlet相关功能的方法
  • session:封装用户会话的对象;Session可以存贮用户的状态信息
  • application:封装服务器运行环境的对象;有助于查找有关servlet引擎和servlet环境的信息
  • out:输出服务器响应的输出流对象;
  • config:Web应用的配置对象;用于存取servlet实例的初始化参数
  • page:JSP页面本身(相当于Java程序中的this);表示从该页面产生的一个servlet实例
  • exception:封装页面抛出异常的对象。

如果用Servlet来生成网页中的动态内容无疑是非常繁琐的工作,另一方面,所有的文本和HTML标签都是硬编码,即使做出微小的修改,都需要进行重新编译。JSP解决了Servlet的这些问题,它是Servlet很好的补充,可以专门用作为用户呈现视图(View),而Servlet作为控制器(Controller)专门负责处理用户请求并转发或重定向到某个页面
基于Java的Web开发很多都同时使用了Servlet和JSP。JSP页面其实是一个Servlet,能够运行Servlet的服务器(Servlet容器)通常也是JSP容器,可以提供JSP页面的运行环境,Tomcat就是一个Servlet/JSP容器。第一次请求一个JSP页面时,Servlet/JSP容器首先将JSP页面转换成一个JSP页面的实现类,这是一个实现了JspPage接口或其子接口HttpJspPage的Java类。JspPage接口是Servlet的子接口,因此每个JSP页面都是一个Servlet。转换成功后,容器会编译Servlet类,之后容器加载和实例化Java字节码,并执行它通常对Servlet所做的生命周期操作。对同一个JSP页面的后续请求,容器会查看这个JSP页面是否被修改过,如果修改过就会重新转换并重新编译并执行。如果没有则执行内存中已经存在的Servlet实例。

7.jsp有哪些动作? 这些动作的作用又分别是什么

JSP 共有以下6种基本动作

  • jsp:include:在页面被请求的时候引入一个文件。
  • jsp:useBean:寻找或者实例化一个JavaBean。
  • jsp:setProperty:设置JavaBean的属性。
  • jsp:getProperty:输出某个JavaBean的属性。
  • jsp:forward:把请求转到一个新的页面。
  • jsp:plugin:根据浏览器类型为Java插件生成OBJECT或EMBED标记。

8.Request对象的主要方法

setAttribute(String name,Object):设置名字为name的request的参数值
getAttribute(String name):返回由name指定的属性值
getAttributeNames():返回request对象所有属性的名字集合,结果是一个枚举的实例
getCookies():返回客户端的所有Cookie对象,结果是一个Cookie数组
getCharacterEncoding():返回请求中的字符编码方式

  • getContentLength():返回请求的Body的长度
  • getHeader(String name):获得HTTP协议定义的文件头信息
  • getHeaders(String name):返回指定名字的request Header的所有值,结果是一个枚举的实例
  • getHeaderNames():返回所以request Header的名字,结果是一个枚举的实例
  • getInputStream():返回请求的输入流,用于获得请求中的数据
  • getMethod():获得客户端向服务器端传送数据的方法
  • getParameter(String name):获得客户端传送给服务器端的有name指定的参数值
  • getParameterNames():获得客户端传送给服务器端的所有参数的名字,结果是一个枚举的实例
  • getParameterValues(String name):获得有name指定的参数的所有值
  • getProtocol():获取客户端向服务器端传送数据所依据的协议名称
  • getQueryString():获得查询字符串
  • getRequestURI():获取发出请求字符串的客户端地址
  • getRemoteAddr():获取客户端的IP地址
  • getRemoteHost():获取客户端的名字
  • getSession([Boolean create]):返回和请求相关Session
  • getServerName():获取服务器的名字
  • getServletPath():获取客户端所请求的脚本文件的路径
  • getServerPort():获取服务器的端口号
  • removeAttribute(String name):删除请求中的一个属性

9.四种会话跟踪技术

会话跟踪是一种灵活、轻便的机制,它使Web上的状态编程变为可能。
HTTP是一种无状态协议,每当用户发出请求时,服务器就会做出响应,客户端与服务器之间的联系是离散的、非连续的。
当用户在同一网站的多个页面之间转换时,根本无法确定是否是同一个客户,会话跟踪技术就可以解决这个问题。
当一个客户在多个页面间切换时,服务器会保存该用户的信息。
有四种方法可以实现会话跟踪技术:URL重写、隐藏表单域、Cookie、Session。

  • 1 ) 隐藏表单域: ,非常适合不需要大量数据存储的会话应用。
  • 2 ) URL 重写 :URL 可以在后面附加参数,和服务器的请求一起发送,这些参数为名字 / 值对。 见 http://blog.csdn.net/xh16319/...
  • 3 ) Cookie: 一个 Cookie 是一个小的,已命名数据元素。服务器使用 SET-Cookie 头标将它作为 HTTP响应的一部分传送到客户端,客户端被请求保存 Cookie 值,在对同一服务器的后续请求使用一个Cookie 头标将之返回到服务器。与其它技术比较, Cookie 的一个优点是在浏览器会话结束后,甚至在客户端计算机重启后它仍可以保留其值。 见: http://blog.csdn.net/xh16319/...
  • 4 ) Session :使用 setAttribute(String str,Object obj) 方法将对象捆绑到一个会话

10.JSP和Servlet关系

JSP 是Servlet技术的扩展,本质上是Servlet的简易方式,更强调应用的外表表达。JSP编译后是”类servlet”。
Servlet和JSP最主要的不同点在于,Servlet的应用逻辑是在Java文件中,并且完全从表示层中的HTML里分离开来。而JSP的情况是Java和HTML可以组合成一个扩展名为.jsp的文件。JSP侧重于视图,Servlet主要用于控制逻辑

11.web.xml文件中可以配置哪些内容

web.xml用于配置Web应用的相关信息,如:监听器(listener)、过滤器(filter)、 Servlet、相关参数、会话超时时间、安全验证方式、错误页面等,下面是一些开发中常见的配置:

①配置Spring上下文加载监听器加载Spring配置文件并创建IoC容器:

contextConfigLocation
classpath:applicationContext.xml




org.springframework.web.context.ContextLoaderListener



②配置Spring的OpenSessionInView过滤器来解决延迟加载和Hibernate会话关闭的矛盾:


openSessionInView

org.springframework.orm.hibernate3.support.OpenSessionInViewFilter




openSessionInView
/*


③配置会话超时时间为10分钟:


10


④配置404和Exception的错误页面:

404
/error.jsp



java.lang.Exception
/error.jsp

⑤配置安全认证方式:



ProtectedArea
/admin/*
GET
POST


admin




BASIC



admin

12.Javaweb开发中的监听器

Java Web开发中的监听器(listener)就是application、session、request三个对象创建、销毁或者往其中添加修改删除属性时自动执行代码的功能组件,如下所示:

  • ①ServletContextListener:对Servlet上下文的创建和销毁进行监听。
  • ②ServletContextAttributeListener:监听Servlet上下文属性的添加、删除和替换。
  • ③HttpSessionListener:对Session的创建和销毁进行监听。
    session的销毁有两种情况:

    • 1). session超时(可以在web.xml中通过/标签配置超时时间);
    • 2). 通过调用session对象的invalidate()方法使session失效。
  • ④HttpSessionAttributeListener:对Session对象中属性的添加、删除和替换进行监听。
  • ⑤ServletRequestListener:对请求对象的初始化和销毁进行监听。
  • ⑥ServletRequestAttributeListener:对请求对象属性的添加、删除和替换进行监听。

13.过滤器

Java Web开发中的过滤器(filter)是从Servlet 2.3规范开始增加的功能,并在Servlet 2.4规范中得到增强。对Web应用来说,过滤器是一个驻留在服务器端的Web组件,它可以截取客户端和服务器之间的请求与响应信息,并对这些信息进行过滤。当Web容器接受到一个对资源的请求时,它将判断是否有过滤器与这个资源相关联。如果有,那么容器将把请求交给过滤器进行处理。在过滤器中,你可以改变请求的内容,或者重新设置请求的报头信息,然后再将请求发送给目标资源。当目标资源对请求作出响应时候,容器同样会将响应先转发给过滤器,在过滤器中你可以对响应的内容进行转换,然后再将响应发送到客户端。

常见的过滤器用途主要包括:对用户请求进行统一认证、对用户的访问请求进行记录和审核、对用户发送的数据进行过滤或替换、转换图象格式、对响应内容进行压缩以减少传输量、对请求或响应进行加解密处理、触发资源访问事件、对XML的输出应用XSLT等
和过滤器相关的接口主要有:Filter、FilterConfig和FilterChain

14.Servlet如何获取用户配置的初始化参数以及服务器上下文参数

可以通过重写Servlet接口的init(ServletConfig)方法通过ServletConfig对象的getInitParameter()方法来获取Servlet的初始化参数

可以通过ServletConfig对象的getServletContext()方法获取ServletContext对象,并通过该对象的getInitParameter()方法来获取服务器上下文参数。当然,ServletContext对象也在处理用户请求的方法(如doGet()方法)中通过请求对象的getServletContext()方法来获得。

15.使用Servlet如何获取用户提交的查询参数以及表单数据

可以通过请求对象(HttpServletRequest)的getParameter()方法通过参数名获得参数值。如果包含多个值的参数(例如复选框),可以通过请求对象的getParameterValues()方法获得。当然也可以通过请求对象的getParameterMap()获得一个参数名和参数值的映射(Map)

16.如何在基于Java的Web项目中实现文件上传和下载

在Sevlet 3 以前,Servlet API中没有支持上传功能的API,因此要实现上传功能需要引入第三方工具从POST请求中获得上传的附件或者通过自行处理输入流来获得上传的文件,我们推荐使用Apache的commons-fileupload。
从Servlet 3开始,文件上传变得简单许多。

package
com.jackfrued.servlet;
 import java.io.IOException;
 import javax.servlet.ServletException;
 import javax.servlet.annotation.MultipartConfig;
 import javax.servlet.annotation.WebServlet;
 import javax.servlet.http.HttpServlet;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import javax.servlet.http.Part;
 @WebServlet("/UploadServlet")
 @MultipartConfig
 public class UploadServlet extends HttpServlet {
     private static final long serialVersionUID = 1L;
     protected void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {
         // 可以用request.getPart()方法获得名为photo的上传附件
         // 也可以用request.getParts()获得所有上传附件(多文件上传)
         // 然后通过循环分别处理每一个上传的文件
         Part part = request.getPart("photo");
         if (part != null && part.getSubmittedFileName().length() > 0) {
             // 用ServletContext对象的getRealPath()方法获得上传文件夹的绝对路径
             String savePath = request.getServletContext().getRealPath("/upload");
             // Servlet3.1规范中可以用Part对象的getSubmittedFileName()方法获得上传的文件名
             // 更好的做法是为上传的文件进行重命名(避免同名文件的相互覆盖)
            
            part.write(savePath + "/" + part.getSubmittedFileName());
            
            request.setAttribute("hint", "Upload Successfully!");
         } else {
             request.setAttribute("hint", "Upload failed!");
         }
         // 跳转回到上传页面
        
        request.getRequestDispatcher("index.jsp").forward(request, response);
     }
 }

17.Servlet 3中的异步处理

在Servlet 3中引入了一项新的技术可以让Servlet异步处理请求。有人可能会质疑,既然都有多线程了,还需要异步处理请求吗?答案是肯定的,因为如果一个任务处理时间相当长,那么Servlet或Filter会一直占用着请求处理线程直到任务结束,随着并发用户的增加,容器将会遭遇线程超出的风险,这这种情况下很多的请求将会被堆积起来而后续的请求可能会遭遇拒绝服务,直到有资源可以处理请求为止。异步特性可以帮助应用节省容器中的线程,特别适合执行时间长而且用户不需要得到结果的任务,如果用户不需要得到结果则直接将一个Runnable对象交给Executor并立即返回即可。

18.Servlet接口中有哪些方法

Servlet接口定义了5个方法,其中前三个方法与Servlet生命周期相关:

  • void init(ServletConfig config) throws ServletException
  • void service(ServletRequest req, ServletResponse resp) throws ServletException, java.io.IOException
  • void destory()
  • java.lang.String getServletInfo()
  • ServletConfig getServletConfig()
    Web容器加载Servlet并将其实例化后,Servlet生命周期开始,容器运行其init()方法进行Servlet的初始化请求到达时调用Servlet的service()方法,service()方法会根据需要调用与请求对应的doGet或doPost等方法;当服务器关闭或项目被卸载时服务器会将Servlet实例销毁,此时会调用Servlet的destroy()方法
    init ()方法在servlet的生命周期中仅执行一次,在服务器装载servlet时执行。缺省的init()方法通常是符合要求的,不过也可以根据需要进行 override,比如管理服务器端资源,一次性装入GIF图像,初始化数据库连接等,缺省的inti()方法设置了servlet的初始化参数,并用它的ServeltConfig对象参数来启动配置,所以覆盖init()方法时,应调用super.init()以确保仍然执行这些任务。service ()方法是servlet的核心,在调用service()方法之前,应确保已完成init()方法。对于HttpServlet,每当客户请求一个HttpServlet对象,该对象的service()方法就要被调用,HttpServlet缺省的service()方法的服务功能就是调用与 HTTP请求的方法相应的do功能,doPost()和doGet(),所以对于HttpServlet,一般都是重写doPost()和doGet() 方法。destroy()方法在servlet的生命周期中也仅执行一次,即在服务器停止卸载servlet时执行,把servlet作为服务器进程的一部分关闭。缺省的destroy()方法通常是符合要求的,但也可以override,比如在卸载servlet时将统计数字保存在文件中,或是关闭数据库连接getServletConfig()方法返回一个servletConfig对象,该对象用来返回初始化参servletContext。servletContext接口提供有关servlet的环境信息。getServletInfo()方法提供有关servlet的信息,如作者,版本,版权。

19.Servlet和CGI的区别

Servlet与CGI的区别在于Servlet处于服务器进程中,它通过多线程方式运行其service()方法一个实例可以服务于多个请求,并且其实例一般不会销毁,而CGI对每个请求都产生新的进程服务完成后就销毁,所以效率于Servlet。

20.forward与redirect区别

1.从地址栏显示来说

  • forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器.浏览器根本不知道服务器发送的内容从哪里来的,所以它的地址栏还是原来的地址.
  • redirect是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址.所以地址栏显示的是新的URL.

2.从数据共享来说

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

3.从访问请求次数来说

  • forward:客户端进行一次访问请求
  • redirect:客户端进行两次访问请求

4.从运用地方来说

  • forward:一般用于用户登陆的时候,根据角色转发到相应的模块.
  • redirect:一般用于用户注销登陆时返回主页面和跳转到其它的网站等.

5.从效率来说

  • forward:高.
  • redirect:低.

状态码:https://www.runoob.com/http/h...

21.使用标签库有什么好处?如何自定义JSP标签?

使用标签库的好处包括以下几个方面:

  • 分离JSP页面的内容和逻辑,简化了Web开发;
  • 开发者可以创建自定义标签来封装业务逻辑和显示逻辑;
  • 标签具有很好的可移植性、可维护性和可重用性;
  • 避免了对Scriptlet(小脚本)的使用(很多公司的项目开发都不允许在JSP中书写小脚本)

编写一个Java类实现实现Tag/BodyTag/IterationTag接口(开发中通常不直接实现这些接口而是继承TagSupport/BodyTagSupport/SimpleTagSupport类,这是对缺省适配模式的应用),重写doStartTag()、doEndTag()等方法,定义标签要完成的功能:

  • 编写扩展名为tld的标签描述文件对自定义标签进行部署,tld文件通常放在WEB-INF文件夹下或其子目录中
  • 在JSP页面中使用taglib指令引用该标签库

22.项目中,使用过哪些JSTL标签

项目中主要使用了JSTL的核心标签库,包括等,主要用于构造循环和分支结构以控制显示逻辑。

虽然JSTL标签库提供了core、sql、fmt、xml等标签库,但是实际开发中建议只使用核心标签库(core),而且最好只使用分支和循环标签并辅以表达式语言(EL),这样才能真正做到数据显示和业务逻辑的分离,这才是最佳实践。

23.get和post请求的区别

  • get请求用来从服务器上获得资源,而post是用来向服务器提交数据
    • get将表单中数据按照name=value的形式添加到action所指向的URL 后面,并且两者使用"?"连接,而各个变量之间使用"&"连接
    • post是将表单中的数据放在HTTP协议的请求头或消息体中传递到action所指向URL
  • get传输的数据要受到URL长度限制(1024字节);而post可以传输大量的数据上传文件通常要使用post方式
  • ④使用get参数会显示在地址栏上,如果这些数据不是敏感数据,那么可以使用get;对于敏感数据还是应用使用post
  • get使用MIME类型application/x-www-form-urlencoded的URL编码(也叫百分号编码)文本的格式传递参数,保证被传送的参数由遵循规范的文本组成,例如一个空格的编码是"%20"。

24.J2EE中常用的名

web 容器:给处于其中的应用程序组件(JSP,SERVLET)提供一个环境,使JSP,SERVLET直接和容器中的环境变量接口交互,不必关注其它系统问题。主要有WEB服务器来实现。例如:TOMCAT,WEBLOGIC,WEBSPHERE等。该容器提供的接口严格遵守J2EE规范中的WEBAPPLICATION 标准。我们把遵守以上标准的WEB服务器就叫做J2EE中的WEB容器
Web container实现J2EE体系结构中Web组件协议的容器。这个协议规定了一个Web组件运行时的环境,包括安全,一致性,生命周期管理,事务,配置和其它的服务。一个提供和JSP和J2EE平台APIs界面相同服务的容器。一个Web container 由Web服务器或者J2EE服务器提供。
EJB容器Enterprise java bean 容器。更具有行业领域特色。他提供给运行在其中的组件EJB各种管理功能。只要满足J2EE规范的EJB放入该容器,马上就会被容器进行高效率的管理。并且可以通过现成的接口来获得系统级别的服务。例如邮件服务、事务管理。一个实现了J2EE体系结构中EJB组件规范的容器。这个规范指定了一个Enterprise bean的运行时环境,包括安全,一致性,生命周期,事务,配置,和其他的服务。
JNDI(Java Naming & Directory Interface)JAVA命名目录服务。主要提供的功能是:提供一个目录系统,让其它各地的应用程序在其上面留下自己的索引,从而满足快速查找和定位分布式应用程序的功能。
JMS(Java Message Service)JAVA消息服务。主要实现各个应用程序之间的通讯。包括点对点和广播。
JTA(Java Transaction API)JAVA事务服务。提供各种分布式事务服务。应用程序只需调用其提供的接口即可。
JAF(Java Action FrameWork)JAVA安全认证框架。提供一些安全控制方面的框架。让开发者通过各种部署和自定义实现自己的个性安全控制策略。
RMI/IIOP: (Remote Method Invocation /internet对象请求中介协议)他们主要用于通过远程调用服务。例如,远程有一台计算机上运行一个程序,它提供股票分析服务,我们可以在本地计算机上实现对其直接调用。当然这是要通过一定的规范才能在异构的系统之间进行通信。RMI是JAVA特有的。RMI-IIOP出现以前,只有RMI和 CORBA两种选择来进行分布式程序设计。RMI-IIOP综合了RMI和CORBA的优点,克服了他们的缺点,使得程序员能更方便的编写分布式程序设计,实现分布式计算。首先,RMI-IIOP综合了RMI的简单性和CORBA的多语言性(兼容性),其次RMI-IIOP克服了RMI只能用于Java 的缺点和CORBA的复杂性。

25.什么是Web Service

从表面上看,Web Service就是一个应用程序,它向外界暴露出一个能够通过Web进行调用的API。这就是说,你能够用编程的方法透明的调用这个应用程序,不需要了解它的任何细节,跟你使用的编程语言也没有关系。例如可以创建一个提供天气预报的Web Service,那么无论你用哪种编程语言开发的应用都可以通过调用它的API并传入城市信息来获得该城市的天气预报。之所以称之为Web Service,是因为它基于HTTP协议传输数据,这使得运行在不同机器上的不同应用无须借助附加的、专门的第三方软件或硬件,就可相互交换数据或集成。

SOA(Service-Oriented Architecture,面向服务的架构),SOA是一种思想,它将应用程序的不同功能单元通过中立的契约联系起来,独立于硬件平台、操作系统和编程语言,使得各种形式的功能单元能够更好的集成。显然,Web Service是SOA的一种较好的解决方案,它更多的是一种标准,而不是一种具体的技术。

26.如何设置请求的编码以及响应内容的类型

通过请求对象(ServletRequest)的setCharacterEncoding(String)方法可以设置请求的编码,其实要彻底解决乱码问题就应该让页面、服务器、请求和响应、Java程序都使用统一的编码,最好的选择当然是UTF-8;
通过响应对象(ServletResponse)的setContentType(String)方法可以设置响应内容的类型,当然也可以通过HttpServletResponsed对象的setHeader(String, String)方法来设置。

27.BS与CS 的联系,还有区别

C/S是Client/Server的缩写。服务器通常采用高性能的PC、工作站或小型机,并采用大型数据库系统,如Oracle、Sybase、Informix或 SQL Server。客户端需要安装专用的客户端软件。
B/S是Brower/Server的缩写,客户机上只要安装一个浏览器(Browser),如Netscape Navigator或Internet Explorer,服务器安装Oracle、Sybase、Informix或 SQL Server等数据库。在这种结构下,用户界面完全通过WWW浏览器实现,一部分事务逻辑在前端实现,但是主要事务逻辑在服务器端实现。浏览器通过Web Server 同数据库进行数据交互。
C/S 与 B/S 区别:

硬件环境不同:
C/S 一般建立在专用的网络上, 小范围里的网络环境, 局域网之间再通过专门服务器提供连接和数据交换服务.
B/S 建立在广域网之上的, 不必是专门的网络硬件环境,例与电话上网, 租用设备. 信息自己管理. 有比C/S更强的适应范围, 一般只要有操作系统和浏览器就行
2.对安全要求不同
C/S 一般面向相对固定的用户群, 对信息安全的控制能力很强. 一般高度机密的信息系统采用C/S 结构适宜. 可以通过B/S发布部分可公开信息.
B/S 建立在广域网之上, 对安全的控制能力相对弱, 可能面向不可知的用户。
3.对程序架构不同
C/S 程序可以更加注重流程, 可以对权限多层次校验, 对系统运行速度可以较少考虑.
B/S 对安全以及访问速度的多重的考虑, 建立在需要更加优化的基础之上. 比C/S有更高的要求 B/S结构的程序架构是发展的趋势, 从MS的.Net系列的BizTalk 2000 Exchange 2000等, 全面支持网络的构件搭建的系统. SUN 和IBM推的JavaBean 构件技术等,使B/S更加成熟.
4.软件重用不同
C/S 程序可以不可避免的整体性考虑, 构件的重用性不如在B/S要求下的构件的重用性好.
B/S 对的多重结构,要求构件相对独立的功能. 能够相对较好的重用.就入买来的餐桌可以再利用,而不是做在墙上的石头桌子
5.系统维护不同
C/S 程序由于整体性, 必须整体考察, 处理出现的问题以及系统升级. 升级难. 可能是再做一个全新的系统
B/S 构件组成,方面构件个别的更换,实现系统的无缝升级. 系统维护开销减到最小.用户从网上自己下载安装就可以实现升级.
6.处理问题不同
C/S 程序可以处理用户面固定, 并且在相同区域, 安全要求高需求, 与操作系统相关. 应该都是相同的系统
B/S 建立在广域网上, 面向不同的用户群, 分散地域, 这是C/S无法作到的. 与操作系统平台关系最小.
7.用户接口不同
C/S 多是建立的Window平台上,表现方法有限,对程序员普遍要求较高
B/S 建立在浏览器上, 有更加丰富和生动的表现方式与用户交流. 并且大部分难度减低,减低开发成本.
8.信息流不同
C/S 程序一般是典型的中央集权的机械式处理, 交互性相对低
B/S 信息流向可变化, B-B B-C B-G等信息、流向的变化, 更像交易中心。

28.cookie 和 session 的区别

1、cookie数据存放在客户的浏览器上,session数据放在服务器上

2、cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗

考虑到安全应当使用session。

3、session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,考虑到减轻服务器性能方面,应当使用COOKIE

4、单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie

你可能感兴趣的:(java)