Javaweb
Day01
Day02
Day03
Day04
Day05
Javaweb
Day01
1、请简单描述B/S架构的原理及其优缺点。
答:1.原理:B/S(Brower/Server),浏览器/服务器。主要通过浏览器发送请求和服务器进行数据交互。
2.优缺点:
1)优点:开发成本低,管理维护简单;产品升级便利;用户使用方便。
2)缺点:安全性不足;客户端不能随心变化;受浏览器的限制。
2、HTTP1.1协议中请求和响应的够成包括哪些?
答:请求:
1)请求行:请求提交方式名(大写)+请求URI+请求协议及版本号。
2)请求报头:存放着各种请求参数及值,其格式为:”参数名”:”参数值”。
3)空白行:用户分离请求报头与请求正文。
4)请求正文:存放请求携带的参数及值。
响应:
1)状态行:包含协议及版本号,状态码,状态信息描述。
2)响应报头:存放着各种响应参数及值,其格式为:”参数名”:”参数值”。
3)空白行:用户分离响应报头与响应正文。
4)响应正文:响应数据所形成的HTML文件内容。
3、请说出以下错误代码的含义?
200:请求已成功,请求的响应头或数据体将随此响应返回。
400:由于包含语法错误,当前的请求无法被服务器理解。
401:当前请求需要用户验证。
403:服务器已近理解请求但是拒绝执行它。
404:请求失败,请求的资源在服务器找不到。
500:服务器遇到了一个未曾预料的状况,导致了它无法完成对请求的处理。
503:由于临时的服务器维护或者过载,服务器当前无法处理请求。
4、GET请求和POST请求的区别?
GET请求:
由于GET请求会将请求所携带的参数作为请求URL中的一部分出现,所以请求参数会显示在地址栏。导致有三点不足:1.参数只能是字符串,而不能是其他类型。2.可以携带的数据量小。3.数据安全性低。
POST请求:
POST请求会将请求所携带的数据以请求正文的形式出现,所以与GET方式相比,POST请求有点在于:1.数据类型可以是任意类型,还可以是声音,视频,图片等文件。2.请求可以携带的数据量大。3.数据安全性高。
5、如何在Web.xml中配置欢迎页?配置错误跳转页?
答:配置欢迎页,可以配置多个,会从第一个开始,如果找不到就找后面的,如果找到,后面配置的欢迎页就会失效。
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
配置错误跳转页:
第一种:
<error-page>
<error-code>错误代码{例如:404}</error-code>
<location>跳转路径</location>
</error-page>
第二种:
<error-page>
<exception-type>报错的具体类型</exception-type>
<location>跳转路径</location>
</error-page>
6、如何在eclipse中将普通的javaweb项目打成war包?如何使用指令将javaweb工程打成war包?
答:1.选中项目,点击File->选择export->弹出一个界面选择War File->点击next->配置war包输出路径,配置当前war包所运行的服务器环境。
2.在资源文件夹下调出命令行窗口 运行命令:jar -cvf 包名.war *
7、web.xml文件中如何配置servlet?
答:
<servlet>
<servlet-name>名字</servlet-name>
<servlet-class>servlet类的全路径</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>名字</servlet-name>
<url-pattern>请求的路径</url-pattern>
</servlet-mapping>
Day02
1、请简述tomcat目录结构的具体含义:
1.bin目录:存放启动和关闭Tomcat的脚本文件
2.conf目录:存放tomcat服务器的各种配置
3.lib目录:存放Tomcat运行所需的jar文件
4.logs目录:存放tomcat的日志文件
5.temp目录:存放tomcat运行时产生的临时文件
6.webapp目录:包含web项目示例,当发布web应用时,默认情况下把web文件夹放于此目录
7.work目录:tomcat将jsp生成的servlet源文件和字节码放到这个目录下
Day03
1、创建一个Maven工程,工程名为Student,创建如下页面,将表单数据提交到StudentServlet
(1)、在后台输出所有字段的信息
(2)、在后台输出request请求头中的所有信息
参考示例:
页面:
核心代码:
运行结果:
核心代码:
Studen
t.zip
5.28KB
2、如何获取servletConfig对象?请写出相关代码
答:
3、请描述servlet的生命周期,对各个阶段进行简要描述。
答:
(1)加载和实例化
当Servlet容器启动或客户端发送一个请求时,Servlet容器会查找内存中是否存在该Servlet实例,若存在,则直接读取该实例响应请求;如果不存在,就创建一个Servlet实例。
(2) 初始化
实例化后,Servlet容器将调用Servlet的init()方法进行初始化(一些准备工作或资源预加载工作)。
(3)服务
初始化后,Servlet处于能响应请求的就绪状态。当接收到客户端请求时,调用service()的方法处理客户端请求,HttpServlet的service()方法会根据不同的请求 转调不同的doXxx()方法。
(4)销毁
当Servlet容器关闭时,Servlet实例也随时销毁。其间,Servlet容器会调用Servlet 的destroy()方法去判断该Servlet是否应当被释放(或回收资源)。
4、创建一个servlet,符合下列要求:
(1)映射路径为“/student/getinfo”、“/stu/*”、“*.inf”
(2)包含3个初始化参数:“name:peter”、“age:20”、“room:511”
(1)、请写出在web.xml文件中配置该servlet的配置代码。
答:
<servlet>
<servlet-name>testServlet</servlet-name>
<servlet-class>TestServlet</servlet-class>
<init-param>
<param-name>name</param-name>
<param-value>peter</param-value>
</init-param>
<init-param>
<param-name>age</param-name>
<param-value>20</param-value>
</init-param>
<init-param>
<param-name>room</param-name>
<param-value>511</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>testServlet</servlet-name>
<url-pattern>/student/getinfo</url-pattern>
<url-pattern>/stu/*</url-pattern>
<url-pattern>*.inf</url-pattern>
</servlet-mapping>
(2)、请写出使用注解方式配置该servlet的注解信息。
答:
@WebServlet(urlPatterns= {"/student/getinfo","/stu/*","*.inf"},
initParams= {
@WebInitParam(name="name",value="peter"),
@WebInitParam(name="age",value="20"),
@WebInitParam(name="room",value="511")
})
Day04
1、过滤器的作用是什么?
过滤器的作用是是对Servlet 容器调用 Servlet的过程进行筛选过滤,从而在 Servlet 处理请求前和Servlet 响应请求后实现一些特殊的功能。
PS:如何获取filter的名称和属性?
2、Filter执行顺序是怎么样的?请通过代码来描述过个filter的执行顺序。
按Filter在web.xml中注册顺序执行。
如果采用注解@WebFilter进行配置,按Filter名称的字典顺序执行。
例如按顺序注册Filter,FilterA,FilterB,FilterC,它们的执行顺序如下:
3、创建一个Maven工程FilterTest,在工程创建:
(1)、创建一个EncodingFilter,用于处理请求中文字符乱码问题。
public
void
doFilter
(
ServletRequest request
,
ServletResponse response
,
FilterChain chain
)
throws IOException
,
ServletException
{
request
.
setCharacterEncoding
(
"UTF-8"
);
// 设置发送到客户端的响应的内容类型
response
.
setContentType
(
"text/html;charset=UTF-8"
);
// application/msword
response
.
setCharacterEncoding
(
"UTF-8"
);
chain
.
doFilter
(
request
,
response
);
}
(2)、常见一个VisitCountFilter,用于统计当前网站的访问量,访问时,能够在浏览器页面显示您是第XX位访客。
核心代码:
分析:
Tomcat启动的时候,会访问webapps下的各个WEB应用,识别各个WEB应用的同时为每个WEB应用创建一个的对应ServletContext实例
创建:服务器启动时,创建ServletContext对象
销毁:服务器关闭时或者web项目移除时,销毁ServletContext对象,
FilterTes
t.zip
4.9KB
1、请简述Cookie的基本原理,描述其传送的过程。
在客户端第一次发送请求时,会携带信息给服务器,服务器会把他存入Cookie,当客户端下次请求时,服务器会把信息响应给客户端浏览器,Cookie是由服务器生成,发送给浏览器,浏览器把cookie以键值对的形式保存在浏览器中,当下一次请求同一网站时,会把该cookie发送给服务器。
2、请写一个方法能够修改cookie的值,请写出方法体
public Cookie updateCookie(String cookieName, String newValue, Cookie[] cookie)
3、如何设置Cookie的path?
cookie.setPath("path");
4、如何解决Cookie中的中文乱码问题?请写一段程序,在后台servlet中设置cookie,cookie中需要包含中文字符,客户端发送请求后,能够在页面上显示出Cookie中的所有信息。
分析:
URLDecoder类包含一个decode(String s,String enc)静态方法,
它可以将application/x-www-form-urlencoded MIME字符串转成普通字符串;
URLEncoder类包含一个encode(String s,String enc)静态方法,
它可以将普通字符串转换成application/x-www-form-urlencoded MIME字符串。
5、请简要描述session的原理
Session是在无状态的HTTP协议下,服务端记录用户状态时用于标识具体用户的机制,它是在服务端保存的用来跟踪用户的状态的数据结构。Session的作用就是在服务器端保存一些用户的数据,然后传递给用户一个名字为JSESSIONID的Cookie,这个JESSIONID对应这个服务器中的一个Session对象,通过它就可以获取到保存用户信息的Session。
6、如何设置session的有效期,有几种方式,分别如何去设置?
第一种:tomcat服务器的web.xml文件
第二种:
在当前的web应用的web.xml文件中配置session的超时时间,会覆盖tomcat服务器的web.xml文件中的配置,单位为分钟
第三种:
在servlet/jsp代码中配置,单位为秒:
session.setMaxInactiveInterval(120);
Day05
1、创建一个工程TestJson完成以下功能:
(1)请将下列json文本转换成json对象,并遍历其中的所有属性,输出属性名称和属性值
{"sites":{"site":[{"id":"1","name":"aaa","url":"www.qq.com"},{"id":"2","name":"rrr","url":"c.dd.com"},{"id":"3","name":"ttt","url":"www.aa.com"}]}}
分析:
遍历js对象里面的属性用for in 循环
(2)创建一个实体类Info,属性包括:id、name、url,请将上述json在后台转换为Info的list集合,并在后台遍历该list
2、创建一个工程TestAJAX
(1)请写出一个原生ajax的示例,发送post请求,在后台输出接收到的请求参数,以key:value的格式输出
function getXHR() { var xhr; if(window.XMLHttpRequest){ xhr=new XMLHttpRequest(); }else{ xhr=new ActiveXObject("Microsoft.XMLHTTP"); } return xhr; } function sendAjax() { var xhr=getXHR(); var name=document.getElementById("name").value; var age=document.getElementById("age").value; var parm = 'name=' + name+ '&age='+age; xhr.open("post", "AjaxServlet", true); xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded') xhr.send(parm) xhr.onreadystatechange = function () { if (xhr.readyState == 4 && xhr.status == 200) { var value = xhr.responseText; console.log(value); } } } |
分析:
XHR.readyState == 状态(0,1,2,3,4),而且状态也是不可逆的:
0:请求未初始化,还没有调用 open()。
1:请求已经建立,但是还没有发送,还没有调用 send()。
2:请求已发送,正在处理中(通常现在可以从响应中获取内容头)。
3:请求在处理中;通常响应中已有部分数据可用了,没有全部完成。
4:响应已完成;您可以获取并使用服务器的响应了。
xhr.status == 200
200 - 请求成功
(2)将上述需求改为jquery ajax的形式发送
前台发送请求:
function sendAjaxByJquery(){ var name=document.getElementById("name").value; var age=document.getElementById("age").value; $.ajax({ url:"AjaxServlet", type:"post", data:{"name":name,"age":age}, success:function(data){ console.log(data); } }); } |
后台接收:
1、创建一个工程File
(1)完成一个文件上传的示例,限制上传文件的大小,如果文件超过5MB则在页面上提示“超出指定文件大小”,如果符合要求,则将文件保存在X盘下的epoint文件夹下(X自定义)。
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String savePath = "D:/epoint"; File file = new File(savePath); if (!file.exists() && !file.isDirectory()) { file.mkdir(); } String message = ""; try{ DiskFileItemFactory factory = new DiskFileItemFactory(); ServletFileUpload upload = new ServletFileUpload(factory); upload.setHeaderEncoding("UTF-8"); List<FileItem> list = upload.parseRequest(request); for(FileItem item : list){ if(!item.isFormField()){ if(item.getSize()>1024*1024*5) { message="超出指定文件大小"; return; } String filename = item.getName(); if(filename==null || filename.trim().equals("")){ continue; } filename = filename.substring(filename.lastIndexOf("\\")+1); InputStream in = item.getInputStream(); FileOutputStream out = new FileOutputStream(savePath + "\\" + filename); byte buffer[] = new byte[1024]; int len = 0; while((len=in.read(buffer))>0){ out.write(buffer, 0, len); } in.close(); out.close(); item.delete(); message = "文件上传成功!"; } } }catch (Exception e) { message= "文件上传失败!"; e.printStackTrace(); } request.setAttribute("message",message); request.getRequestDispatcher("/index.jsp").forward(request, response); } |
(2)完成一个文件下载的示例,能将服务器上的某个文件下载到本地。
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String filename="文件.txt"; String fullFileName = getServletContext().getRealPath("/" + filename); response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(filename,"UTF-8")); InputStream input=new FileInputStream(fullFileName); OutputStream output = response.getOutputStream(); byte[]buff=new byte[1024*10]; int len=0; while((len=input.read(buff))>-1) { output.write(buff,0,len); } input.close(); } |
2、写出log4j中日志格式化参数的含义:
%m:输出代码中指定的信息,如log(message)中的message
%p:输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL。如果是调用debug()输出的,则为DEBUG,依此类推
%r:输出自应用启动到输出该日志信息所耗费的毫秒数
%c:输出日志信息所属的类的全名
%t:输出产生该日志事件的线程名
%n:输出一个回车换行符
%d:输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式
%l:输出日志事件的发生位置,包括类全名、方法、文件名以及在代码中的行数
3、写出log4j日志级别的具体含义,以及他们的优先级
OFF:是最高等级的,用于关闭所有日志记录;
FATAL:指出每个严重的错误事件将会导致应用程序的退出;
ERROR:指出虽然发生错误事件,但仍然不影响系统的继续运行;
WARN:概念比较模糊,很难确定界限,所以一般很少使用;
INFO:表明消息在粗粒度级别上突出强调应用程序的运行过程,就是输出提示信息;
DEBUG:指出细粒度信息事件对调试应用程序是非常有帮助的,就是输出debug的信息。
优先级按照范围从小到大排序:OFF > FATAL > ERROR > WARN > INFO > DEBUG 。