JavaWeb基础巩固
Tomcat服务器安装
Tomcat官网下载安装/解压
Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。
Maven下载配置
Maven官网
使用Maven可以方便导入Jar包,Maven核心思想:约定大于配置。
Servlet简介
Java Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。
Servlet 执行以下主要任务:
- 读取客户端(浏览器)发送的显式的数据。这包括网页上的 HTML 表单,或者也可以是来自 applet 或自定义的 HTTP 客户端程序的表单。
- 读取客户端(浏览器)发送的隐式的 HTTP 请求数据。这包括 cookies、媒体类型和浏览器能理解的压缩格式等等。
- 处理数据并生成结果。这个过程可能需要访问数据库,执行 RMI 或 CORBA 调用,调用 Web 服务,或者直接计算得出对应的响应。
- 发送显式的数据(即文档)到客户端(浏览器)。该文档的格式可以是多种多样的,包括文本文件(HTML 或 XML)、二进制文件(GIF图像)、Excel 等。
- 发送隐式的 HTTP 响应到客户端(浏览器)。这包括告诉浏览器或其他客户端被返回的文档类型(例如HTML),设置 cookies 和缓存参数,以及其他类似的任务。
在pom文件中通过Maven导入Servlet、Jsp的jar包
<dependencies>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.2.1-b03</version>
</dependency>
</dependencies>
Module使用
在IDEA开发Servlet中可以使用Module创建子Servlet,子Servlet包含父Servlet的所有jar包,在创建子Servlet后父Servlet的pom.xel会出现(自动生成)
<modules>
<module></module>
</modules>
子Servlet的pom.xml会出现(自动生成)
<parent>
<artifactId><artifactId>
<groupId><groupId>
<version><version>
<parent>
编写Servlet
编写一个类继承HttpServlet(抽象类)
扩展:HttpServlet继承自GenericServlet(抽象类)GenericServlet继承Servlet(接口)
web.xml中注册编写的Servlet
<!-- servlet与servlet-mapping成对出现 -->
<servlet>
<servlet-name>asssd</servlet-name> <!-- 对Servlet命名 -->
<servlet-class>com.yhb.Servlet</servlet-class> <!-- 编写的Servlet的Java代码路径 -->
</servlet>
<servlet-mapping>
<servlet-name>asssd</servlet-name> <!-- Servlet的名字 -->
<url-pattern>/zxc</url-pattern> <!-- 浏览器访问的url路径 -->
</servlet-mapping>
请求转发与重定向
- 请求转发
a->(请求资源)->b->(请求资源)->c
c->(响应)->b->(响应)-a - 重定向
a->(请求资源)->b
b->(响应(找c))->a
a->(请求资源)->c
c->(响应)->a
读取资源文件
Maven核心:约定大于配置
在Maven项目中 resources 文件保存配置文件,java文件编写代码,因此如果在Java文件下编写的配置文件将无法编译,需要手动配置。(项目编译后都存放于WEB-INF->classes文件下)。
<!--在build中配置resoureces,来防止我们资源导出失效的问题-->
<build>
<resources>
<resource>
<directory>src/main/resources/</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
</resources>
</build>
cookie和Session
一个网站如何证明你来过。。。
- 服务端给客户端一个信件,客户端下次访问服务端带上信件就可以了;cookie
- 服务器登记你来过,下次你来的时候我来匹配你;session
- cookie:客户端技术(响应,请求)
- session:服务器技术,利用这个技术保存用户的会话信息。
jsp标签
jsp实质是Servlet: 参考:https://www.runoob.com/jsp/jsp-syntax.html。
jsp声明:<%!开头,以%>结束的标签,如
<%! int count = 0; %>
jsp脚本:<%开头,以%>结束的标签,如
<% count++; %>
jsp表达式:<%=开头,以%>结束的标签,如
<%= count%>
jsp声明会编译到jsp生成的Java类中,其他的会生成到_jspService方法中。
jsp指令:<%@ 指令名 val="" …%>,如
<%@ directive attribute="value" %>
jsp九大内置对象及作用域
- pageContext 存东西 在一个页面中有效
- request 请求 存东西 再一次请求中有效(包括请求转发)
- response 响应
- Session 存东西 再一次会话中有效
- application【ServletContext】 存东西 在服务器中有效直至关闭服务器
- config【ServletConfig】
- out
- page
- exception
final javax.servlet.http.HttpServletRequest request
final javax.servlet.http.HttpServletResponse response
final javax.servlet.jsp.PageContext pageContext;
final javax.servlet.ServletContext application;
final javax.servlet.ServletConfig config;
javax.servlet.jsp.JspWriter out = null;
final java.lang.Object page = this;
javax.servlet.http.HttpSession session = null;
JSTL标签、EL表达式、JavaBean
- JSTL标签:参考:https://www.runoob.com/jsp/jsp-jstl.html
备注:在Tomcat当中也需要导入对应的jar包(jstl.jar,standard.jar)否则可能出现解析错误。 - EL表达式:参考:https://www.runoob.com/jsp/jsp-expression-language.html
- JavaBean:参考:https://www.runoob.com/jsp/jsp-javabean.html
MVC三层架构
过滤器(Filter)
过滤器实际上就是对web资源进行拦截,做一些处理后再交给下一个过滤器或servlet处理,通常都是用来拦截request进行处理的,也可以对返回的response进行拦截处理。
编写Java类继承javax.servlet.Filter
import javax.servlet.*;
import java.io.IOException;
public class Filter implements javax.servlet.Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
/*
在过滤特点请求的时候会执行
chain:必须让过滤器继续通行
*/
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=UTF-8");
chain.doFilter(request,response);//让过滤器继续执行,否则到这终止;
}
@Override
public void destroy() {
}
}
web.xml注册过滤器
<filter>
<filter-name>aaa</filter-name>
<filter-class>com.yhb.Filter</filter-class>
</filter>
<filter-mapping>
<filter-name>aaa</filter-name>
<url-pattern>zxc/*</url-pattern>
</filter-mapping>
监听器
在Servlet规范中定义了多种类型的监听器(一共8个监听器),它们用于监听的事件源分别为ServletContext,HttpSession和ServletRequest这三个域对象。Servlet规范针对这三个对象上的操作,又把多种类型的监听器划分为三种类型:
- 域对象的生命周期监听:监听域对象自身的创建和销毁。这个监听器需要实现相应的监听器接口:ServletContextListener、HttpSessionListener、ServletRequestListener。
- 域对象的属性监听:监听域对象中属性的增加和删除。这个监听器需要实现的监听器接口为:ServletContextAttributeListener、HttpSessionAttributeListener、ServletRequestAttributeListener
- 感知监听(都与HttpSession域对象有关):监听绑定到HttpSession域中的某个JavaBean对象的状态的监听器。这个监听器需要实现的监听器接口:HttpSessionBindingListener、HttpSessionActiveationListener.
编写Java类继承自需要监听的接口。
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
public class lis implements HttpSessionListener {
//创建监听
@Override
public void sessionCreated(HttpSessionEvent se) {
}
//销毁监听
@Override
public void sessionDestroyed(HttpSessionEvent se) {
}
}
在web.xml当中配置
<listener>
<listener-class>com.lis.lis</listener-class>
</listener>