7.JavaWeb
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
一、基本概念
Java Web是用Java技术来解决相关web互联网领域的技术栈。静态web资源开发技术HTML、CSS。动态web资源开发技术JavaScript、JSP/Servlet、ASP、PHP等。在Java中动态web资源开发技术统称为Java Web。
二、HTTP
超文本传输协议Hyper Text Transfer ProtocolHTTP是一个简单的请求-响应协议它通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。
HTTP请求请求行、请求头、请求体。主要请求方式为GET和POST。
HTTP响应响应行、响应头、响应体。常见响应状态码有200请求成功、302重定向、404请求地址错误、500服务器错误。
三、Tomcat服务器
Tomcat 服务器是一个免费的开放源代码的应用服务器属于轻量级应用服务器在中小型系统和并发访问用户不是很多的场合下被普遍使用是开发和调试JSP 程序的首选。
在maven项目中静态资源放在webapp目录下web应用目录结构为
src
|-main
|-java
|-resources
|-webapp
|-WEB-INF
|-web.xml
|-test
|-java
maven导入tomcat7插件
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
</plugin>
四、Servlet
Java Servlet 是运行在 web 服务器或应用服务器上的程序它是作为来自 web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。
导入依赖
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency>
Servlet 生命周期可被定义为从创建直到毁灭的整个过程。以下是 Servlet 遵循的过程
- Servlet 初始化后调用 init () 方法。
- Servlet 调用 service() 方法来处理客户端的请求。
- Servlet 销毁前调用 destroy() 方法。
- 最后Servlet 是由 JVM 的垃圾回收器进行垃圾回收的。
Servlet 基本方法
public class MyServlet implements Servlet {
@Override
public void init(ServletConfig servletConfig) throws ServletException {
}
@Override
public ServletConfig getServletConfig() {
return null;
}
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
}
@Override
public String getServletInfo() {
return null;
}
@Override
public void destroy() {
}
}
HttpServlet 是服务 HTTP 请求并实现 javax.servlet.Servlet 接口的 Java 类。web 应用程序开发人员通常编写 Servlet 来扩展 javax.servlet.http.HttpServlet并实现 Servlet 接口的抽象类专门用来处理 HTTP 请求。
//通知web容器当客户端访问哪些路径时,调用该类处理请求
@WebServlet("/hello")
public class MyServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.doGet(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.doPost(req, resp);
}
}
HttpServletRequest 接口继承自 ServletRequest 接口其主要作用是封装 HTTP 请求消息。由于 HTTP 请求消息分为请求行、请求消息头和请求消息体三部分。因此在 HttpServletRequest 接口中定义了获取请求行、请求头和请求消息体的相关方法。
//通知web容器当客户端访问哪些路径时,调用该类处理请求
@WebServlet("/hello")
public class MyServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//获取当前web容器对象
ServletContext servletContext = req.getServletContext();
//设置与获取自定义属性,属性在不同servlet间传递
req.setAttribute("",new Object());
Object attribute = req.getAttribute("");
req.removeAttribute("");
//获取请求方法
String method = req.getMethod();
//获取url
StringBuffer requestURL = req.getRequestURL();
//获取uri
String requestURI = req.getRequestURI();
//获取请求头
String header = req.getHeader("");
//获取请求主体的MIME类型
String contentType = req.getContentType();
//获取客户端ip
String remoteAddr = req.getRemoteAddr();
//设置读取post请求体时的编码
req.setCharacterEncoding("");
//获取请求主体中使用的字符编码的名称
String characterEncoding = req.getCharacterEncoding();
//获取请求参数
String parameter = req.getParameter("");
//获取字符输入流
BufferedReader reader = req.getReader();
//获取字节输入流
ServletInputStream inputStream = req.getInputStream();
//请求转发
req.getRequestDispatcher("/path").forward(req,resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.doGet(req, resp);//使用通用方法获取参数
}
}
HttpServletResponse 继承自 ServletResponse 接口。HttpServletResponse 对象专门用来封装 HTTP 响应消息简称 response 对象。Servlet 容器会针对每次请求创建一个 response 对象并把它作为参数传递给 Servlet 的 service 方法。Servlet 处理请求后会将响应信息封装到 response 对象中并由容器解析后返回给客户端。
//通知web容器当客户端访问哪些路径时,调用该类处理请求
@WebServlet("/hello")
public class MyServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//设置响应状态码
resp.setStatus(200);
//设置响应头
resp.setHeader("","");
//设置输出内容的MIME类型
resp.setContentType("");
//设置输出内容使用的字符编码
resp.setCharacterEncoding("");
//获取字符输出流
PrintWriter writer = resp.getWriter();
//获取字节输出流
ServletOutputStream outputStream = resp.getOutputStream();
//重定向
resp.sendRedirect("");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.doGet(req, resp);//使用通用方法获取参数
}
}
解决中文乱码
new String(parameter.getBytes(StandardCharsets.ISO_8859_1),StandardCharsets.UTF_8);
五、会话跟踪
Cookie 属于客户端会话技术它是服务器发送给浏览器的小段文本信息存储在客户端浏览器的内存中或硬盘上。当浏览器保存了 Cookie 后每次访问服务器都会在 HTTP 请求头中将这个 Cookie 回传给服务器。
//通知web容器当客户端访问哪些路径时,调用该类处理请求
@WebServlet("/hello")
public class MyServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
Cookie cookie=new Cookie("","");
cookie.setMaxAge(60*60*24);
//发送cookie(浏览器关闭即失效,发送中文需要编码)
resp.addCookie(cookie);
//获取cookie
Cookie[] cookies = req.getCookies();
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.doGet(req, resp);//使用通用方法获取参数
}
}
Session 是服务器端会话技术。当浏览器访问 web 服务器的资源时服务器可以为每个用户浏览器创建一个 Session 对象每个浏览器独占一个 Session 对象。
//通知web容器当客户端访问哪些路径时,调用该类处理请求
@WebServlet("/hello")
public class MyServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
HttpSession session=req.getSession();
//添加数据
session.setAttribute("",new Object());
//获取数据
session.getAttribute("");
//删除数据
session.removeAttribute("");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.doGet(req, resp);//使用通用方法获取参数
}
}