JAVA WEB作业

JAVA WEB结课作业

1. 编写一个Servlet,实现统计网站被访问被访问次数的功能。

  • ShowTimesServlet类
import jakarta.servlet.ServletContext;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;public class ShowTimesServlet extends HttpServlet {private static final long serialVersionUID = 1L;@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {this.doGet(req, resp);}@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {ServletContext context = req.getServletContext();Integer times = (Integer) context.getAttribute("times");if (times == null) {times = new Integer(1);} else {times = new Integer(times.intValue() + 1);}resp.setContentType("text/html;charset=GB2312");PrintWriter out = resp.getWriter();out.println(""</span><span class="token punctuation">)</span><span class="token punctuation">;</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"页面访问统计"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"");out.println("当前页面被访问了");out.println("" + times +"次");context.setAttribute("times", times);}
}
  • web.xml 的配置信息

<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"version="4.0"><servlet><servlet-name>ShowTimesServletservlet-name><servlet-class>ShowTimesServletservlet-class>servlet><servlet-mapping><servlet-name>ShowTimesServletservlet-name><url-pattern>/ShowTimesServleturl-pattern>servlet-mapping>
web-app>

结果展示

在这里插入图片描述

2. 请编写一段程序,使程序能够读取该Servlet的配置信息,从中获得参数名为encoding对应的参数值,并输出到页面上。

  • TestServlet
import jakarta.servlet.ServletConfig;
import jakarta.servlet.ServletContext;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;import java.io.IOException;
import java.io.PrintWriter;public class TestServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {PrintWriter out = resp.getWriter();ServletConfig config = this.getServletConfig();String param = config.getInitParameter("encoding");out.println("encoding=" + param);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {this.doGet(req, resp);}
}
  • web.xml的配置信息

<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"version="4.0"><servlet><servlet-name>TestServletservlet-name><servlet-class>TestServletservlet-class><init-param><param-name>encodingparam-name><param-value>UTF-8param-value>init-param>servlet><servlet-mapping><servlet-name>TestServletservlet-name><url-pattern>/TestServleturl-pattern>servlet-mapping>
web-app>

结果展示

在这里插入图片描述

3. 编写一个类,该类使用HttpServletRequest对象的getHeader(“referer”)方法实现下载资源防盗链的功能。

  • DownManagerServlet
import jakarta.servlet.RequestDispatcher;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;import java.io.IOException;
import java.io.PrintWriter;
import java.io.StringReader;public class DownManagerServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {resp.setContentType("text/html;charset=utf-8");PrintWriter out = resp.getWriter();String referer = req.getHeader("referer");String sitPart = "http://" + req.getServerName();if (referer != null && referer.startsWith(sitPart)) {out.println("dealing download ... ");} else {RequestDispatcher rd = req.getRequestDispatcher("/download.html");rd.forward(req, resp);}}}
  • download.html
DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Insert title heretitle>
head>
<body><a href="DownManagerServlet">downloada>
body>
html>
  • web.xml的配置信息

<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"version="4.0"><servlet><servlet-name>DownManagerServletservlet-name><servlet-class>DownManagerServletservlet-class>servlet><servlet-mapping><servlet-name>DownManagerServletservlet-name><url-pattern>/DownManagerServleturl-pattern>servlet-mapping>
web-app>

结果展示

在这里插入图片描述

点击后结果

在这里插入图片描述

4. 请设计一个程序,使用Session技术实现购物车功能。

  • Book类
import java.io.Serializable;public class Book implements Serializable {private static final long serialVersionUID = 1L;private String id;private String name;public Book(String id, String name) {this.id = id;this.name = name;}public String getId() {return id;}public void setId(String id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}
}
  • BookDB类
import java.util.Collection;
import java.util.LinkedHashMap;
import java.util.Map;public class BookDB {private static Map<String, Book> books = new LinkedHashMap<String, Book>();static {books.put("1", new Book("1", "javaweb开发"));books.put("2", new Book("2", "jdbc开发"));books.put("3", new Book("3", "java基础"));books.put("4", new Book("4", "struts开发"));books.put("5", new Book("5", "spring开发"));}public static Collection<Book> getAll() {return books.values();}public static Book getBook(String id) {return books.get(id);}
}
  • ListBookServlet
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;import java.io.IOException;
import java.io.PrintWriter;
import java.util.Collection;public class ListBookServlet extends HttpServlet {private static final long serialVersionUID = 1L;@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {resp.setContentType("text/html;charset=utf-8");PrintWriter out = resp.getWriter();Collection<Book> books = BookDB.getAll();out.write("本站提供的图书有:
"
);for (Book book : books) {String url = "/chapter05/PurchaseServlet?id=" + book.getId();out.write(book.getName() + " + url+ "'>点击购买
"
);}} }
  • PurchaseServlet
import jakarta.servlet.ServletException;
import jakarta.servlet.http.*;import java.io.IOException;
import java.util.ArrayList;
import java.util.List;public class PurchaseServlet extends HttpServlet {private static final long serivalVersionUID = 1L;@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {String id = req.getParameter("id");if (id == null) {String url = "ListBookServlet";resp.sendRedirect(url);return;}Book book = BookDB.getBook(id);HttpSession session = req.getSession();List<Book> cart = (List<Book>) session.getAttribute("cart");if (cart == null) {cart = new ArrayList<Book>();session.setAttribute("cart", cart);}cart.add(book);Cookie cookie = new Cookie("JSESSIONID", session.getId());cookie.setMaxAge(60 * 30);resp.addCookie(cookie);String url = "CartServlet";resp.sendRedirect(url);}
}
  • CartServlet
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.servlet.http.HttpSession;import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;public class CartServlet extends HttpServlet {public void doGet(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {resp.setContentType("text/html;charset=utf-8");PrintWriter out = resp.getWriter();// 变量cart引用用户的购物车List<Book> cart = null;// 变量pruFlag标记用户是否买过商品boolean purFlag = true;// 获得用户的sessionHttpSession session = req.getSession(false);if (session == null) {purFlag = false;} else {cart = (List<Book>) session.getAttribute("cart");if (cart == null) {purFlag = false;}}if (!purFlag) {out.write("对不起!您还没有购买任何商品!
"
);} else {out.write("您购买的图书有:
"
);double price = 0;for (Book book : cart) {out.write(book.getName() + "
"
);}}} }
  • web.xml的配置信息

<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"version="4.0"><servlet><display-name>ListBookServletdisplay-name><servlet-name>ListBookServletservlet-name><servlet-class>ListBookServletservlet-class>servlet><servlet-mapping><servlet-name>ListBookServletservlet-name><url-pattern>/ListBookServleturl-pattern>servlet-mapping><servlet><display-name>PurchaseServletdisplay-name><servlet-name>PurchaseServletservlet-name><servlet-class>PurchaseServletservlet-class>servlet><servlet-mapping><servlet-name>PurchaseServletservlet-name><url-pattern>/PurcahseServleturl-pattern>servlet-mapping><servlet><display-name>CartServletdisplay-name><servlet-name>CartServletservlet-name><servlet-class>CartServletservlet-class>servlet><servlet-mapping><servlet-name>CartServletservlet-name><url-pattern>/CartServleturl-pattern>servlet-mapping>
web-app>

结果展示

在这里插入图片描述

5. 请使用include标签编写两个JSP页面,要求:访问b.jsp页面时先输出b.jsp页面的内容,等待5秒,再输出a.jsp页面中的内容。

  • a.jsp
<%--Created by IntelliJ IDEA.User: huaweiDate: 2022/6/21Time: 23:09To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%Thread.sleep(5000); %>
<html>
<head><title>Titletitle>
head>
<body>这个是a.jsp的页面<br />
body>
html>
  • b.jsp
<%--Created by IntelliJ IDEA.User: huaweiDate: 2022/6/21Time: 23:09To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%Thread.sleep(5000); %>
<html>
<head><title>Titletitle>
head>
<body>这个是a.jsp的页面<br />
body>
html>

结果展示

在这里插入图片描述
5秒后
在这里插入图片描述

6. 请在web.xml文件中使用元素为整个Web应用程序设置错误处理页面。已知:处理状态码为404的页面为404.jsp, 处理状态码为500的页面为500.jsp。

  • web.xml的配置信息

<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"version="4.0"><error-page><location>/404.jsplocation><error-code>404error-code>error-page><error-page><location>/500.jsplocation><error-code>500error-code>error-page>
web-app>

结果展示

在这里插入图片描述
在这里插入图片描述

7. 请按要求编写一个c_ choose.jsp页面,使用这三个标签完成多个条件选择的程序。 要求: 1)访问c_choose.jsp页面时不传递参数时,浏览器中显示的信息为unknown user 2)访问c_choose.jsp页面时传递一个参数username=zhangsan时,浏览器中显示的信息为zhangsan is a manager 3)访问c_choose.jsp页面时传递username参数为zhangsan以外的值时,浏览器中显示的信息为you are a manager

这里需要注意!!!
Tomcat10版本需要用:
jakarta.servlet.jsp.jstl-2.0.0.jar
jakarta.servlet.jsp.jstl-api-2.0.0.jar
注:lib下只能有这两个jstl包,不能有其他的jstl包,不然依旧会报错

使用的jar包

在这里插入图片描述

  • c_choose:
<%--Created by IntelliJ IDEA.User: huaweiDate: 2022/6/21Time: 23:28To change this template use File | Settings | File Templates.
--%>
<%@ page language="java" contentType="text/html;
charset=utf-8" pageEncoding="utf-8" import="java.util.*"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core"prefix="c"%>
<html>
<head>head>
<body><c:choose><c:when test="${empty param.username}">unknown userc:when><c:when test="${param.username=='zhangsan' }">${ param.username} is managerc:when><c:otherwise>you are a managerc:otherwise>c:choose>
body>
html>

结果展示

  1. 不传递任何参数
    在这里插入图片描述
  2. 参数为"zhangsan"
    在这里插入图片描述
  3. 参数不为"zhangsan"
    在这里插入图片描述

8. 使用EL表达式和JSTL实现将文本框中的内容输出到页面的功能,在此页面的文本框中输入内容,单击页面提交按钮之后,输入框以及按钮消失,文本框中输入的内容显示到页面。

使用的jar包

在这里插入图片描述

  • c_choose
<%--Created by IntelliJ IDEA.User: huaweiDate: 2022/6/21Time: 23:28To change this template use File | Settings | File Templates.
--%>
<%@ page language="java" contentType="text/html;
charset=utf-8" pageEncoding="utf-8" import="java.util.*"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core"prefix="c"%>
<html>
<head>welcomehead>
<body><form action="${pageContext.request.contextPath}/c_choose.jsp"><c:if test="${empty param.num1}">name: <input type="text" name="num1"><input type="submit" value="submit" /><br />c:if><c:if test="${not empty param.num1}">${param.num1} welcome! ! <br />c:if>form>
body>
html>

结果展示

在这里插入图片描述
输入名字后:
在这里插入图片描述

9. Person类为一个标准的JavaBean类,请设计一个程序,要求使用BeanUtils工具为Person对象赋值。 1)直接生成Person对象。 2)使用BeanUtils工具为name属性赋值”Tom”,age赋值为31。 3)使用BeanUtils工具取出属性值,并在控制台输出。

使用的jar包

在这里插入图片描述

  • Person类
public class Person {private String name;private int age;public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}
}
  • BeanUtilsDemo01
import org.apache.commons.beanutils.BeanUtils;public class BeanUtilsDemo01 {public static void main(String[] args) throws Exception {Person p = new Person();BeanUtils.setProperty(p, "name", "Tom");BeanUtils.setProperty(p, "age", 31);String name = BeanUtils.getProperty(p, "name");String age = BeanUtils.getProperty(p, "age");System.out.println("名字是" + name + ",今年" + age + "岁");}
}

结果展示

数据库内的user表
在这里插入图片描述
IDEA结果
在这里插入图片描述

10. 已知有一个名为MyServlet的程序,程序可向浏览器输出“Hello MyServlet”。请编写一个用于拦截MyServlet程序的MyFilter拦截器。 要求如下: 1)编写名为MyFilter的过滤器,过滤器可向浏览器输出“Hello MyFilter”。 2)编写web.xml文件,配置MyFilter对MyServlet的拦截。

  • MyServlet
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;import java.io.IOException;public class MyServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {resp.getWriter().write("Hello MyServlet");}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {this.doGet(req, resp);}
}
  • MyFilter
import jakarta.servlet.*;import java.io.IOException;
import java.io.PrintWriter;public class MyFilter implements Filter {public void destroy() {}public void doFilter(ServletRequest req, ServletResponse resp,FilterChain chain) throws IOException, ServletException {PrintWriter out = resp.getWriter();out.write("Hello MyFilter");}public void init(FilterConfig fConfig) throws ServletException {}
}
  • web.xml的配置文件

<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"version="4.0"><servlet><servlet-name>MyServletservlet-name><servlet-class>MyServletservlet-class>servlet><servlet-mapping><servlet-name>MyServletservlet-name><url-pattern>/MyServleturl-pattern>servlet-mapping><filter><filter-name>MyFilterfilter-name><filter-class>MyFilterfilter-class>filter><filter-mapping><filter-name>MyFilterfilter-name><url-pattern>/MyServleturl-pattern>filter-mapping>
web-app>

结果展示

在这里插入图片描述

11. 请用第10章中学习的数据库连接池和DBUtils工具,编写一个用于读取数据库中users表信息的程序,要求分别获取字段id、name、password和email字段的值.

使用的jar包

在这里插入图片描述

  • Example01
import javax.xml.transform.Result;
import java.sql.*;public class Example01 {public static void main(String[] args) throws Exception {DriverManager.registerDriver(new com.mysql.cj.jdbc.Driver());String url = "jdbc:mysql://localhost:3306/school";String username = "root";String password = "*******";Connection conn = DriverManager.getConnection(url, username, password);Statement stm = conn.createStatement();String sql = "select * from user";ResultSet rs = stm.executeQuery(sql);System.out.println("id | name | password | email |");while (rs.next()) {int id = rs.getInt("id");String name = rs.getString("name");String psw = rs.getString("password");String email = rs.getString("email");System.out.println(id + " | " + name + " | " + psw + " | " + email + " |");}rs.close();stm.close();conn.close();}
}

12. 请编写一个用于实现文件下载的程序,并且保证下载文件的文件名不能出现中文乱码问题。

  • download.jsp
<%--Created by IntelliJ IDEA.User: huaweiDate: 2022/6/22Time: 2:33To change this template use File | Settings | File Templates.
--%>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>文件下载title>
head>
<body>
<a href="${pagContext.request.contextPath}DownloadServlet"}>文件下载
a>
<br />
body>
html>
  • DownloadServlet
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;import java.io.*;
import java.net.URLEncoder;public class DownloadServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {resp.setContentType("text/html;charset=utf-8");String path= getServletContext().getRealPath("D:\\五一建模图片\\部件二测试结果的方差");File file = new File(path);resp.addHeader("Content-Type", "application/octent-stream");resp.addHeader("Content-Disposition", "attachment;filename="+ URLEncoder.encode(file.getName(), "utf-8"));InputStream in = new FileInputStream(file);OutputStream out = resp.getOutputStream();byte[] buffer = new byte[1024];int len;while ((len = in.read(buffer)) != -1) {out.write(buffer, 0, len);}}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {this.doGet(req, resp);}
}

结果展示

在这里插入图片描述

13. 请按照以下要求设计一个实现文件上传的类UploadServlet。 要求如下: 1)已知form.html文件中form表单内定义了一个名为name的文本框及名为myfile的文件域,具备文件上传的前提条件。 2)在doPost()方法中,写出文件上传的相关代码。 3)上传的文件保存在当前应用程序的upload文件夹下。

使用的jar包

在这里插入图片描述

  • test.jsp
<%--Created by IntelliJ IDEA.User: huaweiDate: 2022/6/22Time: 0:36To change this template use File | Settings | File Templates.
--%>
<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Insert title heretitle>
head>
<body><form name="regForm" action="UploadServlet"  method="post" enctype="multipart/form-data"><table width="500" align="center" border="1"><tr><td colspan="2">用户注册td>tr><tr><td>账号td><td><input name="userName" type="text">td>tr><tr><td>密码td><td><input name="password" type="password">td>tr><tr><td>头像td><td><input name="userHead" type="file">td>tr><tr><td><input type="submit">td><td><input type="reset">td>tr>table>form>body>
html>
  • UploadServlet
import jakarta.servlet.ServletContext;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.RequestContext;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;import java.io.*;
import java.util.List;
import java.util.UUID;public class UploadServlet extends HttpServlet {public void doGet(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {resp.setContentType("text/html;charset=utf-8");try {DiskFileItemFactory factory = new DiskFileItemFactory();factory.setRepository(new File("e:\\Target"));ServletFileUpload fileupload = new ServletFileUpload(factory);fileupload.setHeaderEncoding("utf-8");List<FileItem> fileitems = fileupload.parseRequest(req);PrintWriter writer = resp.getWriter();for (FileItem fileitem : fileitems) {if (fileitem.isFormField()) {String name = fileitem.getFieldName();String value = fileitem.getString("utf-8");} else {String filename = fileitem.getName();writer.print("文件来源:" + filename + "
"
);filename = filename.substring(filename.lastIndexOf("\\") + 1);writer.print("成功上传的文件:" + filename + "
"
);filename = UUID.randomUUID().toString() + "_" + filename;String webPath = "/upload/" + filename;String path = getServletContext().getRealPath(webPath);File file = new File(path);file.getParentFile().mkdirs();file.createNewFile();InputStream in = fileitem.getInputStream();OutputStream out = new FileOutputStream(file);byte[] buffer = new byte[1024];int len;while ((len = in.read(buffer)) > 0)out.write(buffer, 0, len);in.close();out.close();fileitem.delete();}}} catch (Exception e) {throw new RuntimeException(e);}}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doGet(request, response);} }

结果展示

在这里插入图片描述
在这里插入图片描述


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部