Java Web 开发实战:创建服务器接收网页请求并实现不同功能
该题需要使用 Java Web 开发的相关知识,包括 Servlet、Tomcat 等,以下是代码示例:
首先创建一个 Servlet 类,命名为 MainServlet,实现 doGet 方法,根据请求路径的不同,调用不同的方法:
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class MainServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String path = req.getServletPath();
if (path.equals("/print")) {
print();
} else if (path.equals("/zhishu")) {
zhishu();
} else if (path.equals("/sort")) {
sort();
} else if (path.equals("/string")) {
string(req, resp);
} else if (path.equals("/date")) {
date(req, resp);
} else if (path.equals("/arr")) {
arr();
} else if (path.equals("/set")) {
set();
} else if (path.equals("/map")) {
map(req, resp);
} else if (path.equals("/io")) {
io();
} else if (path.equals("/thread")) {
thread();
} else if (path.equals("/streamapi")) {
streamapi();
} else {
resp.setContentType("text/plain");
resp.setStatus(404);
PrintWriter out = resp.getWriter();
out.println("404 Not Found");
out.close();
}
}
private void print() {
int num = 12345678;
// 第一种方式
String str = String.valueOf(num);
for (int i = str.length() - 1; i >= 0; i--) {
System.out.print(str.charAt(i));
}
System.out.println();
// 第二种方式
char[] arr = str.toCharArray();
for (int i = arr.length - 1; i >= 0; i--) {
System.out.print(arr[i]);
}
System.out.println();
// 第三种方式
List<Integer> list = Arrays.stream(arr).map(c -> Integer.parseInt(String.valueOf(c))).collect(Collectors.toList());
Collections.reverse(list);
list.forEach(System.out::print);
System.out.println();
}
private void zhishu() {
for (int i = 100; i <= 200; i++) {
boolean flag = true;
for (int j = 2; j <= Math.sqrt(i); j++) {
if (i % j == 0) {
flag = false;
break;
}
}
if (flag) {
System.out.print(i + " ");
}
}
System.out.println();
}
private void sort() {
int[] arr = new int[10];
for (int i = 0; i < arr.length; i++) {
arr[i] = (int) (Math.random() * 100);
}
System.out.println("排序前:" + Arrays.toString(arr));
for (int i = 0; i < arr.length - 1; i++) {
for (int j = 0; j < arr.length - 1 - i; j++) {
if (arr[j] > arr[j + 1]) {
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
System.out.println("排序后:" + Arrays.toString(arr));
}
private void string(HttpServletRequest req, HttpServletResponse resp) throws IOException {
String host = req.getServerName();
resp.setContentType("text/plain");
PrintWriter out = resp.getWriter();
out.println(host);
out.close();
}
private void date(HttpServletRequest req, HttpServletResponse resp) throws IOException {
resp.setContentType("text/plain");
PrintWriter out = resp.getWriter();
out.println("当前时间:" + new java.util.Date().toString());
out.close();
}
private void arr() {
int n = 20;
int[] arr = new int[n];
for (int i = 0; i < n; i++) {
arr[i] = i + 1;
}
int count = 0;
int index = -1;
while (count < n) {
for (int i = 0; i < 3; i++) {
index++;
if (index == n) {
index = 0;
}
while (arr[index] == 0) {
index++;
if (index == n) {
index = 0;
}
}
}
System.out.println("第" + (count + 1) + "轮删除:" + arr[index]);
arr[index] = 0;
count++;
}
}
private void set() {
String str = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 4; i++) {
int index = (int) (Math.random() * str.length());
sb.append(str.charAt(index));
}
System.out.println(sb.toString());
}
private void map(HttpServletRequest req, HttpServletResponse resp) throws IOException {
String str = req.getParameter("str");
if (str == null) {
resp.setContentType("text/html");
PrintWriter out = resp.getWriter();
out.println("<html><body>");
out.println("<form method=\"GET\" action=\"/map\">");
out.println("输入字符串:<input type=\"text\" name=\"str\">");
out.println("<input type=\"submit\" value=\"统计\">");
out.println("</form>");
out.println("</body></html>");
out.close();
} else {
int[] count = new int[256];
for (int i = 0; i < str.length(); i++) {
char c = str.charAt(i);
count[c]++;
}
for (int i = 0; i < count.length; i++) {
if (count[i] > 0) {
System.out.println((char) i + ":" + count[i]);
}
}
}
}
private void io() throws IOException {
FileInputStream fis = new FileInputStream("input.txt");
FileOutputStream fos = new FileOutputStream("output.txt");
byte[] buffer = new byte[1024];
int length;
while ((length = fis.read(buffer)) != -1) {
fos.write(buffer, 0, length);
}
fis.close();
fos.close();
}
private void thread() {
int count = 100;
int[] tickets = new int[count];
for (int i = 0; i < count; i++) {
tickets[i] = i + 1;
}
for (int i = 0; i < count; i++) {
int index = i;
new Thread(() -> {
synchronized (MainServlet.class) {
int ticket = tickets[index];
try {
Thread.sleep((long) (Math.random() * 1000));
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + " 抢到了第" + ticket + "张票");
}
}, "用户" + (i + 1)).start();
}
}
private void streamapi() {
List<Integer> list = Arrays.stream(new int[100]).map(i -> (int) (Math.random() * 2000)).boxed().collect(Collectors.toList());
System.out.println("原始数据:" + list);
list = list.stream().filter(i -> i >= 100 && i <= 1000).distinct().collect(Collectors.toList());
System.out.println("过滤后:" + list);
list = list.stream().sorted().collect(Collectors.toList());
System.out.println("排序后:" + list);
list = list.stream().sorted(Collections.reverseOrder()).collect(Collectors.toList());
System.out.println("倒序后:" + list);
list = list.stream().limit(10).collect(Collectors.toList());
System.out.println("取前10个:" + list);
list = list.stream().skip(5).collect(Collectors.toList());
System.out.println("跳过前5个:" + list);
list = list.stream().map(i -> i * 2).collect(Collectors.toList());
System.out.println("每个数乘以2:" + list);
list = list.stream().distinct().collect(Collectors.toList());
System.out.println("去重后:" + list);
System.out.println("转换成Set集合:" + list.stream().collect(Collectors.toSet()));
}
}
在 web.xml 文件中配置 Servlet:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
<servlet>
<servlet-name>MainServlet</servlet-name>
<servlet-class>MainServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>MainServlet</servlet-name>
<url-pattern>/print</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>MainServlet</servlet-name>
<url-pattern>/zhishu</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>MainServlet</servlet-name>
<url-pattern>/sort</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>MainServlet</servlet-name>
<url-pattern>/string</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>MainServlet</servlet-name>
<url-pattern>/date</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>MainServlet</servlet-name>
<url-pattern>/arr</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>MainServlet</servlet-name>
<url-pattern>/set</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>MainServlet</servlet-name>
<url-pattern>/map</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>MainServlet</servlet-name>
<url-pattern>/io</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>MainServlet</servlet-name>
<url-pattern>/thread</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>MainServlet</servlet-name>
<url-pattern>/streamapi</url-pattern>
</servlet-mapping>
</web-app>
最后启动 Tomcat 服务器,通过浏览器访问对应的请求路径即可看到效果。例如:http://localhost:9898/print
原文地址: https://www.cveoy.top/t/topic/oSPU 著作权归作者所有。请勿转载和采集!