学习思路如下:
三、Java web编程部分—题目
❤1、web编程基础
1、启动项目时如何实现不在链接里输入项目名就能启动?
2、1分钟之内只能处理1000个请求,你怎么实现,手撕代码?
3、什么时候用assert
4、JAVA应用服务器有那些?
5、JSP的内置对象及方法。
6、JSP和Servlet有哪些相同点和不同点,他们之间的联系是什么?(JSP)
7、说一说四种会话跟踪技术
8、讲讲Request对象的主要方法
9、说说weblogic中一个Domain的缺省目录结构?比如要将一个简单的helloWorld.jsp放入何目录下,然后在浏览器上就可打入主机?
10、jsp有哪些动作?作用分别是什么?
11、请谈谈JSP有哪些内置对象?作用分别是什么?
12、说一下表达式语言(EL)的隐式对象及其作用
13、JSP中的静态包含和动态包含有什么区别?
14、过滤器有哪些作用和用法?
15、请谈谈你对Javaweb开发中的监听器的理解?
16、说说web.xml文件中可以配置哪些内容?
答案部分:1)web编程基础
参考—https://blog.csdn.net/qq_38977097/article/details/88853266
1、启动项目时如何实现不在链接里输入项目名就能启动?
答:如图所示
2、1分钟之内只能处理1000个请求,你怎么实现,手撕代码?
答:
a)Application 对所有用户访问的次数计数。 同时定义一个计时器,单位为一分钟。如果Application 中的用户在单位时间内超出请求次数,就拒绝处理该请求,一分钟再刷新application的值为0。
- 使用一个Map 维护变量:
- 我们只需要在单位计数中判断 List中数量是否超出限制即可。
// 泛型 String 表示用户标识,List中存放用户不同请求的时间戳。
private Map<String, List<Long>> map = new ConcurrentHashMap<>();
b)使用 aop 实现请求的限制,在需要限制的请求方法上加上 aop 逻辑。 即可实现,思路如下:
- 自定义注解类实现请求限制的拦截逻辑,在需要限制的方法上使用注解,超出限制后拒绝处理请求。
3、什么时候用assert?
答:assertion(断言)在软件开发中是一种常用的调试方式,很多开发语言中都支持这种机制。
- 在实现中,assertion就是在程序中的一条语句:
- 1)它对一个boolean表达式进行检查,一个正确程序必须保证这个boolean表达式的值为true;如果该值为false,说明程序已经处于不正确的状态下,系统将给出警告或退出。一般来说,assertion用于保证程序最基本、关键的正确性.assertion检查通常在开发和测试时开启。为了提高性能,在软件发布后,assertion检查通常是关闭的。
4、JAVA应用服务器有那些?
答:Java 的应用服务器很多,从功能上分为两大类,JSP 服务器和 Java EE 服务器,也可分其他小类。相对来说 Java EE 服务器的功能更加强大,市场最常使用Tomcat。
- JSP 服务器: Tomcat 、Bejy Tiger 、Geronimo 、 Jetty 、Jonas 、Jrun 、Orion 、Resin。
- Java EE 服务器有TongWeb 、BES Application Server 、 Apusic Application Server 、 IBM Websphere 、Sun Application Server 、Oracle 的 Oracle9i/AS 、Sun Java System Application Server 、Bea Weblogic 、JBoss、开源GlassFish。(来源自百度百科)
5、JSP的内置对象及方法。
答:
-
1)out:
println():向客户端输出各种类型的数据
newLine():输出一个换行符
close():关闭输出流
fiush():输出缓冲区数据
clearBuffer():清除缓冲区数据,并且把数据输出到客户端
clear():清除缓冲区数据,但是不把数据输出到客户端
getBufferSize():返回缓冲区大小 -
2)request:
getMethod():返回客户端向服务器端传送数据的方法
getParameter(String paramName):返回客户端传向服务器端传递的参数值
getParameterNames():获得客户端传递给服务器端的所有参数的名字
getParameterValues(String name):获得指定参数的所有值
getRequestURL():获得发出请求字符串的客户端地址
getRemoteAddr():获取客户端iPhone地址
getRemoteHost():获取客户端机器名称
getServerName():获取服务器名字
getServletName():客户端所请求的脚本文件路径
getServerPort():获取服务器端端口
对应的类为:javax.servlet.http.HttpServletRequest -
3)response:
addCookie(Cookie cookie):添加一个Cookie对象,用于在客户端保存特定的信息
addHeader(String name, String value):添加HTTP头信息,该Header信息将发送到客户端
containsHeader(String name):判断指定名字的HTTP头文件是否存在
sendError(int):向客户端发送错误信息,int指服务器的错误码
sendRedirect(String url):重定向jsp文件,jsp:forward是同一个request在服务器内部转发,sendRedirect是通过客户端发起二次申请,是不同的request对象
setContentType(String contentType):设置MIME类型与编码方式 -
4)session:
void setAttribute(String name, Object value)
Object getAttribute(String name)
boolean isNew() -
5)application:
getAttribute(java.lang.String name)
setAttribute(java.lang.String name, java.lang.Object object)
属于javax.servlet.ServletContext类 -
6)exception:
7)pageContext、config、page这3个用得比较少,了解即可
6、JSP和Servlet有哪些相同点和不同点,他们之间的联系是什么?(JSP)
答:
- 相同点: JSP和Servlet本质上都是Java类。
- 不同点: JSP侧重于视图,Servlet主要用于控制逻辑。
Servlet中没有内置对象,Jsp中的内置对象都是必须通过HttpServletRequest对象,HttpServletResponse对象以及HttpServlet对象获得。 - 联 系: JSP是Servlet技术的扩展,本质上就是Servlet的简易方式。
7、说一说四种会话跟踪技术
答:
- 1)会话:
会话是指一个终端用户(服务器)与交互系统(客户端)进行通讯的过程。 - 2)会话跟踪:
对同一个用户对服务器的连续的请求和接受响应的监视(将用户与同一用户发出的不同请求间关联,数据共享) - 3)为什么需要会话跟踪:
浏览器与服务器之间的通信是通过HTTP协议进行通信的,而HTTP协议是”无状态”的协议,它不能保存客户的信息,即一次响应完成之后连接就断开了,下一次的请求需要重新连接,这样就需要判断是否是同一个用户,所以才应会话跟踪技术来实现这种要求。 - 3)四种会话跟踪技术:
A)URL重写:
URL(统一资源定位符)是Web上特定页面的地址,URL地址重写的原理是将该用户Session的id信息重写 到URL地址中,以便在服务器端进行识别不同的用户。URL重写能够在客户端停用cookies或者不支持cookies的时候仍然能够发挥作用。
B)隐藏表单域:
将会话ID添加到HTML表单元素中提交到服务器,此表单元素并不在客户端显示,浏览时看不到,源代码中有。
C)Cookie:
Cookie是Web服务器发送给客户端的一小段信息,客户端请求时可以读取该信息发送到服务器端,进而进行用户的识别。对于客户端的每次请求,服务器都会将Cookie发送到客户端,在客户端可以进行保存,以便下次使用。 服务器创建保存于浏览器端,不可跨域名性,大小及数量有限。客户端可以采用两种方式来保存这个Cookie对象,一种方式是 保存在 客户端内存中,称为临时Cookie,浏览器关闭后 这个Cookie对象将消失。另外一种方式是保存在 客户机的磁盘上,称为永久Cookie。以后客户端只要访问该网站,就会将这个Cookie再次发送到服务器上,前提是 这个Cookie在有效期内。 这样就实现了对客户的跟踪。Cookie是可以被禁止的。
D)Session:
每一个用户都有一个不同的session,各个用户之间是不能共享的,是每个用户所独享的,在session中可以存放信息。 保存在服务器端。需要解决多台服务器间共享问题。如果Session内容过于复杂,当大量客户访问服务器时可能会导致内存溢出。因此,Session里的信息应该尽量精简。
在服务器端会创建一个session对象,产生一个sessionID来标识这个session对象,然后将这个sessionID放入到Cookie中发送到客户端,下一次访问时,sessionID会发送到服务器,在服务器端进行识别不同的用户。
Session是依赖Cookie的,如果Cookie被禁用,那么session也将失效。
8、讲讲Request对象的主要方法
答:Request对象是当客户端向服务器端发送请求时,服务器为本次请求创建request对象,并在调用Servlet的service方法时,将该对象传递给service方法。Request对象中封装了客户端发送过来的所有的请求数据。
- Request对象的类型是HttpServletRequest,该类中定义了很多与http协议相关的方法,比如获取请求头信息,请求方式,客户端ip地址等信息。
- 下面是常用的API的Request获取请求参数方法:
String getParameter(String name)
获取指定名称的请求参数值,适用于单值的请求参数
String[] getParameterValues(String name)
获取所有的请求参数名称
Map<String,String[]> getParameterMap()
获取所有请求参数,其中参数名作为map的key,参数值作为map的value
9、说说weblogic中一个Domain的缺省目录结构?比如要将一个简单的helloWorld.jsp放入何目录下,然后在浏览器上就可打入主机?
答:
- 1) Domain目录服务器目录applications,将应用目录放在此目录下将可以作为应用访问;
- 2) 如果是Web应用,应用目录需要满足Web应用目录要求,jsp文件可以直接放在应用目录中,Javabean需要放在应用目录的WEB-INF目录的classes目录中;
- 3) 设置服务器的缺省应用将可以实现在浏览器上无需输入应用名。
10、jsp有哪些动作?作用分别是什么?
答:JSP共有以下6种基本动作,作用如下:
- jsp:useBean: 寻找或者实例化一个JavaBean。
- jsp:setProperty: 设置JavaBean的属性。
- jsp:getProperty: 输出某个JavaBean的属性。
- jsp:plugin: 根据浏览器类型为Java插件生成OBJECT或EMBED标记。
- jsp:forward: 把请求转到一个新的页面。
- jsp:include: 在页面被请求的时候引入一个文件。
includ两种方法的实现 :动态,静态
1)动态:用于包含动态页面,并且可以随时检查页面的变化,采用jsp:include动作可以实现,例如:
<jsp:includepage="***.jsp" flush="true"/>
2)静态:适合于包含静态页面,不检查页面的变化,采用include伪码实现
<%@include file="***.html"%>
11、请谈谈JSP有哪些内置对象?作用分别是什么?
答:JSP共有以下9种基本内置组件
- 1)request对象 客户端请求,此请求会包含来自GET/POST请求的参数,通过它能了解到客户需求,做出响应。
- 2)response对象 它包含响应客户请求的有关信息。
- 3)session对象 它指的是客户端与服务器的一次会话,从客户端连到服务器的一个WebApplication开始,直到客户端与服务器断开连接为止。
- 4)out对象 它是JspWriter类的实例,是向客户端输出内容常用的对象。
- 5)page对象 它是指向当前JSP页面本身,有点象类中的this指针,它是 Java.lang.Object类的实例。
- 6)application对象 实现了用户间数据的共享,可存放全局变量。它开始于服务器的启动,直到服务器的关闭。
- 7)exception对象 它是一个例外对象,当一个页面在运行过程中发生了例外,就产生这个对象。
- 8)pageContext对象 它提供了对JSP页面内所有的对象及名字空间的访问。
- 9)config对象 它是在一个Servlet初始化时,JSP引擎向它传递信息用的。
12、说一下表达式语言(EL)的隐式对象及其作用
答:
EL的隐式对象包括: pageContext、initParam(访问上下文参数)、param(访问请求参数)、paramValues、header(访问请求头)、headerValues、cookie(访问cookie)、applicationScope(访问application作用域)、sessionScope(访问session作用域)、requestScope(访问request作用域)、pageScope(访问page作用域)
用法如下所示:
${pageContext.request.method}
${pageContext["request"]["method"]}
${pageContext.request["method"]}
${pageContext["request"].method}
${initParam.defaultEncoding}
${header["accept-language"]}
${headerValues["accept-language"][0]}
${cookie.jsessionid.value}
${sessionScope.loginUser.username}
补充:表达式语言的.和[]运算作用是一致的,唯一的差别在于如果访问的属性名不符合Java标识符命名规则。
例如上面的accept-language就不是一个有效的Java标识符,那么这时候就只能用[]运算符而不能使用.运算符获取它的值。
13、JSP中的静态包含和动态包含有什么区别?
答:在jsp当中经常需要嵌套其他的jsp页面,以提高代码利用率跟工作效率。
- 常用的jsp嵌套包括静态包含跟动态包含两种方式,下面这张图很好的解释了两者的区别:
14、过滤器有哪些作用和用法?
答:
-
过滤器的常见作用:
a).对用户的请求进行统一的认证、对访问的请求进行记录和审核
b).对用户传输的数据过滤和替换,转换图像格式,对响应内容进行压缩,减少网络传输
c).对用户的请求和响应进行加密处理
d).触发资源访问事件 -
过滤器的用法:
1)Servlet 过滤器可以动态地拦截请求和响应,以变换或使用包含在请求或响应中的信息。
2)可以将一个或多个 Servlet 过滤器附加到一个 Servlet 或一组 Servlet。
3)Servlet 过滤器也可以附加到 JavaServer Pages (JSP) 文件和 HTML 页面。
4)调用 Servlet 前调用所有附加的 Servlet 过滤器。
5)Servlet 过滤器是可用于 Servlet 编程的 Java 类,可以实现以下目的:
在客户端的请求访问后端资源之前,拦截这些请求。
在服务器的响应发送回客户端之前,处理这些响应。
15、请谈谈你对Javaweb开发中的监听器的理解?
答:
- 定义: 监听器是一个专门用于对其他对象身上发生的事件或状态改变进行监听和相应处理的对象,当被监视的对象发生情况时,立即采取相应的行动。
- 解释: 监听器其实就是一个实现特定接口的普通java程序,这个程序专门用于监听另一个java对象的方法调用或属性改变,当被监听对象发生上述事件后,监听器某个方法立即被执行。
- java中的事件监听机制可用图来表示:
16、说说web.xml文件中可以配置哪些内容?
答:详情请看代码
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.4"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<!-- 配置web引用程序中Servlet上下文的初始化参数 -->
<context-param>
<param-name>name</param-name>
<param-value>ytuan996</param-value>
</context-param>
<!-- 当程序中发生错误时,跳转到哪一个页面。这里的错误可以是异常,也可以是错误码,但是只能是其中之一 -->
<error-page>
<exception-type></exception-type>
<error-code>500</error-code>
<location>error.jsp</location>
</error-page>
<!-- 配置自己定义的过滤器 -->
<filter>
<!-- 还可以在这里定义过滤器的自定义参数 -->
<init-param>
<param-name></param-name>
<param-value></param-value>
</init-param>
<filter-name></filter-name>
<filter-class></filter-class>
</filter>
<!-- 过滤器的规则 -->
<filter-mapping>
<filter-name></filter-name>
<url-pattern></url-pattern>
</filter-mapping>
<!-- 监听器 -->
<listener>
<listener-class></listener-class>
</listener>
<!-- 配置Servlet -->
<servlet>
<servlet-name></servlet-name>
<servlet-class></servlet-class>
</servlet>
<!-- 配置Servlet的请求路径 -->
<servlet-mapping>
<servlet-name></servlet-name>
<url-pattern></url-pattern>
</servlet-mapping>
<!-- 配置访问应用的欢迎页面,一般是首页面 -->
<welcome-file-list>
<welcome-file></welcome-file>
</welcome-file-list>
</web-app>