当前位置:   article > 正文

Servlet基础知识(自学笔记)_webservlet(name="loginservlet",urlpatterns={"---1-

webservlet(name="loginservlet",urlpatterns={"---1---"})

使用工具:intellij idea2018版

需准备:

(1)安装intellij idea

(2)安装jdk

(3)安装Tomcat

(4)可以在创建工程之前配置好环境,也可以如下视频在创建过程中配置

1.servlet的简单介绍

servlet全称java Servlet,是用java编写的服务器端程序,其主要功能在于交互式地浏览和修改数据,生成动态web内容。是JavaWeb的三大组件之一(Filter和Listener)

作用:接受客户端发来的请求数据,处理数据,将处理结果通过响应发送给客户端

 

2.servlet的两种创建方式

(1)servlet3.0之前,通过web.xml部署描述文件,如下视频

第一个servlet.mp4

(2)servlet3.0之后,可以通过注解的方式创建,详细步骤基本同上,区别如下:

a. 在new时选择servlet,然后输入名字即可

b.不用web.xml文件部署,在开头部署,如下标识

 

剩下的操作和视频1中是基本一样的。

 

3.request与response

  1. package com.study.servlet;
  2. import javax.servlet.ServletException;
  3. import javax.servlet.annotation.WebServlet;
  4. import javax.servlet.http.HttpServlet;
  5. import javax.servlet.http.HttpServletRequest;
  6. import javax.servlet.http.HttpServletResponse;
  7. import java.io.IOException;
  8. import java.io.PrintWriter;
  9. import java.util.Enumeration;
  10. @WebServlet(name = "RequestServlet",urlPatterns = "/request")
  11. public class RequestServlet extends HttpServlet {
  12. protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  13. }
  14. protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  15. System.out.println("接收到get请求");
  16. //请求行
  17. System.out.println("请求方式:"+request.getMethod());
  18. System.out.println("URI:"+request.getRequestURI());
  19. System.out.println("发出请求客户端IP地址:"+request.getRemoteAddr());
  20. System.out.println("服务点请求的IP地址:"+request.getLocalAddr());
  21. System.out.println("访问客户端的端口号"+request.getRemotePort());
  22. System.out.println("web应用路径:"+request.getContextPath());
  23. System.out.println("http协议和版本:"+request.getProtocol());
  24. //获取请求头所有属性信息
  25. Enumeration<String> headerNames = request.getHeaderNames();
  26. while (headerNames.hasMoreElements()){
  27. String element = headerNames.nextElement();
  28. System.out.println(element+":"+request.getHeader(element));
  29. }
  30. //请求体,获取请求参数内容
  31. String name = request.getParameter("name");
  32. String passWord = request.getParameter("passWord");
  33. System.out.println("用户名:"+name);
  34. System.out.println("密码:"+passWord);
  35. //检验登陆状态方式1
  36. String result="登陆成功!";
  37. // ServletOutputStream outputStream = response.getOutputStream();
  38. // outputStream.write(result.getBytes());
  39. //检验登陆状态方式2
  40. response.setContentType("text/html;charset=utf-8");//没有设置这个编码格式,有可能输出结果是乱码
  41. PrintWriter writer = response.getWriter();
  42. writer.write(result);
  43. }
  44. }

使用的html文件:action的request对应  urlPatterns = "/request",意思是当点击提交按钮时,RequestServlet的数据请求可以接收到表单提交的数据

  1. <html>
  2. <head>
  3. <title>get请求表单</title>
  4. </head>
  5. <body>
  6. <center>
  7. <h2>发起http get请求</h2>
  8. <form action="request" method="get">
  9. <p>账号:<input type="text" name="name" /></p>
  10. <p>密码:<input type="text" name="passWord" /></p>
  11. <input type="submit" name="提交" />
  12. </form>
  13. </center>
  14. </body>
  15. </html>

 

4.验证码切换

  1. package com.study.servlet;
  2. import javax.imageio.ImageIO;
  3. import javax.servlet.ServletException;
  4. import javax.servlet.annotation.WebServlet;
  5. import javax.servlet.http.HttpServlet;
  6. import javax.servlet.http.HttpServletRequest;
  7. import javax.servlet.http.HttpServletResponse;
  8. import java.awt.*;
  9. import java.awt.image.BufferedImage;
  10. import java.io.IOException;
  11. import java.util.Random;
  12. @WebServlet(name = "VerifyCodeServlet",urlPatterns = "/code")
  13. public class VerifyCodeServlet extends HttpServlet {
  14. protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  15. }
  16. protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  17. int width=100;
  18. int height=30;
  19. //定义随机字符
  20. String data="abcdefghijklmnopqrstuvwxyz0123456789";
  21. //创建随机对象
  22. Random random = new Random();
  23. //创建图片流
  24. BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_3BYTE_BGR);
  25. //设置图片背景色及形状
  26. Graphics graphics = image.getGraphics();
  27. graphics.setColor(Color.gray);
  28. graphics.fillRect(0,0,width,height);
  29. //设置随机字符数量和颜色、位置及字符
  30. graphics.setColor(Color.black);
  31. for(int i=0;i<4;i++){
  32. int position=random.nextInt(data.length());
  33. String substring = data.substring(position, position + 1);
  34. graphics.drawString(substring,width/5*(i+1),15);
  35. }
  36. //输出请求
  37. ImageIO.write(image,"jpg",response.getOutputStream());
  38. }
  39. }

jsp文件

  1. <%--
  2. Created by IntelliJ IDEA.
  3. User: shinelon
  4. Date: 2020/11/23
  5. Time: 10:41
  6. To change this template use File | Settings | File Templates.
  7. --%>
  8. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
  9. <html>
  10. <head>
  11. <title>验证码</title>
  12. </head>
  13. <body>
  14. <center>
  15. <h2>切换验证码</h2>
  16. <script>
  17. function changeImageCode() {
  18. document.getElementById('btn').isDisable=true;
  19. document.getElementById('identity').src='code?ts='+new Date().getTime();
  20. }
  21. </script>
  22. <img src="code" id="identity" onload="btn.disable=false;" style="cursor: pointer;vertical-align: center" />
  23. <input type="button" value="看不清,更换验证码" onclick="changeImageCode()" id="btn" style="vertical-align: center" />
  24. </center>
  25. </body>
  26. </html>

 

5.servlet的声明周期

  1. package com.study.servlet;
  2. import javax.servlet.ServletException;
  3. import javax.servlet.annotation.WebServlet;
  4. import javax.servlet.http.HttpServlet;
  5. import javax.servlet.http.HttpServletRequest;
  6. import javax.servlet.http.HttpServletResponse;
  7. import java.io.IOException;
  8. /**
  9. * servlet是单例设计模式
  10. * 无论多少次请求都是只有一个servlet实例
  11. * 多个客户端并发时,服务器则会启动多个线程分别执行servlet的service方法
  12. */
  13. @WebServlet(name = "LifeServlet", urlPatterns = "/life")
  14. public class LifeServlet extends HttpServlet {
  15. @Override
  16. public void init() throws ServletException {//启动服务器,执行该servlet请求只会会执行一次
  17. System.out.println("初始化过程.....");
  18. }
  19. //每次请求都会调用
  20. @Override
  21. protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  22. System.out.println("服务过程中.....");
  23. doGet(req,resp);
  24. }
  25. protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  26. }
  27. protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  28. System.out.println("doget调用中.....");
  29. }
  30. //关闭服务器调用
  31. @Override
  32. public void destroy() {
  33. System.out.println("销毁中.....");
  34. }
  35. }

6.servletConfig和servletContext

  1. package com.study.servlet;
  2. import javax.servlet.ServletException;
  3. import javax.servlet.annotation.WebServlet;
  4. import javax.servlet.http.HttpServlet;
  5. import javax.servlet.http.HttpServletRequest;
  6. import javax.servlet.http.HttpServletResponse;
  7. import java.io.IOException;
  8. /**
  9. * servlet是单例设计模式
  10. * 无论多少次请求都是只有一个servlet实例
  11. * 多个客户端并发时,服务器则会启动多个线程分别执行servlet的service方法
  12. */
  13. @WebServlet(name = "LifeServlet", urlPatterns = "/life")
  14. public class LifeServlet extends HttpServlet {
  15. @Override
  16. public void init() throws ServletException {//启动服务器,执行该servlet请求只会会执行一次
  17. System.out.println("初始化过程.....");
  18. }
  19. //每次请求都会调用
  20. @Override
  21. protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  22. System.out.println("服务过程中.....");
  23. doGet(req,resp);
  24. }
  25. protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  26. }
  27. protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  28. System.out.println("doget调用中.....");
  29. }
  30. //关闭服务器调用
  31. @Override
  32. public void destroy() {
  33. System.out.println("销毁中.....");
  34. }
  35. }
  36. package com.study.servlet;
  37. import javax.servlet.ServletException;
  38. import javax.servlet.annotation.WebServlet;
  39. import javax.servlet.http.HttpServlet;
  40. import javax.servlet.http.HttpServletRequest;
  41. import javax.servlet.http.HttpServletResponse;
  42. import java.io.IOException;
  43. @WebServlet(name = "HelloServlet1",urlPatterns = "/Get")
  44. public class HelloServlet1 extends HttpServlet {
  45. protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  46. System.out.println("发送请求");
  47. }
  48. protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  49. System.out.println("get请求");
  50. //获取HelloServlet的发送对象name
  51. System.out.println(this.getServletContext().getAttribute("name"));
  52. }
  53. }

7.登陆验证及转发

  1. package com.study.servlet;
  2. import javax.servlet.ServletException;
  3. import javax.servlet.annotation.WebServlet;
  4. import javax.servlet.http.HttpServlet;
  5. import javax.servlet.http.HttpServletRequest;
  6. import javax.servlet.http.HttpServletResponse;
  7. import java.io.IOException;
  8. /**
  9. * 请求转发,发送到错误页面
  10. */
  11. @WebServlet(name = "LoginServlet",urlPatterns = "/login")
  12. public class LoginServlet extends HttpServlet {
  13. protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  14. }
  15. protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  16. String userName="preston";
  17. String userPassWord="123456";
  18. //获取登陆页面信息
  19. String name = request.getParameter("name");
  20. String passWord = request.getParameter("passWord");
  21. //判断
  22. if(!name.equals(userName)){
  23. request.setAttribute("errorMessage","用户名错误");//发送错误信息
  24. request.getRequestDispatcher("/loginError.jsp").forward(request,response);//转发
  25. }else if(!passWord.equals(userPassWord)){
  26. request.setAttribute("errorMessage","密码错误");//发送错误信息
  27. request.getRequestDispatcher("/loginError.jsp").forward(request,response);//转发
  28. }else{
  29. //重定向方法1
  30. // response.setStatus(HttpServletResponse.SC_MOVED_TEMPORARILY);
  31. // response.setHeader("Location","https://www.baidu.com/");
  32. //重定向方法2
  33. // response.sendRedirect("https://www.baidu.com/");
  34. //跳向自己写的首页
  35. response.sendRedirect("/hello/index.jsp");
  36. }
  37. }
  38. }

8.线程安全

  1. package com.study.servlet;
  2. import javax.servlet.ServletException;
  3. import javax.servlet.annotation.WebServlet;
  4. import javax.servlet.http.HttpServlet;
  5. import javax.servlet.http.HttpServletRequest;
  6. import javax.servlet.http.HttpServletResponse;
  7. import java.io.IOException;
  8. /**
  9. * 线程安全问题:
  10. * 尽量少用成员变量
  11. *
  12. */
  13. @WebServlet(name = "ThreadServlet",urlPatterns = "/thread")
  14. public class ThreadServlet extends HttpServlet {
  15. protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  16. }
  17. protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  18. int a=0;
  19. //5秒之后才输出结果
  20. synchronized (this){
  21. a++;
  22. try {
  23. Thread.sleep(5*1000);
  24. } catch (InterruptedException e) {
  25. e.printStackTrace();
  26. }
  27. response.setContentType("text/html;charset=utf-8");
  28. response.getWriter().write(a+"");
  29. }
  30. }
  31. }

9.读取配置文件db.properties

  1. package com.study.servlet;
  2. import javax.servlet.ServletException;
  3. import javax.servlet.annotation.WebServlet;
  4. import javax.servlet.http.HttpServlet;
  5. import javax.servlet.http.HttpServletRequest;
  6. import javax.servlet.http.HttpServletResponse;
  7. import java.io.IOException;
  8. import java.io.InputStream;
  9. import java.util.Properties;
  10. /**
  11. * 读取配置文件db.properties
  12. */
  13. @WebServlet(name = "ReadDatabaseServlet",urlPatterns = "/data")
  14. public class ReadDatabaseServlet extends HttpServlet {
  15. protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  16. }
  17. protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  18. InputStream resourceAsStream = this.getServletContext().getResourceAsStream("/db.properties");
  19. Properties properties = new Properties();
  20. properties.load(resourceAsStream);
  21. String name = properties.getProperty("name");
  22. String passWord = properties.getProperty("passWord");
  23. String url = properties.getProperty("url");
  24. System.out.println(name);
  25. System.out.println(passWord);
  26. System.out.println(url);
  27. }
  28. }

db.properties文件

  1. name=preston
  2. passWord=50095
  3. url=baidu.com

 

10.自动刷新功能

  1. package com.study.servlet;
  2. import javax.servlet.ServletException;
  3. import javax.servlet.annotation.WebServlet;
  4. import javax.servlet.http.HttpServlet;
  5. import javax.servlet.http.HttpServletRequest;
  6. import javax.servlet.http.HttpServletResponse;
  7. import java.io.IOException;
  8. /**
  9. * 自动刷新
  10. */
  11. @WebServlet(name = "RefreshServlet",urlPatterns = "/refresh")
  12. public class RefreshServlet extends HttpServlet {
  13. protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  14. }
  15. protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  16. /**另一种自动刷新方式
  17. * <meta http-equiv='refresh' content='3;url='>固定格式
  18. */
  19. String message="<meta http-equiv='refresh' content='3;url=/hello/index.jsp'>3秒后会自动跳转到首页,如果没有跳转,请点击<a href='/hello/index.jsp'>跳转连接</a>";
  20. request.setAttribute("message",message);
  21. request.getRequestDispatcher("/index.jsp").forward(request,response);
  22. }
  23. private void request() {
  24. // response.setContentType("text/html;charset=utf-8");
  25. //自动刷新
  26. // response.setHeader("refresh","3");
  27. // response.getWriter().print("3秒后自动刷新");
  28. //3秒后跳转到指定网页
  29. // response.setHeader("refresh","3;url='/hello/index.jsp'");
  30. // response.getWriter().print("3秒后自动刷新");
  31. }
  32. }

11.文件下载

  1. package com.study.servlet;
  2. import javax.servlet.ServletException;
  3. import javax.servlet.ServletOutputStream;
  4. import javax.servlet.annotation.WebServlet;
  5. import javax.servlet.http.HttpServlet;
  6. import javax.servlet.http.HttpServletRequest;
  7. import javax.servlet.http.HttpServletResponse;
  8. import java.io.FileInputStream;
  9. import java.io.IOException;
  10. import java.io.InputStream;
  11. @WebServlet(name = "DownloadServlet",urlPatterns = "/download")
  12. public class DownloadServlet extends HttpServlet {
  13. protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  14. }
  15. protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  16. //压缩文件直接下载,其它直接打开
  17. //response.getWriter();//输出字节码文件
  18. String filename = request.getParameter("filename");
  19. //通知浏览器不要预览,直接下载
  20. String type = this.getServletContext().getMimeType(filename);
  21. response.setContentType(type);
  22. //通知浏览器下载的方式
  23. response.setHeader("Content-Disposition","attachment;filename="+filename);
  24. //获取文件的绝对路径
  25. String realPath = this.getServletContext().getRealPath("download/"+filename);
  26. InputStream in = new FileInputStream(realPath);
  27. ServletOutputStream outputStream = response.getOutputStream();//输出二进制文件
  28. //文件拷贝
  29. int len=0;
  30. byte[] buffer=new byte[1024];
  31. while ((len=in.read(buffer))>0){
  32. outputStream.write(buffer,0,len);
  33. }
  34. in.close();
  35. }
  36. }

综合实例链接:https://mp.csdn.net/console/editor/html/110004445

 

 

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/882325
推荐阅读
相关标签
  

闽ICP备14008679号