javaweb项目的执行过程及servlet核心要点

1.javaWeb应用的结构

1.Java Resources :java代码
2.WebContent:资源文件 如:html css js jsp png,mp4…
3.META-INF:不要动
4.WEB-INF:下的lib中放的是jar包,web.xml整个应用的配置文件

2.JavaWeb的整个执行过程

1.浏览器发送url请求到服务器即javaweb应用
2.进入到javaweb应用首先找到web.xml文件找到对应的Servlet类
3.在web应用中根据逻辑关系进入到service层,之后再进入dao层进行数据库的操作,数据库再把得到的信息返回给dao层
4.最后通过页面把结果响应给浏览器
重点注意:Servlet就是处理浏览器发送请求和响应的组件

3.Servlet简介

1.理解:

servlet是运行再Web服务器中的小型java程序。servlet通常通过HTTP(超文本传输协议),接收和响应来自web客户端的请求
1.Servlet可以运行再tomcat中
2.Servelt是一个接口
3.可以接收浏览器发送的请求
4.补充内容:tomcat支持servlet和jsp规范

2.使用:

1.自定义类实现Servlet接口
2.实现未实现方法
3.定义Servlet的访问路径(需要再web.xml中配置)

3执行过程:


1.浏览器访问url:http://localhost:8080/JavaWeb_day22_web02/servlet01
		2.通过/JavaWeb_day22_web02访问到对应的项目中的web.xml
		3.通过/servlet01匹配web.xml中的<servlet-mapping>中的<url-pattern>
		4.没有匹配返回404,匹配到了根据<servlet-mapping>中的<servlet-name>
		5.再去匹配<servlet>中的<servlet-name>
		6.如果匹配成功,执行<servlet>中的<servlet-class>找到对应的类

4.注意事项(细节)

1.Servlet为什么可以执行?

web.xml中通过<servlet-class>加载了此类

2.谁实例化的Servlet?
tomcat(Servlet容器)实例化的
3.Servlet什么时候初始化的?

默认浏览器第一次访问的时候初始化的
			在web.xml中可以通过设置<load-on-startup>0</load-on-startup>指定tomcat启动初始化Servlet

4.一个Servlet被初始化了多少次?
只被初始化一次
5.如何支持多用户访问:?
核心的service处理多用户访问:原理多线程策略
6.一个Servlet可以指定多少个访问路径?
可以指定多个访问路径
7.路径多元化访问路径
/xx:
/xx/aa/bb
/*:任意路径访问
*.后缀 :以什么后缀的路径访问
8.一个应用中可以有多少个Servlet?
可以配置多个Servlet类
9.一个路径可以映射多少个Servlet?
一个路径只能映射一个Servlet

5.Servlet生命周期方法:

1.init方法:
默认第一次访问Servlet执行此方法初始化Servlet
2.service方法:
请求到service处理客户端请求和响应
3.destroy方法:
应用关闭或者移出tomcat执行此方法回收Servlet
6.Servlet的优化
1.GenericServlet
1.Servlet的子类GenericServlet抽象类
2.实现了Servlet中方法中除了service方法之外的其他方法,开发者只需要实现service方法
3.使用:
1.自定义类继承GenericServlet抽象类
2.实现service方法,处理请求和响应
3.配置访问路径web.xml
2.httpServlet
1.GenericServlet子类的抽象类,目前使用最多
2.不仅实现了service还重写了service,提供了两种处理请求和响应的方式,要么doXx,要么重写service
3.基于HTTP请求,有不同的请求方式:get/post
HttpServlet专门处理基于HTTP协议的请求,根据不同的请求方式处理不同的请求
4.使用:
1.自定义类继承HttpServlet抽象类
2.要么重写doXx方法,要么重写service
3.配置访问路径
3.快速使用Servlet
1.使用注解的方式替换配置文件手动配置
2.new—>Serlet---->定义类名---->指定访问路径---->指定重写方法

4.Servlet中的核心知识点

1.处理请求和响应 service/doXx中的两个参数

补充:每次请求tomcat都会创建一个请求对象和一个响应对象

ServletRequeest(HttpServletRequest)

1.理解:

API定义:
定义将客户端请求信息提供给某个servlet的对象。servlet容器创建ServletRequest对象,并将该对象作为参数传递给改servlet的service方法
1.客户端请求时携带的内容都封装到了该对象中
2.tomcat实例化该对象
3.还将该对象作为service/doXX方法中的参数
4.直接在service或者doXx方法中直接使用

2.接收信息(请求行,请求头,请求正文)
了解:请求行、请求头

1.获取浏览器请求方式

String method = request.getMethod();

2.获取浏览器请求的url

StringBuffer buffer = request.getRequestURL();

3.获取浏览器请求头

String accL = request.getHeader("Accept-Language");
掌握:请求正文:

1.get方式提交的信息
1.a连接拼接参数
url拼接参数
2.post方式提交的信息
form表单提交数据(登录,注册)

核心方法:

1.根据name获取value(一个name对应一个值)

String value = request.getParameter(name);
			 String  username = request.getparameter("username")

2.根据name获取value(一个name对应多个值)

String[] values = request.getParameterValues(name);
		     String[] hobbys = request.getParameterValues("hobby");

3.获取所有的name

Enumeration<String> names = request.getParameterNames();

4.获取所有的name和value

Map<String,String[]> map = request.getParameterMap();

5.java万物皆对象 form数据也得映射到对象中
1.导包 commons-beanutils-1.8.0.jar 和 commons-logging.jar
2.BeanUtils.populate(user,map);

响应对象HttpServletResponse

1.API理解

定义辅助servlet将响应发送到客户端得对象,servlet容器创建ServletResponse对象,并将它传递给service方法
1.response对象可以实现服务器响应客户端
2.tomcat创建并且和request成对出现,每次请求都会创建一个
3.response对象传递到service或者doXx方法中

2.作用:

1.响应客户端信息(响应行,响应头,响应正文)
1.响应文本内容:
1.设置响应对象得编码

response.setContentType("text/html;charset=utf-8");

2.打印流 IO得一种

1.PrintWriter writer = response.getWriter();
			2.writer.writer(“请你加油”);

3.响应字节内容:实现图片下载

1.先将文件读入内存:(获取文件得真实路径)
						String realPath =request.getServletContext().getRealPath("images/xx.jpg");
					2.解决文件名乱码问题
						String filename = new  String ("xx.jpg".getBytes("utf-8"),"ISO-8856-1");
						FileInputStream fis = new FileInputStream(realPath);
					3.告诉浏览器该文件要下载:
								response.setHeader("Contentdisposition","attackment;filename="+filename);
					4.再把文件写出到客户端
						1.ServletOutputStream sos = response.getOutputStream();
						2.byte[] buff = new byte[1024];
						3.int len = 0;

   						4. while ((len= fis.read(buff)!=-1)){sos.writer(buff,0,len);}
            					5.sos.close();
            					6.fis.close();