0
点赞
收藏
分享

微信扫一扫

Javaweb阶段作业

_阿瑶 2022-04-06 阅读 112
java

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 。

举报

相关推荐

0 条评论