Java EE
选择题:10分
填空题:5分
论述题:25分
分析题:20分
编程题:40分
一、绪论
1、Web 应用架构
C/S(Client/Server,客户端/服务器)结构
B/S(Browser/Server,浏览器/服务器)结构
2、Web 项目基础目录结构
1)src
javabean:项目实体类和JavaBean
dao:项目数据操作类
filter:项目过滤器
listener:项目监听器
servlet:项目Servlet程序
util:项目工具类
2)WebContent(Eclipse)
css:项目样式表
images:项目图片素材
js:项目JS文件
error.jsp:异常处理页面
index.jsp:网站首页
3)WEB-INF
lib:项目第三方库
web.xml:项目配置文件
二、Servlet
1、Servlet 请求处理和响应过程
- 接收HTTP请求;
- 获取请求信息,如请求头和请求参数数据;
- 调用相关Java类和方法,完成具体的业务功能;
- 实现到其他Web组件的跳转,如重定向或请求转发;
- 生成HTTP响应。
2、Servlet 生命周期
七种状态:创建、初始化、服务可用、服务不可用、处理请求、终止服务和销毁
!四个阶段:加载和实例化、初始化、处理请求和销毁
1)加载和实例化
- 在服务器正常运行状态下,客户端首次向Servlet程序发出请求时
- 重新装入Servlet时,如服务器重新启动或Servlet被修改…
2)初始化
- 在Servlet实例化后,Servlet容器调用初始化方法初始化Servlet实例
- 如果初始化正常,Servlet在容器中会处于服务可用状态;如果初始化失败,Servlet容器会从运行环境中清除掉该实例
- 当Servlet运行出现异常时,Servlet容器会使该实例变为服务不可用状态
3)处理请求
- 服务器接收客户端请求时,会为该请求创建一个"请求"对象和一个"响应"对象并调用service()方法,该方法再调用其他方法来处理请求
- 在Servlet生命周期中,service()方法可能被多次调用。当多个客户端同时访问某个Servlet的service()方法时,服务器会为每个请求创建一个线程,实现并行处理多个请求,减少请求处理的等待时间,提高服务器的响应速度
4)销毁
- 当Servlet容器需要终止Servlet时,调用Servlet的destroy()方法释放正在使用的资源
- 在调用destroy()方法前,必须让当前正在执行service()方法的任何线程完成执行
- 在destroy()方法完成后,Servlet容器必须释放Servlet实例以便被垃圾回收
3、Servlet 声明配置
1)配置文件
<servlet>
<servlet-name>HelloServlet</servlet-name>
<servlet-class>com.No_Rishi.servlet.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HelloServlet</servlet-name>
<url-pattern>/HelloServlet</url-pattern>
</servlet-mapping>
2)注解
@WebServlet(name="HelloServlet", value="/HelloServlet")
@WebServlet("/HelloServlet")
4、Servlet 核心接口
1)四个核心接口对象的作用范围和创建时机
ServletConfig:一个ServletConfig对象对应一个Servlet程序;初始化Servlet时创建
ServletContext:一个ServletContext对象对应一个Web 应用;启动Web应用时创建
HttpServletRequest:一个HttpServletRequest对象对应一次Servlet请求;收到Servlet请求时创建
HttpServletResponse:一个HttpServletResponse对象对应一次Servlet请求;收到Servlet请求时创建
2)ServletConfig接口
功能:获取Servlet初始化参数、配置信息和ServletContext对象。
<servlet>
<servlet-name>HelloServlet</servlet-name>
<servlet-class>com.No_Rishi.servlet.HelloServlet</servlet-class>
<init-param>
<param-name>id</param-name>
<param-value>1908170204</param-value>
</init-param>
</servlet>
@Override
public void init(ServletConfig sc) throws ServletException {
System.out.println("HelloServlet程序的别名:"+sc.getServletName());
System.out.println("HelloServlet程序的初始化参数:"+sc.getInitParameter("id"));
System.out.println("HelloServlet程序的ServletContext对象"+sc.getServletContext());
}
2)ServletContext接口
功能:代表当前项目运行环境;ServletContext对象是域对象(application);
<context-param>
<param-name>id</param-name>
<param-value>1908170204</param-value>
</context-param>
ServletContext context = getServletConfig().getServletContext();
System.out.println("上下文参数:"+
context.getInitParameter("id"));
context.setAttribute("id", "1908170204");
String id = context.getAttribute("ID"));
3)HttpServletRequest接口
功能:封装HTTP请求信息
String str = request.getParameter("用户请求参数");
String[] strs = request.getParameterValues("用户请求参数");
4)HttpServletResponse接口
功能:封装HTTP响应消息
5)存取请求域属性的方法
request.setAttribute("请求域属性", "属性值");
request.getAttribute("请求域属性");
6)处理请求和响应的中文问题
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
5、Servlet 应用
1、处理请求数据
- 处理超链接请求数据
超链接请求语法格式
<a href="URL地址?参数=参数值[&参数=参数值...]">链接文本</a>
<a href="HelloServlet?id=1908170204&date=20211222"></a>
- 处理Form表单请求数据
Form表单请求语法格式
<form action="HelloServlet" method=POST">
<p>用户名:<input name="username" type="text"></p>
<p>密码:<input name="password" type="password"></p>
<p>信息来源:
<input name="channel" type="checkbox" value="网络">网络
<input name="channel" type="checkbox" value="报纸">报纸
<input name="channel" type="checkbox" value="亲友">亲友</p>
<input type&#