web.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
  5. version="4.0">
  6. <!-- 配置servlet
  7. 当通过url访问时http://localhost:8080/tomcatdemo_war_exploded/demo1
  8. 服务器会到web.xml访问到/demo1
  9. 然后往上找到demo1,接着找到com.example.tomcatdemo.servletdemo1
  10. 这个是全类名,第一时间想到反射:
  11. tomcat将全类名对应的字节码文件加载进内存 Class.forName()
  12. 创建对象cls.newInstance()
  13. 调用方法 service 因为demo1指向的servlet文件实现了Servlet,所以tomcat知道有这个方法
  14. servlet的init方法,只执行一次,说明一个Servlet在内存中只存在一个对象,Servlet是单列的
  15. 当多个用户访问这个Servlet时,可能存在线程安全问题
  16. 解决:尽量不要在Servlet中定义成员变量,定义局部变量。万一即使定义了成员变量,也不要对其赋值、修改值
  17. -->
  18. <servlet>
  19. <servlet-name>demo1</servlet-name>
  20. <servlet-class>com.example.tomcatdemo.servletdemo1</servlet-class>
  21. </servlet>
  22. <servlet-mapping>
  23. <servlet-name>demo1</servlet-name>
  24. <url-pattern>/demo1</url-pattern>
  25. </servlet-mapping>
  26. <servlet>
  27. <servlet-name>demo2</servlet-name>
  28. <servlet-class>com.example.tomcatdemo.servletdemo2</servlet-class>
  29. <!-- 指定servlet的创建时机
  30. 1、第一次被访问时,创建
  31. load-on-startup的值为负数
  32. 2、在服务器启动时,创建
  33. load-on-startup的值为0或正整数
  34. -->
  35. <load-on-startup>5</load-on-startup>
  36. </servlet>
  37. <servlet-mapping>
  38. <servlet-name>demo2</servlet-name>
  39. <url-pattern>/demo2</url-pattern>
  40. </servlet-mapping>
  41. </web-app>

servlet

  1. package com.example.tomcatdemo;
  2. import javax.servlet.*;
  3. import java.io.IOException;
  4. public class servletdemo1 implements Servlet {
  5. /**
  6. * 初始化方法
  7. * Servlet被创建时执行,只会执行一次
  8. * @param servletConfig
  9. * @throws ServletException
  10. */
  11. @Override
  12. public void init(ServletConfig servletConfig) throws ServletException {
  13. System.out.println("init.......");
  14. }
  15. /**
  16. * 获取ServletConfig对象,即servlet的配置对象
  17. * @return
  18. */
  19. @Override
  20. public ServletConfig getServletConfig() {
  21. return null;
  22. }
  23. /**
  24. * 提供服务的方法
  25. * 每一次servlet被访问时执行,执行多次
  26. * @param servletRequest
  27. * @param servletResponse
  28. * @throws ServletException
  29. * @throws IOException
  30. */
  31. @Override
  32. public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
  33. System.out.println("service....");
  34. }
  35. /**
  36. * 获取servlet的一些信息,版本,作者等
  37. * @return
  38. */
  39. @Override
  40. public String getServletInfo() {
  41. return null;
  42. }
  43. /**
  44. * 销毁方法
  45. * 在服务器正常关闭时,执行,执行一次
  46. */
  47. @Override
  48. public void destroy() {
  49. System.out.println("destroy.......");
  50. }
  51. }

注解-代替web.xml

  1. package com.example.tomcatdemo;
  2. import javax.servlet.*;
  3. import javax.servlet.annotation.WebServlet;
  4. import java.io.IOException;
  5. @WebServlet(urlPatterns = "/demo3") //直接使用注解进行xml配置 也可以如下
  6. //@WebServlet("/demo4") //直接使用注解进行xml配置
  7. public class servletdemo3 implements Servlet {
  8. /**
  9. * 初始化方法
  10. * Servlet被创建时执行,只会执行一次
  11. * @param servletConfig
  12. * @throws ServletException
  13. */
  14. @Override
  15. public void init(ServletConfig servletConfig) throws ServletException {
  16. System.out.println("init.......");
  17. }
  18. /**
  19. * 获取ServletConfig对象,即servlet的配置对象
  20. * @return
  21. */
  22. @Override
  23. public ServletConfig getServletConfig() {
  24. return null;
  25. }
  26. /**
  27. * 提供服务的方法
  28. * 每一次servlet被访问时执行,执行多次
  29. * @param servletRequest
  30. * @param servletResponse
  31. * @throws ServletException
  32. * @throws IOException
  33. */
  34. @Override
  35. public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
  36. System.out.println("service....");
  37. }
  38. /**
  39. * 获取servlet的一些信息,版本,作者等
  40. * @return
  41. */
  42. @Override
  43. public String getServletInfo() {
  44. return null;
  45. }
  46. /**
  47. * 销毁方法
  48. * 在服务器正常关闭时,执行,执行一次
  49. */
  50. @Override
  51. public void destroy() {
  52. System.out.println("destroy.......");
  53. }
  54. }

idea2021-代替web.xml

2021idea生成webapp 直接生成这个目录,在这个目录下面的servlet可以直接访问
image.png

HttpServlet-获取请求行方法

  1. package com.example.tomcatdemo.servletdemo;
  2. import javax.servlet.*;
  3. import javax.servlet.http.*;
  4. import javax.servlet.annotation.*;
  5. import java.io.IOException;
  6. /**
  7. * 演示请求行数据
  8. */
  9. @WebServlet(name = "ServletTest2", value = "/ServletTest2")
  10. public class ServletTest2 extends HttpServlet {
  11. @Override
  12. protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  13. // System.out.println(111111);
  14. // //获取请求方式
  15. // String method = request.getMethod();
  16. // System.out.println(method);
  17. //// 获取虚拟目录 重要
  18. // String contextPath = request.getContextPath();
  19. // System.out.println(contextPath);
  20. //// 获取servlet路径 /ServletTest2
  21. // String servletPath = request.getServletPath();
  22. // System.out.println(servletPath);
  23. //// 获取get方式请求参数
  24. // String queryString = request.getQueryString();
  25. // System.out.println(queryString);
  26. //// 获取URI 和 URL
  27. // String requestURI = request.getRequestURI();
  28. // StringBuffer requestURL = request.getRequestURL();
  29. // System.out.println(requestURI);
  30. // System.out.println(requestURL);
  31. //// 获取协议及版本
  32. // String protocol = request.getProtocol();
  33. // System.out.println(protocol);
  34. //// 获取客户机IP地址
  35. // String remoteAddr = request.getRemoteAddr();
  36. // System.out.println(remoteAddr);
  37. }
  38. @Override
  39. protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  40. System.out.println(2222);
  41. //获取请求方式
  42. String method = request.getMethod();
  43. System.out.println(method);
  44. // 获取虚拟目录 重要
  45. String contextPath = request.getContextPath();
  46. System.out.println(contextPath);
  47. // 获取servlet路径 /ServletTest2
  48. String servletPath = request.getServletPath();
  49. System.out.println(servletPath);
  50. // 获取post方式请求参数
  51. String queryString = request.getParameter("username");
  52. System.out.println(queryString);
  53. // 获取URI 和 URL
  54. String requestURI = request.getRequestURI();
  55. StringBuffer requestURL = request.getRequestURL();
  56. System.out.println(requestURI);
  57. System.out.println(requestURL);
  58. // 获取协议及版本
  59. String protocol = request.getProtocol();
  60. System.out.println(protocol);
  61. // 获取客户机IP地址
  62. String remoteAddr = request.getRemoteAddr();
  63. System.out.println(remoteAddr);
  64. }
  65. }

image.png

HttpServlet-获取请求头方法

  1. package com.example.tomcatdemo.servletdemo;
  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.util.Enumeration;
  9. /**
  10. * 演示请求行数据
  11. */
  12. @WebServlet(name = "ServletTest3", value = "/ServletTest3")
  13. public class ServletTest3 extends HttpServlet {
  14. @Override
  15. protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  16. // 获取请求头数据
  17. String userAgent = request.getHeader("user-agent");
  18. System.out.println(userAgent);
  19. if (userAgent.contains("Chrome")){
  20. System.out.println("Chrome");
  21. } else if (userAgent.contains("Firefox")){
  22. System.out.println("Firefox");
  23. }
  24. System.out.println("-------------");
  25. System.out.println("-------------");
  26. // 获取所有的请求头名称,这个方法不常用,一般没有必要获取这么多
  27. Enumeration<String> headerNames = request.getHeaderNames();
  28. // 遍历
  29. while (headerNames.hasMoreElements()){
  30. String name = headerNames.nextElement();
  31. //根据请求头名称获取请求头的值
  32. String value = request.getHeader(name);
  33. System.out.println(name+"------"+value);
  34. }
  35. }
  36. @Override
  37. protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  38. }
  39. }

HttpServlet-获取请求体方法

  1. package com.example.tomcatdemo.servletdemo;
  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.BufferedReader;
  8. import java.io.IOException;
  9. import java.util.Enumeration;
  10. /**
  11. * 演示请求行数据
  12. */
  13. @WebServlet(name = "ServletTest4", value = "/ServletTest4")
  14. public class ServletTest4 extends HttpServlet {
  15. @Override
  16. protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  17. }
  18. @Override
  19. protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  20. /**
  21. * 请求体,只有post请求方式,才有请求体,在请求体中封装了post请求参数
  22. *
  23. * 1、获取流对象
  24. * BufferedReader getReader() 获取字符输入流,只能操作字符数据
  25. * ServletInputStream getInputStream() 获取字节输入流 可以操作所有类型数据 在文件上传再学
  26. *
  27. */
  28. BufferedReader br = request.getReader();
  29. String line = null;
  30. while ((line = br.readLine()) != null){
  31. System.out.println(line);
  32. }
  33. }
  34. }

HttpServlet-重要方法

  1. package com.example.tomcatdemo.servletdemo;
  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.BufferedReader;
  8. import java.io.IOException;
  9. import java.util.Enumeration;
  10. import java.util.Map;
  11. import java.util.Set;
  12. /**
  13. * 其它功能 都非常重要
  14. * getParameter(string name) 根据参数名称获取参数值
  15. * getParameterValues(string name) 根据参数名称获取参数值的数组 多用于复选框
  16. * getParameterNames() 获取所有请求的参数名称
  17. * getParameterMap() 获取所有参数的map集合
  18. */
  19. @WebServlet(name = "ServletTest5", value = "/ServletTest5")
  20. public class ServletTest5 extends HttpServlet {
  21. @Override
  22. protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  23. //这个方法无论是get和post方法都可以使用,这样get和post方法中写的差异就没有了,
  24. // 所以直接在post方法里面调用get方法即可
  25. //解决post请求体乱码问题
  26. request.setCharacterEncoding("utf-8");
  27. String username = request.getParameter("username");
  28. // System.out.println("get");
  29. // System.out.println(username);
  30. String[] hobbies = request.getParameterValues("hobby");
  31. // for (String hobby : hobbies) {
  32. // System.out.println(hobby);
  33. //
  34. // }
  35. //这里发现复选框没有被全部获取,使用
  36. Enumeration<String> parameterNames = request.getParameterNames();
  37. while (parameterNames.hasMoreElements()){
  38. String name = parameterNames.nextElement();
  39. System.out.println(name);
  40. String value = request.getParameter(name);
  41. System.out.println(value);
  42. System.out.println("------------");
  43. }
  44. System.out.println("----------修复复选框没有全选的问题------------");
  45. Map<String, String[]> parameterMap = request.getParameterMap();
  46. Set<String> keyset = parameterMap.keySet();
  47. for (String name : keyset) {
  48. String[] values = parameterMap.get(name);
  49. for (String value : values) {
  50. System.out.println(value);
  51. }
  52. System.out.println("---------------");
  53. }
  54. }
  55. @Override
  56. protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  57. // String username = request.getParameter("username");
  58. // System.out.println("post");
  59. // System.out.println(username);
  60. // 简略
  61. this.doGet(request,response);
  62. }
  63. }

image.png

HttpServlet-请求转发

  1. package com.example.servletdemoone;
  2. import javax.servlet.*;
  3. import javax.servlet.http.*;
  4. import javax.servlet.annotation.*;
  5. import java.io.IOException;
  6. @WebServlet(name = "Servlettest1", value = "/s1")
  7. public class Servlettest1 extends HttpServlet {
  8. @Override
  9. protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  10. System.out.println(1111);
  11. //创建转发对象,使用转发对象调用转发方法
  12. // RequestDispatcher rqd =request.getRequestDispatcher("/s2");
  13. // rqd.forward(request,response);
  14. //简化
  15. request.getRequestDispatcher("/s2").forward(request,response);
  16. }
  17. @Override
  18. protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  19. }
  20. }
  1. package com.example.servletdemoone;
  2. import javax.servlet.*;
  3. import javax.servlet.http.*;
  4. import javax.servlet.annotation.*;
  5. import java.io.IOException;
  6. @WebServlet(name = "Servletdemo1", value = "/s2")
  7. public class Servletdemo1 extends HttpServlet {
  8. @Override
  9. protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  10. System.out.println(222222);
  11. }
  12. @Override
  13. protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  14. }
  15. }

image.png

Servlet-登录demo阶段一

  1. 1、写一个user 接受参数,实例化一个user类对象,传输给userdao类的对象,进度登录验证
  2. 2、写一个userdao 接受user类对象,传入login方法进行登录验证,这里面使用JdbcTemplate进行数据库连接操作
  3. 3、写一个jdbcutils 数据库工具类,获取连接池对象,获取Connection对象
  1. package com.example.javawebs.util;
  2. import com.alibaba.druid.pool.DruidDataSourceFactory;
  3. /**
  4. * 数据库连接池
  5. */
  6. import javax.sql.DataSource;
  7. import java.io.IOException;
  8. import java.io.InputStream;
  9. import java.sql.Connection;
  10. import java.sql.SQLException;
  11. import java.util.Properties;
  12. public class jdbcutils {
  13. private static DataSource ds;
  14. static {
  15. try {
  16. //加载配置文件
  17. Properties pro = new Properties();
  18. InputStream is = jdbcutils.class.getClassLoader().getResourceAsStream("druid.properties");
  19. pro.load(is);
  20. //初始化连接池对象
  21. ds = DruidDataSourceFactory.createDataSource(pro);
  22. } catch (IOException e) {
  23. e.printStackTrace();
  24. } catch (Exception e) {
  25. e.printStackTrace();
  26. }
  27. }
  28. /**
  29. * 获取连接池对象
  30. */
  31. public static DataSource getDataSource(){
  32. return ds;
  33. }
  34. /**
  35. * 获取Connection对象
  36. */
  37. public static Connection getConnection() throws SQLException {
  38. return ds.getConnection();
  39. }
  40. }
  1. package com.example.javawebs.dao;
  2. import com.example.javawebs.domain.user;
  3. import com.example.javawebs.util.jdbcutils;
  4. import org.springframework.dao.DataAccessException;
  5. import org.springframework.jdbc.core.BeanPropertyRowMapper;
  6. import org.springframework.jdbc.core.JdbcTemplate;
  7. public class userdao {
  8. //创建JdbcTemplate对象,直接链接数据库并进行操作
  9. private JdbcTemplate template = new JdbcTemplate(jdbcutils.getDataSource());
  10. /**
  11. * 登录方法 接受一个user对象
  12. * @param loginuser 只有用户名和密码
  13. * @return 包含用户全部数据
  14. */
  15. public user login(user loginuser){
  16. try {
  17. String sql = "select * from user where username = ? and password =?";
  18. //使用JdbcTemplate对象的queryForObject()方法查询结果,方法中传入BeanPropertyRowMapper的实现类
  19. // 这里是传入通过获取的参数实例化出来的user对象,去数据库查询是否存在这个用户,如果存在,就返回这个用户的信息
  20. user user1 = template.queryForObject(sql,
  21. new BeanPropertyRowMapper<user>(user.class),
  22. loginuser.getUsername(), loginuser.getPassword());//这里的loginuser.getPassword()是user类里面的getPassword()方法,loginuser是user类的实例化对象
  23. return user1;
  24. } catch (DataAccessException e) {
  25. return null;
  26. }
  27. }
  28. }
  1. package com.example.javawebs.domain;
  2. /*
  3. 用户实体类
  4. */
  5. public class user {
  6. private int id;
  7. private String username;
  8. private String password;
  9. public int getId() {
  10. return id;
  11. }
  12. public void setId(int id) {
  13. this.id = id;
  14. }
  15. public String getUsername() {
  16. return username;
  17. }
  18. public void setUsername(String username) {
  19. this.username = username;
  20. }
  21. public String getPassword() {
  22. return password;
  23. }
  24. public void setPassword(String password) {
  25. this.password = password;
  26. }
  27. @Override
  28. public String toString() {
  29. return "user{" +
  30. "id=" + id +
  31. ", username='" + username + '\'' +
  32. ", password='" + password + '\'' +
  33. '}';
  34. }
  35. }
  1. import com.example.javawebs.dao.userdao;
  2. import com.example.javawebs.domain.user;
  3. import org.junit.jupiter.api.Test;
  4. //测试上面的三个类是否能正常运行
  5. public class usertest {
  6. @Test
  7. public void testlogin(){
  8. user loginuser = new user();
  9. loginuser.setUsername("lww");
  10. loginuser.setPassword("lwwpasswd");
  11. /**
  12. * 使用userdao创建一个对象,这个对象可以调用userdao类里面的login方法
  13. * login方法接受的是user类的对象,因此上面先使用user类实例化一个对象,并且对该对象赋值进行测试
  14. */
  15. userdao dao = new userdao();
  16. user user1 = dao.login(loginuser);
  17. System.out.println(user1);
  18. }
  19. }

image.png

Servlet-登录demo阶段二

  1. 接上面,写了一个登录界面 三个servlet

image.png
image.png

image.png

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>demo1</title>
  6. </head>
  7. <body>
  8. <form action="/demo/LoginServlet" method="post">
  9. username<input type="text" name="username1"><br>
  10. password<input type="text" name="password1"><br>
  11. <input type="submit" value="登录">
  12. </form>
  13. </body>
  14. </html>
  1. package com.example.javawebs.servletloginP;
  2. import com.example.javawebs.dao.userdao;
  3. import com.example.javawebs.domain.user;
  4. import javax.servlet.*;
  5. import javax.servlet.http.*;
  6. import javax.servlet.annotation.*;
  7. import java.io.IOException;
  8. @WebServlet("/LoginServlet")
  9. public class LoginServlet extends HttpServlet {
  10. @Override
  11. protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  12. request.setCharacterEncoding("utf-8");
  13. //这里需要注意,直接最好request.getParameter的参数和配置文件里面的不一样,不然容易默认去获取配置文件里面的数据库账号密码
  14. String username = request.getParameter("username1");
  15. //测试获取的是什么值
  16. // System.out.println(username);
  17. String password = request.getParameter("password1");
  18. // System.out.println(password);
  19. user loginuser = new user();
  20. loginuser.setUsername(username);
  21. loginuser.setPassword(password);
  22. userdao dao = new userdao();
  23. user reluser = dao.login(loginuser);
  24. if (reluser == null){
  25. //登录失败
  26. request.getRequestDispatcher("/failServlet").forward(request,response);
  27. //测试
  28. // System.out.println(22222);
  29. }else {
  30. //登录成功
  31. //存储数据,值就是查回来的user对象 进行request域共享user对象
  32. request.setAttribute("user",reluser);
  33. request.getRequestDispatcher("/successServlet").forward(request,response);
  34. }
  35. //测试
  36. // System.out.println(111111111);
  37. }
  38. @Override
  39. protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  40. this.doGet(request,response);
  41. }
  42. }
  1. package com.example.javawebs.servletloginP;
  2. import com.example.javawebs.domain.user;
  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.io.IOException;
  9. @WebServlet("/successServlet")
  10. public class SuccessServlet extends HttpServlet {
  11. @Override
  12. protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  13. this.doPost(request,response);
  14. }
  15. @Override
  16. protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  17. // 获取request域中共享的user对象
  18. user user1 = (user)request.getAttribute("user");
  19. if (user1 != null){
  20. response.setContentType("text/html;charset=utf-8");
  21. response.getWriter().write("欢迎"+" "+user1.getUsername());
  22. }
  23. }
  24. }
  1. package com.example.javawebs.servletloginP;
  2. import javax.servlet.*;
  3. import javax.servlet.http.*;
  4. import javax.servlet.annotation.*;
  5. import java.io.IOException;
  6. @WebServlet("/failServlet")
  7. public class FailServlet extends HttpServlet {
  8. @Override
  9. protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  10. this.doPost(request,response);
  11. }
  12. @Override
  13. protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  14. response.setContentType("text/html;charset=utf-8");
  15. response.getWriter().write("用户名或密码错误");
  16. }
  17. }

Servlet-登录demo-BeanUtils改造LoginServlet

  1. package com.example.javawebs.servletloginP;
  2. import com.example.javawebs.dao.userdao;
  3. import com.example.javawebs.domain.user;
  4. import org.apache.commons.beanutils.BeanUtils;
  5. import javax.servlet.*;
  6. import javax.servlet.http.*;
  7. import javax.servlet.annotation.*;
  8. import java.io.IOException;
  9. import java.lang.reflect.InvocationTargetException;
  10. import java.util.Map;
  11. import java.util.Set;
  12. @WebServlet("/LoginServlet")
  13. public class LoginServlet extends HttpServlet {
  14. @Override
  15. protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  16. request.setCharacterEncoding("utf-8");
  17. /**
  18. //这里需要注意,直接最好request.getParameter的参数和配置文件里面的不一样,不然容易默认去获取配置文件里面的数据库账号密码
  19. String username = request.getParameter("username1");
  20. //测试获取的是什么值
  21. // System.out.println(username);
  22. String password = request.getParameter("password1");
  23. // System.out.println(password);
  24. user loginuser = new user();
  25. loginuser.setUsername(username);
  26. loginuser.setPassword(password);
  27. **/
  28. //获取所有的请求参数 这里很奇怪,与上面备注不同的是,这里html中要写成username和password,不然这个方法获取不到
  29. Map<String, String[]> map = request.getParameterMap();
  30. Set<String> keyset = map.keySet();
  31. for (String name : keyset) {
  32. String[] values = map.get(name);
  33. for (String value : values) {
  34. System.out.println(value);
  35. }
  36. System.out.println("---------------");
  37. }
  38. //创建user对象
  39. user loginuser = new user();
  40. //使用beanutils封装,将map里面的键值对封装到loginuser对象中 这里如果登录页面的键名和user类里面的username成员变量不一样,就有可能封装一个null过去,password类似
  41. try {
  42. BeanUtils.populate(loginuser,map);
  43. } catch (IllegalAccessException e) {
  44. e.printStackTrace();
  45. } catch (InvocationTargetException e) {
  46. e.printStackTrace();
  47. }
  48. System.out.println(loginuser);
  49. userdao dao = new userdao();
  50. user reluser = dao.login(loginuser);
  51. if (reluser == null){
  52. //登录失败
  53. request.getRequestDispatcher("/failServlet").forward(request,response);
  54. //测试
  55. System.out.println(22222);
  56. }else {
  57. //登录成功
  58. //存储数据,值就是查回来的user对象 进行request域共享user对象
  59. request.setAttribute("user",reluser);
  60. request.getRequestDispatcher("/successServlet").forward(request,response);
  61. }
  62. //测试
  63. // System.out.println(111111111);
  64. }
  65. @Override
  66. protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  67. this.doGet(request,response);
  68. }
  69. }

Servlet-response-字符流输出

  1. package com.example.javawebs.respdemo;
  2. /**
  3. * 输出字符数据到浏览器
  4. */
  5. import javax.servlet.ServletException;
  6. import javax.servlet.annotation.WebServlet;
  7. import javax.servlet.http.HttpServlet;
  8. import javax.servlet.http.HttpServletRequest;
  9. import javax.servlet.http.HttpServletResponse;
  10. import java.io.IOException;
  11. import java.io.PrintWriter;
  12. @WebServlet("/rs3")
  13. public class respServletdemo3 extends HttpServlet {
  14. @Override
  15. protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  16. // 获取流对象之前,设置流的默认编码
  17. response.setCharacterEncoding("utf-8");
  18. // 告诉浏览器建议使用的编码
  19. response.setHeader("content-type","text/html;charset=utf=8");
  20. // 获取字符输出流
  21. PrintWriter pw = response.getWriter();
  22. // 输出数据
  23. pw.write("hello,resp,长河落日圆");
  24. }
  25. @Override
  26. protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  27. this.doGet(request,response);
  28. }
  29. }

Servlet-response-字节流输出

  1. package com.example.javawebs.respdemo;
  2. /**
  3. * 输出字节数据到浏览器
  4. */
  5. import javax.servlet.ServletException;
  6. import javax.servlet.ServletOutputStream;
  7. import javax.servlet.annotation.WebServlet;
  8. import javax.servlet.http.HttpServlet;
  9. import javax.servlet.http.HttpServletRequest;
  10. import javax.servlet.http.HttpServletResponse;
  11. import java.io.IOException;
  12. import java.io.PrintWriter;
  13. import java.nio.charset.StandardCharsets;
  14. @WebServlet("/rs4")
  15. public class respServletdemo4 extends HttpServlet {
  16. @Override
  17. protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  18. // 获取流对象之前,设置流的默认编码
  19. response.setCharacterEncoding("utf-8");
  20. // 告诉浏览器建议使用的编码
  21. response.setHeader("content-type","text/html;charset=utf=8");
  22. // 获取字节输出流
  23. ServletOutputStream os = response.getOutputStream();
  24. // 输出数据
  25. os.write("hello,resp,长河落日圆,落日孤烟直".getBytes(StandardCharsets.UTF_8));
  26. }
  27. @Override
  28. protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  29. this.doGet(request,response);
  30. }
  31. }

Servlet-文件下载

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Title</title>
  6. </head>
  7. <body>
  8. <a href="images/01.jpg">图片</a>
  9. <hr>
  10. <a href="/demo/downLoadServlet?filename=一.jpg">图片</a>
  11. <a href="/demo/downLoadServlet?filename=01.mp4">视频</a>
  12. </body>
  13. </html>
  1. package com.example.javawebs.downLoadServlet;
  2. /**
  3. * 下载文件demo
  4. * 自定义资源文件夹,将文件放在资源文件夹中,如果中途加入新的文件,需要将资源文件夹取消资源文件夹设施,重新设置当前文件夹为资源文件,不然会报错
  5. */
  6. import com.example.javawebs.util.DownLoadUtils;
  7. import javax.servlet.*;
  8. import javax.servlet.http.*;
  9. import javax.servlet.annotation.*;
  10. import java.io.FileInputStream;
  11. import java.io.IOException;
  12. @WebServlet("/downLoadServlet")
  13. public class downLoadServlet extends HttpServlet {
  14. @Override
  15. protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  16. //获取请求参数,文件名称
  17. String filename = request.getParameter("filename");
  18. // 使用字节流加载文件进内存
  19. // 找到文件服务器路径
  20. ServletContext servletContext = this.getServletContext();
  21. String realPath = servletContext.getRealPath("/images/" + filename);
  22. // 使用字节流关联
  23. FileInputStream fis = new FileInputStream(realPath);
  24. //设置response的响应头
  25. //设置响应头类型 content-type
  26. String mimeType = servletContext.getMimeType(filename);
  27. response.setHeader("content-type",mimeType);
  28. //解决中文文件名问题 网上找的这个工具类,他的火狐浏览部分的代码有点问题,别的没有问题,先不找别的了
  29. String agent = request.getHeader("user-agent");
  30. filename = DownLoadUtils.getFileName(agent, filename);
  31. //设置响应头打开方式 content-disposition 就是用来设置先弹框再下载的
  32. response.setHeader("content-disposition","attachment;filename="+filename);
  33. // 将输入流数据,写出到输出流中
  34. //实例化输出流对象
  35. ServletOutputStream sos = response.getOutputStream();
  36. //写一个字节数组作为缓冲区,并输出
  37. byte[] buff = new byte[1024 * 8];
  38. int len = 0;
  39. while ((len = fis.read(buff)) != -1){
  40. sos.write(buff,0,len);
  41. }
  42. fis.close();
  43. }
  44. @Override
  45. protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  46. this.doGet(request, response);
  47. }
  48. }
  1. package com.example.javawebs.util;
  2. import java.io.UnsupportedEncodingException;
  3. import java.net.URLEncoder;
  4. import java.util.Base64;
  5. public class DownLoadUtils {
  6. public static String getFileName(String agent, String filename) throws UnsupportedEncodingException {
  7. if (agent.contains("MSIE")) {
  8. // IE浏览器
  9. filename = URLEncoder.encode(filename, "utf-8");
  10. filename = filename.replace("+", " ");
  11. } else if (agent.contains("Firefox")) {
  12. // 火狐浏览器
  13. Base64.Encoder encoder = Base64.getEncoder();
  14. filename = "=?utf-8?B?" + encoder.encode(filename.getBytes("utf-8")) + "?=";
  15. } else {
  16. // 其它浏览器
  17. filename = URLEncoder.encode(filename, "utf-8");
  18. }
  19. return filename;
  20. }
  21. }