还剩30页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
、阐述和的区分?96Servlet CGI答及的区分在于处于服务器进程中,它通过多线程方式运行其方Servlet CGIServlet service法,一个实例可以服务于多个恳求,并且其实例一般不会销毁,而对每个恳求都产生新的进CGI程,服务完成后就销毁,所以效率上低于Servlet补充公司在年发布技术就是为了和进行竞争,Sun Microsystems1996Servlet CGIServlet是一个特殊的程序,一个基于的应用通常包含一个或多个类Java Java Web Servlet Servlet不能够自行创建并执行,它是在容器中运行的,容器将用户的恳求传递给程序,Servlet Servlet并将的响应回传给用户通常一个会关联一个或多个页面以前常常因Servlet Servlet JSP CGI为性能开销上的问题被诟病,然而早就已经解决了效率上的问题,所以面试的时Fast CGICGI候大可不必信口开河的诟病事实上有许多你熟识的网站都运用了技术CGI,CGI、接口中有哪些方法?97Servlet答接口定义了个方法,其中前三个方法及生命周期相关Servlet5Servlet-void initServletConfig config throws ServletException-void destory-java.lang.String getServletInfo-ServletConfig getServletConfigO容器加载并将其实例化后,生命周期起先,容器运行其方法进行Web ServletServlet initServlet的初始化;恳求到达时调用的方法,方法会依据须要调用及恳求对应Servlet serviceservice的或等方法;当服务器关闭或项目被卸载时服务器会将实例销毁,此时会doGet doPostServlet调用的方法Servlet destroy?、转发和重定向的区分98forwardredirect答是容器中限制权的转向,是服务器恳求资源,服务器干脆访问目标地址的把那forward URL,个的响应内容读取过来,然后把这些内容再发给阅读器,阅读器根本不知道服务器发送的内URL容是从哪儿来的,所以它的地址栏中还是原来的地址就是服务器端依据逻辑,发送一个redirect状态码,告知阅读器重新去恳求那个地址,因此从阅读器的地址栏中可以看到跳转后的链接地址,很明显无法访问到服务器爱护起来资源,但是可以从一个网站到其他网站redirect redirect更加高效,所以在满意须要时尽量运用通过调用对象的forward forwardRequestDispatcher方法,该对象可以通过对象的forward ServletRequest
③有两种,一种是基于窗口的,阅读器窗口关闭后,就没有了;另一种cookie:cookie cookie是将信息存储在一个临时文件中,并设置存在的时间当用户通过阅读器和服务器建立一次会话后,会话就会随响应信息返回存储在基于窗口的中,那就意味着只要阅读器没有关闭,会ID cookie话没有超时,下一次恳求时这个会话又会提交给服务器让服务器识别用户身份会话中可以为ID用户保存信息会话对象是在服务器内存中的,而基于窗口的是在客户端内存中的假如cookie阅读器禁用了那么就须要通过下面两种方式进行会话跟踪当然,在运用时要留cookie,cookie意几点首先不要在中存放敏感信息;其次存储的数据量有限(),不能将过cookie cookie4k多的内容存储中;再者阅读器通常只允许一个站点最多存放个当然,和用户会cookie20cookieo话相关的其他信息(除了会话)也可以存在便利进行会话跟踪ID cookie:在全部会话跟踪技术中,对象是最强大也是功能最多的当一个用户第一次@Session Session访问某个网站时会自动创建,每个用户可以访问他自己的Session Session可以通过对象的方法获得通过的ServletRequest getSession Session,Session setAttribute方法可以将一个值放在中,通过调用对象的方法,同时传入属Session SessiongetAttribute性名就可以获得保存在中的对象及上面三种方式不同的是,放在服务器的内SessionSession存中,因此不要将过大的对象放在里面,即使目前的容器可以在内存将满时将Servlet Session中的对象移到其他存储设备中,但是这样势必影响性能添加到中的值可以是随意Session Java对象,这个对象最好实现了接口,这样容器在必要的时候可以将其序列化到Serializable Servlet文件中,否则在序列化时就会出现异样**补充中可以运用技术通过来保存数据,例如可以运用**HTML5Web StorageJavaScript和来保存用户会话的信息,也能够实现会话跟踪localstorage sessionstorage、过滤器有哪些作用和用法?106答开发中的过滤器()是从规范起先增加的功能,并在Java Webfilter Servlet
2.3Servlet
2.4规范中得到增加对应用来说,过滤器是一个驻留在服务器端的组件,它可以截取客Web Web户端和服务器之间的恳求及响应信息,并对这些信息进行过滤当容器接受到一个对资源的Web恳求时,它将推断是否有过滤器及这个资源相关联假如有,那么容器将把恳求交给过滤器进行处理在过滤器中,你可以变更恳求的内容,或者重新设置恳求的报头信息,然后再将恳求发送给目标资源当目标资源对恳求作出响应时候,容器同样会将响应先转发给过滤器,在过滤器中你可以对响应的内容进行转换,然后再将响应发送到客户端常见的过滤器用途主要包括对用户恳求进行统一认证、对用户的访问恳求进行记录和审核、对用户发送的数据进行过滤或替换、转换图象格式、对响应内容进行压缩以削减传输量、对恳求或响应进行加解密处理、触发资源访问事务、对的输出应用等XML XSLT和过滤器相关的接口主要有和Filter.FilterConfig FilterChaino编码过滤器的例子importption;import javax.servlet.Filter;import javax.servlet.Filterchain;import javax.servlet.FilterConfig;import j avax.servlet.ServletException;import javax.servlet.ServletRequest;import j avax.servlet.ServletResponse;import javax.servlet.annotation.WebFilter;import j avax.servlet.annotation.WeblnitParam;@WebFilterurlPatterns={},initParams={@WebInitParamname=nencodingH value=nutf-8H}rpublic classCodingFilter implementsFilter{private StringdefaultEncoding=nutf-8n;@Overridepublic voiddestroy{@Overridepublic voiddoFilterServletRequest reqServletResponse resp,zFilterChain chainthrows IOExceptionServletException{zreq.setCharacterEncodingdefaultEncoding;resp,setCharacterEncodingdefaultEncoding;chain.doFilterreq,resp;@Overridepublic voidinitFilterConfig configthrows ServletException{String encoding=config.getInitParameternencoding;if encoding!=null{defauItEncoding=encoding;下载计数过滤器的例子import java.io.File;import java.io.FileReader;import java.io.FileWriter;import java.io.lOException;import java.util.Properties;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;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;importtRequest;@WebFilterurlPatterns={”/*}public classDownloadCounterFilter implementsFilter{private ExecutorServiceexecutorService=Executors.newSingleThreadExe cutor;private PropertiesdownloadLog;private FilelogFile;@Overridepublic voiddestroy{executorService.shutdown;@Overridepublic voiddoFilterServletRequest req,ServletResponse resp,FilterChain chainthrowsIOException ServletException{ServletRequest request=ServletRequest req;rfinal Stringuri=request.getRequestURI;executorService.executenew Runnable{@Overridepublic voidrun{String value=downloadLog.getPropertyuri;ifvalue==null{downloadLog.setPropertyuri1n;else{zint count=Integer.parselntvalue;downloadLog.setProperty uri,String.valueOf++coiint;trydownloadLog.storenew FileWriterlogFile,;catch lOExceptione{e,printStackTrace;;}chain.doFilterreq,resp;}@Overridepublic voidinitFilterConfig configthrows ServletException{String appPath=config.getServletContext.getRealPathn/n;logFile=new FileappPath,HdownloadLog.txtn;if!logFile.exists{try logFile.createNewFile;catch lOException e{e.printStackTrace;}downloadLog=new Properties;try㊀downloadLog.loadnew FilReaderlogFile;}catch lOExceptione{e.printStackTrace;说明这里运用了规范中的注解来部署过滤器,当然也可以在中运用〉Servlet3web.xml filter和〈〉标签部署过滤器,如题中所示filter-mapping108监听器有哪些作用和用法?
107.答:开发中的监听器就是三个对象创建、销Java Weblistener application,session,request毁或者往其中添加修改删除属性时自动执行代码的功能组件,如下所示对上下文的创建和销毁进行监听©ServletContextListener:Servlet监听上下文属性的添加、删除和替换2ServletContextAttributeListener:Servlet
③对的创建和销毁进行监听SessionListener:Session补充的销毁有两种状况超时可以在中通过session
1.session web.xml session-标签配置超时时间;通过调用对象的方法config/session-timeout
2.session invalidate使失效session
④对对象中属性的添加、删除和替换进行监听SessionAttributeListener:Session对恳求对象的初始化和销毁进行监听©ServletRequestListener:对恳求对象属性的添加、删除和替换进行监听©ServletRequestAttributeListener:下面是一个统计网站最多在线人数监听器的例子import javax.servlet.ServletContextEvent;import javax.servlet.ServletContextListener;import javax.servlet.annotation.WebListener;★上下文监听器,在服务器启动时初始化和两个变量/*onLineCount maxOnLineCount并将其置于服务器上下文中,其初始值都是ServletContext0*/@WebListenerpublic classInitListener implementsServletContextListener{@0verridepublic voidcontextDestroyedServletContextEvent evt{}©Overridepublic voidcontextInitial!zedServletContextEvent evt{evt.getServletContext.setAttributeonLineCount,0;evt.getServletContext.setAttributemaxOnLineCountn,0;import java.text.DateFormat;import java.text.SimpleDateFormat;import java.util.Date;import javax.servlet.ServletContext;import javax.servlet.annotation.WebListener;import javax.servlet..SessionEvent;import javax.servlet..SessionListener;★★会话监听器,在用户会话创建和销毁的时候依据状况/修改和的值onLineCount maxOnLineCount*/@WebListenerpublic classMaxCountListener implementsSessionListener©Overridepublic voidsessionCreated SessionEventevent{ServletContext ctx=event.getSession.getServletContext;int count=Integer.parselntctx.getAttributeonLineCount.toString;count++;ctx.setAttributenonLineCountn,count;int maxOnLineCount=Integer.parselntctx.getAttributenmaxOnLineCount.toString;if countmaxOnLineCount{ctx,setAttributemaxOnLineCount count;rDateFormat df=new SimpleDateFormatnyyyy-MM-dd HH:mm:ssn;ctx.setAttributedate”,df.formatnew Date;@Overridepublic voidsessionDestroyed SessionEventevent{ServletContext app=event.getSession.getServletContext;int count=Integer.parselntapp.getAttributeonLineCount.toStr ing;count--;app•setAttributenonLineCountH,count;说明这里运用了规范中的@比世「注解配置监听器,当然你可以在Servlet300516web.xml文件中用〈〉标签配置监听器,如题中所示listener
108、文件中可以配置哪些内容?108web.xml答用于配置应用的相关信息,如监听器、过滤器、web.xml Weblistener filterServlet相关参数、会话超时时间、平安验证方式、错误页面等,下面是一些开发中常见的配置
①配置上下文加载监听器加载配置文件并创建容器Spring SpringIoCcontext-paramparam-namecontextConfigLocation/param-nameparam-valueclasspath:applicationcontext.xml/param-value/context-paramlistenerlistener-class〉V/listener-class/listener
②配置的过滤器来解决延迟加载和会话关闭的冲突Spring OpenSessionlnViewHibernatefilterfilter-nameopenSessionInView/filter-namefilter-class/filter-class/filterfilter-mappingfilter-nameopenSession!nView/filter-nameurl-pattern/*/url-pattern/filter-mapping
③配置会话超时时间为分钟10session-configsession-timeout10/session-timeout/session-config
④配置和的错误页面404Exceptionerror-pageerror-code404/error-codelocation/error.j sp/location/error-pageerror-pageexception-typex/exception-typelocation/error.j sp/location/error-page
⑤配置平安认证方式security-constraintweb-resource-collectionweb-resource-nameProtectedArea/web-resource-nameurl-pattern/admin/*/Lirl-pattern〉-methodGET/-method-methodPOST/-method/web-resource-collection〉th-constraintrole-nameadmin/role-name/auth-constraint/security-constraintlogin-configauth-methodBASIC/auth-method/login-configsecurity-rolerole-nameadmin/role-name/security-role说明对(小服务)、(监听器)和(过滤器)等组件的配置,Servlet ListenerFilter WebServlet规范供应了基于注解的配置方式,可以分别运用、3@WebServlet@WebListener@WebFilterx注解进行配置补充假如供应了有价值的商业信息或者是敏感数据,那么站点的平安性就是必需考虑的问Web题平安认证是实现平安性的重要手段,认证就是要解决的问题Are youwho yousay youare认证的方式特别多,简洁说来可以分为三类一口令A.What youknow数字证书(盾、密保卡)B.What youhave—U指纹识别、虹膜识别C.Who youare—在中可以通过建立平安套接字层()以及通过基本验证Tomcat SecureSocket Layer,SSL、你的项中运用过哪些标签109JSTL或表单验证来实现对平安性的支持答项目中主要运用了的核心标签库,包括、、JSTL c:if c:choose c:when c:x、等,主要用于构造循环和分支结构以限制显示逻辑otherwise,c:forEach()方法获得),并且这样也有助于隐藏实际的链接;在有些状况下,比getRequestDispatcher如须要访问一个其它服务器上的资源,则必需运用重定向(通过对象调用其ServletResponse()方法实现)sendRedirect有哪些内置对象?作用分别是什么?
99.JSP答有个内置对象JSP9-封装客户端的恳求,其中包含来自或恳求的参数;request:GET POST-:封装服务器对客户端的响应;response-通过该对象可以获得其他对象;pageContext:-:封装用户会话的对象;session-封装服务器运行环境的对象;application:-:输出服务器响应的输出流对象;out-应用的配置对象;config:Web-页面本身(相当于程序中的);page:JSP Javathis-封装页面抛出异样的对象exception:补充假如用来生成网页中的动态内容无疑是特别繁琐的工作,另一方面,全部的文本和Servlet标签都是硬编码,即使做出微小的修改,都须要进行重新编译解决了的这些HTML JSP Servlet问题,它是很好的补充,可以特地用作为用户呈现视图(),而作为限制器Servlet ViewServlet()特地负责处理用户恳求并转发或重定向到某个页面基于的开发许多Controller Java Web都同时运用了和页面其实是一个能够运行的服务器(Servlet JSP JSP Servlet,Servlet ServletO容器)通常也是容器,可以供应页面的运行环境,就是一个容器JSP JSP Tomcat Servlet/JSP,第一次恳求一个页面时容器首先将页面转换成一个页面的实现类,JSP Servlet/JSP JSPJSP这是一个实现了接口或其子接口的类接口是的子接JspPage JspPageJava JspPageServlet口,因此每个页面都是一个转换胜利后,容器会编译类,之后容器加载和实JSP ServletServleto例化字节码,并执行它通常对所做的生命周期操作对同一个页面的后续恳求,Java Servlet JSP容器会查看这个页面是否被修改过,假如修改过就会重新转换并重新编译并执行假如没有则JSP执行内存中已经存在的实例我们可以看一段代码对应的程序就知道一切了,ServletJSP Java而且个内置对象的神奇面纱也会被揭开9页面JSP-%@page pageEncoding=nUTF-8n%%String path=request.getContextPath;说明虽然标签库供应了、、、等标签库,但是实际开发中建议只运用核JSTL coresql fmtxml心标签库(),而且最好只运用分支和循环标签并辅以表达式语言(),这样才能真正做到core EL运用标签库有什么好处?如何定义标签110,JSP数据显示和业务逻辑的分别,这才是最佳实践答运用标签库的好处包括以下几个方面-分别页面的内容和逻辑,简化了开发;JSP Web-开发者可以创建自定义标签来封装业务逻辑和显示逻辑;-标签具有很好的可移植性、可维护性和可重用性;)-避开了对(小脚本的运用(许多公司的项目开发都不允许在中书写小脚本)自Scriptlet JSP定义标签包括以下几个步骤JSP-编写一个类实现实现接口(开发中通常不干脆实现这些接口Java Tag/BodyTag/IterationTag)而是继承类,这是对缺省适配模式的应用,TagSupport/BodyTagSupport/SimpleTagSupport重写()等方法,定义标签要完成的功能doStartTagO.doEndTag-编写扩展名为的标签描述文件对自定义标签进行部署,文件通常放在文件夹tld tldWEB-INF下或其子书目中-在页面中运用指令引用该标签库JSP taglib面是一个自定义标签库的例子F步骤-标签类源代码1TimeTag.java:package com.jackfrued.tags;import java.io.lOException;import java.text.SimpleDateFormat;import java.util.Date;import javax.servlet.jsp.JspException;import javax.servlet.j sp.JspWriter;import javax.servlet.j sp.tagext.TagSupport;public classTimeTag extendsTagSupport{private staticfinal longserialVersionUID=IL;private Stringformat=nyyyy-MM-dd hh:mm:ssH;;private StringforeColor=black”private StringbackColor=white;public intdoStartTagthrows JspException{SimpleDateFormat sdf=new SimpleDateFormatformat;JspWriter writer=pageContext.getOut;StringBuilder sb=new StringBuilder;〈sb.appendString.format spanstyle=1color:%s;background-color:%s1%s/spannzforeColor,backColor,sdf.formatnew Date;try writer.printsb.toString;}catch lOExceptione{e.printStackTrace;}return SKIP_BODY;public voidsetFormatString format{this.format=format;public voidsetForeColorString foreColor{this.foreColor=foreColor;public voidsetBackColorString backColor{this.backColor=backColor;步骤-编写标签库描述文件2my.tld:xml version=
1.0encoding=nUTF-8taglib xmlns=n://java.sun/xml/ns/j2eenxmlns:xsi=n w
3.org/2023/XMLSchema-instancexsi:schemaLocation=://java.sun/xml/ns/j2ee/web-j sptaglibrary_2_
0.xsdn version=n
2.0㊀〉定义标签库〈〉cd scription/descriptiontlib-versionl.0/tlib-versionshort-nameMyTag/short-nametagnametime/nametag-class/tag-classbody-contentempty/body-content〈〉attributenameformat/namerequiredfalse/required〈〉/attributeattributenameforeColor/name/attribute〈〉attributenamebackColor/name〈〉/attribute/tag/taglib步骤-在页面中运用自定义标签3JSP%@page pageEncoding=nUTF-8%%@taglib prefix=myHuri=n/WEB-INF/tld/my.tld%%()String path=request.getContextPath;()()String basePath=request.getScheme+n://+request.getServerName+““+()request.getServerPort+path+%!DOCTYPE htmlhtmlheadbasehref=n%=basePath%n㊀》首页〈〉vtitl/title〉style type=text/css”*{font-family:Arial;font-size:72px;}/style/head〈〉bodymy:time format=Hyyyy-MM-ddHbackColor=nbluenforeColor=nyellowH//body/html提示假如要将自定义的标签库发布成文件,须要将标签库描述文件(文件)放在JAR tldJAR文件的书目下,可以中的工具完成文件的生成,假如不清晰如何操作,META-INF JDKjar JAR可以请教谷老师和百老师说一下表达式语言()的隐式对象及其作用
111.EL答:的隐式对象包括(访问上下文参数)、(访问恳求参数)、EL pageContextinitParam param(访问恳求头)、(访问)、paramValues.header headerValues.cookie cookie(访问作用域)、(访问作用域)、applicationscope applicationsessionScope session(访问作用域)、(访问彳乍用域)requestscope requestpageScope page用法如下所示${pageContext.request.method}${pageContext[request][method”]}${pageContext.request[method]}${pageContext[request].method}${initParam.defaultEncoding}${header[naccept-language**]}${headervalues[naccept-languagen]
[0]}${cookie.j sessionid.value}${sessionScope.loginUser.username}补充表达式语言的.和口运算作用是一样的,唯一的差别在于假如访问的属性名不符合标识Java符命名规则,例如上面的就不是一个有效的标识符,那么这时候就只能accept-language Java用口运算符而不能运用.运算符获得它的值表达式语言()支持哪些运算符?112,EL答除了和口运算符,还供应了•EL算术运算符+、-、*、/或、%或-div018关系运算符==或、!=或、>或>(或、<=或匕-eq ne9t=n£ge Itx逻辑运算符或、||或、!或-and ornot条件运算符(跟的条件运算符类似)-${statement A:B}Java运算符检查一个值是否为或者空(数组长度为或集合中没有元素也返回)-empty null0true?开发的和分别指的是什么
113.Java WebModel1Model2答是以页面为中心的开发,运用技术将页面显示逻辑和业Model1Java WebJSP+JavaBean务逻辑处理分开,实现页面显示,对象用来保存数据和实现业务逻辑JSP JavaBean是基于(模型-视图-限制器,)架构模式的开发模型,Model2MVC Model-View-Controller实现了模型和视图的彻底分别,利于团队开发和代码复用,如下图所示中的异步处理指的是什么?
114.Servlet3答在中引入了一项新的技术可以让异步处理恳求有人可能会质疑,既然都Servlet3Servlet有多线程了,还须要异步处理恳求吗?答案是确定的,因为假如一个任务处理时间相当长,那么或会始终占用着恳求处理线程直到任务结束,随着并发用户的增加,容器将会遭受Servlet Filter线程超出的风险,这这种状况下许多的恳求将会被积累起来而后续的恳求可能会遭受拒绝服务,直到有资源可以处理恳求为止异步特性可以帮助应用节约容器中的线程,特殊适合执行时间长而且用户须要得到结果的任务,假如用户不须要得到结果则干脆将一个对象交给Runnable Executor并马上返回即可(假如不清晰多线程和线程池的相关内容,请查看《面试题全集(上)》Java关于多线程和线程池的部分或阅读我的另一篇文章《关于并发编程的总结和思索》)Java补充多线程在诞生初期无疑是一个亮点,而单实例多线程的工作方式也曾为其赢Java Servlet得美名,然而技术的发展往往会颠覆我们许多的认知,就犹如当年爱因斯坦的相对论颠覆了牛顿的经典力学一般事实上,异步处理绝不是首创,假如你了解的话,对Serlvet3Node.js Servlet的这个重要改进就不以为奇了3下面是一个支持异步处理恳求的的例子Servletimport java.io.lOException;import javax.servlet.AsyncContext;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.Servlet;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;BROWSER@WebServleturlPatterns={/async},asyncSupported=truepublic classAsyncServlet extendsServletprivate staticfinal longserialVersionUID=IL;Overridepublic voiddoGet ServletRequestreq,ServletResponse respthrowsServletException,lOException开启异步支持//Tomcat Servletreq.setAttributenorg.apache.catalina.ASYNC_SUPPORTEDn,true;启动异步处理的上下文final AsyncContextctx=req.startAsync;////ctx.setTimeout30000;ctxestartnew Runnable{@Overridepublic voidrun{在此处添加异步处理的代码//ctx plete;;}如何在基于的项目中实现文件上传和下载?
115.Java Web答在以前,中没有支持上传功能的因此要实现上传功能须要引入第三Sevlet3Servlet APIAPI,方工具从恳求中获得上传的附件或者通过自行处理输入流来获得上传的文件,我们举荐运用POST的Apache commons-fileupload„从起先,文件上传变得无比简洁,信任看看下面的例子一切都清晰了Servlet3上传页面index.jsp:%@page pageEncoding=nutf-8%!DOCTYPE htmlhtmlheadmeta-equiv=nCon tent-Type11content=ntext/html;charset=UTF-8ntitlePhoto Upload/title/headbody hlSelectyour photoand upload/hlhr/div style=ncolor:red;font-size:14px;n${hint}/div〉form action=UploadServlet method=Hpostn enctype=multipart/form-data”Photo file:input type=nfile name=nphoton/input type=nsubmitnvalue=nUploadn//form/body/html支持上传的Servlet:package com.jackfrued.servlet;import java.io.lOException;import javax.servlet.ServletException;import javax.servlet.annotation.MultipartConfig;import javax.servlet.Servlet;import javax.servlet.ServletRequest;import javax.servlet.annotation.WebServlet;import javax.servlet.,Part;importsponse;@WebServletn/UploadServletn@MultipartConfigpublic classUploadServlet extendsServlet{private staticfinal longserialVersionUID=IL;protected voiddoPost ServletRequestrequest,ServletResponse response throwsServletException,lOExcep tion{可以用㊀㊀方法获得名为的上传附件也可以用㊀㊀获得//r quest.g tPartphot//r quest.g tParts全部上传附件多文件上传然后通过循环分别处理每一个上传的文件//Part part=request.getPartnphoton;>if part!=nullpart.getSubmittedFileName.length0{用对象的方法获得上传文件夹的确定路径//ServletContext getRealPathString savePath=request.getServletContext.getRealPathH/up load;规范中可以用对象的方法获得上传的文件名//Servlet
3.1Part getSubmittedFileName更好的做法是为上传的文件进行重命名避开同名文件的相互覆盖//part.writesavePath+n/n+part.getSubmittedFileName;,request.setAttributehint UploadSuccessfully!”;}else{request.setAttributehint,Upload failed!”;}跳转回到上传页面//request.getRequestDispatchernindex.j spn.forwardrequest,respons e;、服务器收到用户提交的表单数据,究竟是调用的还是方法?116Servlet doGetdoPost答的<>元素有一个属性,用来指定提交表单的方式,其值可以是HTML formmethod get或我们自定义的一般状况下会重写或两个方法之一或全部,假post ServletdoGet doPosto如是恳求就调用方法,假如是恳求就调用方法,那为什么为什么这GET doGetPOST doPost样呢?我们自定义的通常继承自继承自并重写了其中的ServletServlet,Servlet GenericServlet方法,这个方法是接口中定义的service Servlet重写的方法会先获得用户恳求的方法,然后依据恳求方法调用、Servlet servicedoGet doPostx等方法,假如在自定义中重写了这些方法,那么明显会调用重写过doPut doDeleteServletx的自定义的方法,这明显是对模板方法模式的应用假如不理解,请参考阎宏博士的《及模Java式》一书的第章当然,自定义中也可以干脆重写方法,那么不管是哪种37Servlet service方式的恳求,都可以通过自己的代码进行处理,这对于不区分恳求方法的场景比较合适中的静态包含和动态包含有什么区分?
117.JSP答静态包含是通过的指令包含页面,动态包含是通过标准动作JSP includeJSP jsp:forward包含页面静态包含是编译时包含,假如包含的页面不存在则会产生编译错误,而且两个页面的“属性应保持一样,因为两个页面会合二为一,只产生一个文件,因此被包contentType”class含页面发生的变动再包含它的页面更新前不会得到更新动态包含是运行时包含,可以向被包含的页面传递参数,包含页面和被包含页面是独立的,会编译出两个文件,假如被包含的页面class不存在,不会产生编译错误,也不影响页面其他部分的执行代码如下所示静态包含%〉%----%@include file=n...%动态包含%——%jsp:include page=n...njsp:param name=n...value=n...n/〉/j sp:include中如何获得用户提交的查询参数或表单数据?
118.Servlet答可以通过恳求对象的方法通过参数名获得参数值假如有ServletRequest getParameter包含多个值的参数例如复选框,可以通过恳求对象的方法获得当然也可以通过恳求对象的获得一个参getParameterValues getParameterMap数名和参数值的映射叩M中如何获得用户配置的初始化参数以及服务器上下文参数?
119.Servlet答可以通过重写接口的方法并通过对象的Servlet initServletConfigServletConfig方法来获得的初始化参数可以通过对象的getlnitParameter ServletServletConfig方法获得对象,并通过该对象的方法getServletContext ServletContextgetInitParameter来获得服务器上下文参数当然,对象也在处理用户恳求的方法如方法ServletContext doGet中通过恳求对象的方法来获得getServletContextString basePath=request.getScheme++request.getServerName++request.getServerPort+path+%!DOCTYPE htmlhtmlheadbasehref=n%=basePath%n㊀〉首页〈〉it1/titlestyle type=ntext/cssn*{font-family:nArial;}/style/headbodyhlHello World!/hlzhr/h2Current timeis:%=new java.util.Date.toStringO%/h2/body/html对应的代码Java/**Generated bythe Jaspercomponent ofApache TomcatGeneratedNote:The last modified time of thisfile wasset tothelastmodifiedtimeofthe sourcefile afterat:2023-10-1313:28:38UTCgeneration toassist withmodification tracking.如何设置恳求的编码以及响应内容的类型?
120.答通过恳求对象()的()方法可以设置恳求的ServletRequest setCharacterEncodingString编码,其实要彻底解决乱码问题就应当让页面、服务器、恳求和响应、程序都运用统一的编Java码,最好的选择当然是;通过响应对象()的()UTF-8ServletResponse setContentTypeString方法可以设置响应内容的类型,当然也可以通过对象的(ServletResponsed setHeaderString,)方法来设置String说明现在假如还有公司在面试的时候问的声明标记、表达式标记、小脚本标记这些内容的JSP,话,这样的公司也不用去了其实内置对象、指令这些东西基本上都可以忘却了,关于JSPJSP开发的相关学问,可以看一下我的《思维导图》,上面有完整的学问点Java WebServletJSP的排列想了解如何实现自定义框架的,可以看一下我的《自定义框架详MVC Java Web MVC解》、说明一下网络应用的模式及其特点121答典型的网络应用模式大致有三类、、其中代表阅读器().B/S C/S P2P BBrowser代表客户端()、代表服务器()是对等模式,不区分客户端和服务器C ClientS Server,P2P应用模式中可以视为特殊的应用模式,只是将应用模式中的特殊的客户端换成了阅B/S C/S C/S读器,因为几乎全部的系统上都有阅读器,那么只要打开阅读器就可以运用应用,没有安装、配置、升级客户端所带来的各种开销应用模式中,成千上万台彼此连接的计算机都处于对等的地P2P位,整个网络一般来说不依靠专用的集中服务器网络中的每一台计算机既能充当网络服务的恳求者,又对其它计算机的恳求作出响应,供应资源和服务通常这些资源和服务包括信息的共)享和交换、计算资源(如的共享、存储共享(如缓存和磁盘空间的运用)等,这种应用模CPU式最大的阻力平安性、版本等问题,目前有许多应用都混合运用了多种应用模型,最常见的网络视频应用,它几乎把三种模式都用上了补充此题要跟电子商务模式区分开,因为有许多人被问到这个问题的时候立刻想到的是B2B(如阿里巴巴)、(如当当、亚马逊、京东)、(如淘宝、拍拍)、(如威客)、B2C C2C C2B(如美团、饿了么)对于这类问题,可以去百度上面科普一下
020、什么是(服务)122Web ServiceWeb答从表面上看,就是一个应用程序,它向外界暴露出一个能够通过进行调Web ServiceWeb用的这就是说,你能够用编程的方法透亮的调用这个应用程序,不须要了解它的任何细微环API0节,跟你运用的编程语言也没有关系例如可以创建一个供应天气预报的,那么无论Web Service你用哪种编程语言开发的应用都可以通过调用它的并传入城市信息来获得该城市的天气预报API之所以称之为,是因为它基于协议传输数据,这使得运行在不同机器上的不同应用Web Service无须借助附加的、特地的第三方软件或硬件,就可相互交换数据或集成补充这里必须要提及的一个概念是面对服务的架构,SOAService-Oriented Architecture,是一种思想,它将应用程序的不同功能单元通过中立的契约联系起来,独立于硬件平台、操SOA作系统和编程语言,使得各种形式的功能单元能够更好的集成明显,是的一Web ServiceSOA种较好的解决方案,它更多的是一种标准,而不是一种详细的技术概念说明、
123.SOAP WSDL.UDDIO答:简洁对象访问协议是中交换数据的-SOAP SimpleObject AccessProtocol,Web Service一种协议规范服务描述语言它描述了服务的公-WSDL:Web Web Service DescriptionLanguage,Web共接口这是一个基于的关于如何及服务通讯和运用的服务描述;也就是描述及书目XML Web中列出的服务进行交互时须要绑定的协议和信息格式通常采纳抽象语言描述该服务支持的Web操作和信息,运用的时候再将实际的网络协议和信息格式绑定给该服务:统一描述、发觉和集成它是一个-UDDI UniversalDescription,Discovery andIntegration,基于的跨平台的描述规范,可以使世界范围内的企业在互联网上发布自己所供应的服务简XML洁的说,是访问各种的一个门面可以参考设计模式中的门面模式UDDI WSDL提示关于的相关概念和学问可以在上找到相关的资料Web ServiceW3CSchool?、规范中和相关的规范有哪些124Java Web Service答规范中和相关的有三个JavaWebService:这个规范是早期的基于的规范的替代版本,-JAX-WSJSR224SOAP WebService JAX-RPC,它并不供应向下兼容性因为样式的以及相关的已经在中被移除了RPC WSDLAPI JavaEE5是的依靠规范,供应了基于注解配置和消息的相WS-MetaData JAX-WS WebService SOAP关APIO:定义了发送和接收消息所需的相当于的服务器端-JAXMJSR67API,WebService:是针对-JAX-RSJSR311JSR339JSR370Java RESTRepresentation State架构风格制定的一套规范是一种软件架构模式,是一种风格,它Transfer WebService REST不像那样本身承载着一种消息协议,两种风格的均采纳了做传输协议,因SOAP WebService为协议能穿越防火墙,的远程方法调用等是重量级协议,通常不能穿越防火墙,因Java RMI此可以将视为基于协议的软件架构中最重要的两个REST REST概念是资源定位和资源操作,而协议恰好完整的供应了这两个点协议中的可以URI完成资源定位,而、方法可以完成资源操作因此完全依靠GET POST.OPTION.DELETE REST协议就可以完成而不像协议那样只利用了的传输特性,定位和操作都是由WebService,SOAP协议自身完成的,也正是由于消息的存在使得基于的显得笨重SOAP SOAPSOAP WebService而渐渐被淘汰、介绍一下你了解的领域的框架125JavaWebService答:领域的框架许多,包括(的升级版本)JavaWebService Axis2Axis Jerseyx(的框架)、(的持续版本)、、、RESTful WebService CXFXFire HessianTurmeric JBoss等,其中绝大多数都是开源框架SOA提示面试被问到这类问题的时候确定选择自己用过的最熟识的作答,假如之前没有了解过就应当在面试前花一些时间了解其中的两个,并比较其优缺点,这样才能在面试时给出一个美丽的答案import javax.servlet.*;import javax.servlet.import javax•servlet.j sp.*;public finalclass indexj spextends orgimplementsorg{private staticfinal javax j spxFactory=javax;private staticjava.util.Mapj ava.lang.String,java.lang.Long_j spxdependants;package org.apache.jsp;private javax.el.ExpressionFactory elexpressionfactory;private orgj spinstancemanager;public java.util.Mapjava.lang.String,java.lang.Long getDependantsreturn_j spx_dependants;public voidj splnit{_el_expressionfactory=_j spxFactory.getJspApplicationContextgetservletConfig.getServletContext.getExpressionFactory;jspinstancemanager=org.getlnstanceManagergetServletConfigpublic voidj spDestroy{}public voidj spServicefinal javax request,final javaxresponsethrowsjava.io.lOException,javax.servlet.ServletException{内置对象就是在这里定义的final javaxpageContext;javax session=null;final javax.servlet.ServletContext application;final javax.servlet.ServletConfigconfig;javax out=null;finaljava.lang.Object page=this;javax_jspx_out=null;javax_jspx_page_context=null;try response.setContentTypentext/html;charset=UTF-8n;pageContext=_j spxFactory.getPageContextthis,request,respo nse,null,true,8192,true;_j spx_page_context=pageContext;application=pageContext.getServletContext;config=pageContext.getServletConfig;session=pageContext.getSession;out=pageContext.getOut;_j spx_out=out;out.write1\r f;・out write1\n*;String path=request.getContextPath;String basePath=request.getScheme++request.getSer;verName++request.getServerPort+path+n/以下代码通过输出流将标签输出到阅读器中//HTMLout.writen\r\nn;・out write\r\n;out.write!DOCTYPE html\r\nn;out.writenhtml\r\nn;out.write basehref=\nn;out.writenhead\r\nn;out.printbasePath;out.writen\n\r\nn;〈〉首页out.write title/title\r\n;out.write styletype=\text/css\n\r\nn;out.write\t*{font-family:\nArial\n;}\r\nn;out,writen/style\r\nn;out.write/head\r\nn;out.write\r\n;out•writebody\r\nn;out・write hlHelloWorld!/hl\r\nn;zout.writehr/\r\nn;out.write h2Current timeis:;out,printnew java.util.Date.toString;out.writen/h2\r\nn;out.write/body\r\n;out.writen/html\r\nn;}catch java.lang.Throwable t{if!t instanceofjavax{out j spx out;out!=nullout.getBufferSize!=0try{・out clearBuffer;}catch java.io.lOExceptione{if jspxpage context!=nulljspx pagecontext.handlePageExceptiont;elsethrow newServletExceptiont;}finally{()_j spxFactory.releasePageContext_jspx_page_context;)}}、和恳求的区分?100get post答
①恳求用来从服务器上获得资源,而是用来向服务器提交数据;get post
②,将表单中数据依据的形式,添加到所指向的后面并且两者get name=value action URL运用?连接,而各个变量之间运用连接;是将表单中的数据放在协议的恳求头或消息体中,post传递到所指向actionURL;
③(传输的数据要受到长度限制字节);而可以传输大量的数据,上传文get URL1024post件通常要运用方式;post
④运用时参数会显示在地址栏上,假如这些数据不是敏感数据,那么可以运用对于敏感get get;数据还是应用运用post;
⑤(运用类型的编码也叫百分号编get MIMEapplication/x-www-form-urlencoded URL%码)文本的格式传递参数,保证被传送的参数由遵循规范的文本组成,例如一个空格的编码是20”常用的服务器有哪些?
101.Web答和平台下运用最广泛的免费服务器是服务器,而平台的服Unix LinuxApache Windows务器通常运用作为服务器选择服务器应考虑的因素有性能、平安性、日志和HS Web Web统计、虚拟主机、代理服务器、缓冲服务和集成应用程序等下面是对常见服务器的简介的服务器产品,全称是是允许在公-IIS:Microsoft WebInternet InformationServices IIS0共或上发布信息的服务器是目前最流行的服务器产品之一,Intranet InternetWeb IISWeb许多著名的网站都是建立在的平台上供应了一个图形界面的管理工具,称为服HS nsInternet务管理器,可用于监视配置和限制服务是一种服务组件,其中包括服Internet IISWebWeb务器、服务器、服务器和服务器,分别用于网页阅读、文件传输、新闻服务和FTP NNTPSMTP邮件发送等方面,它使得在网络(包括互联网和局域网)上发布信息成了一件很简洁的事它供应()作为扩展服务器功能的编程接口;同时,它还供应一个ISAPI IntranetServer APIWeb数据库连接器,可以实现对数据库的杳询和更新服务器是一款Internet-Kangle:KangleWeb跨平台、功能强大、平安稳定、易操作的高性能服务器和反向代理服务器软件止矽卜,Web Kangle也是一款专为做虚拟主机研发的服务器实现虚拟主机独立进程、独立身份运行用户之间Web平安隔离,一个用户出问题不影响其他用户支持、、、、等多种PHP ASPASP.NET JavaRuby动态开发语言是功能完善、开放的应用程序服务器,是-WebSphere:WebSphere ApplicationServer Web电子商务安排的核心部分,它是基于的应用环境,用于建立、部署和管理和IBM JavaInternet应用程序,适应各种应用程序服务器的须要Intranet WebWeb是一款多功能、基于标准的应用服务器,为企业构建企业-WebLogic:WebLogic ServerWeb应用供应了坚实的基础针对各种应用开发、关键性任务的部署,各种系统和数据库的集成、跨协作等都供应了相应的支持由于它具有全面的功能、对开放标准的遵从性、Internet Weblogic多层架构、支持基于组件的开发等优势,许多公司的企业级应用都选择它来作为开发和部署的环境在使应用服务器成为企业应用架构的基础方面始终处于领先地位,为构建WebLogic Server集成化的企业级应用供应了稳固的基础目前仍旧是世界上用得最多的服务器,其市场占有率很长时间都保持在-Apache:Apache Web以上(目前的市场份额约左右)世界上许多著名的网站都是的产物,它的胜60%40%Apache利之处主要在于它的源代码开放、有一支强大的开发团队、支持跨平台的应用(可以运行在几乎全部的、系统平台上)以及它的可移植性等方面Unix Windows.Linux是一个开放源代码、运行和的容器实现了和-Tomcat:Tomcat ServletJSP TomcatServlet规范此外,还实现了规范而且比绝大多数商业应用软件服务器JSPTomcatApache-Jakarta要好,因此目前也有不少的服务器都选择了Web Tomcat:读作是一个高性能的和反向代理服务器,也是一个代-Nginx enginex,IMAP/POP3/SMTP理服务器是由为俄罗斯访问量其次的站点开发的,第一个公开版Nginx IgorSysoev Rambler本发布于年月日其将源代码以类许可证的形式发布,因它的稳定性、丰富的2023104BSD功能集、示例配置文件和低系统资源的消耗而著名在年下半年,的市场份额达到2023Nginx了14%、和是什么关系?102JSP Servlet答其实这个问题在上面已经阐述过了,是一个特殊的程序,它运行于服务器的Servlet JavaJVM中,能够依靠服务器的支持向阅读器供应显示内容本质上是的一种简易形式会JSP ServletJSP被服务器处理成一个类似于的程序,可以简化页面内容的生成和最Servlet JavaServletJSP主要的不同点在于,的应用逻辑是在文件中,并且完全从表示层中的分别开Servlet Java HTML来而的状况是和可以组合成一个扩展名为的文件有人说,就是JSPJavaHTML jspServlet在中写而就是在中写代码,当然这个说法是很片面且不够精确的JavaHTML,JSP HTMLJava侧重于视图,更侧重于限制逻辑,在架构模式中,适合充当视图()JSP ServletMVC JSPview而适合充当限制器()Servlet controller0讲解中的四种作用域
103.JSP答:中的四种作用域包括、和详细来说:JSP pagerequest,session application,-代表及一个页面相关的对象和属性page-代表及客户机发出的一个恳求相关的对象和属性一个恳求可能跨越多个页面,request Web涉及多个组件;须要在页面显示的临时数据可以置于此作用域Web-代表及某个用户及服务器建立的一次会话相关的对象和属性跟某个用户相关的数据应session当放在用户自己的中session-叩代表及整个应用程序相关的对象和属性,它实质上是跨越整个应用程plication WebWeb序,包括多个页面、恳求和会话的一个全局作用域
104、如何实现或的单线程模式?JSP Servlet答对于页面,可以通过指令进行设置JSP page%@page isThreadSafe=,,false,z%对于可以让自定义的实现标识接口Servlet,Servlet SingleThreadModel说明假如将或设置成单线程工作模式,会导致每个恳求创建一个实例,这JSPServletServlet种实践将导致严峻的性能问题(服务器的内存压力很大,还会导致常见的垃圾回收),所以通常状况下并不会这么做、实现会话跟踪的技术有哪些?105答由于协议本身是无状态的,服务器为了区分不同的用户,就须要对用户会话进行跟踪,简洁的说就是为用户进行登记,为用户安排唯一的下一次用户在恳求中包含此服务器据此ID,ID,推断究竟是哪一个用户
①重写在中添加用户会话的信息作为恳求的参数,或者将唯一的会话添加到URL URLID URL结尾以标识一个会话
②设置表单隐藏域将和会话跟踪相关的字段添加到隐式表单域中,这些信息不会在阅读器中显示但是提交表单时会提交给服务器这两种方式很难处理跨越多个页面的信息传递,因为假如每次都要修改或在页面中添加隐式URL表单域来存储用户会话相关信息,事情将变得特别麻烦。