前言
例如:作为一个一直打算法竞赛的打铁选手(恼),学习了web之后就想过怎么在网页上写代码(其实是好奇那些算法网站是怎么做的),下面这个列子其实是我的第一个servlet程序,其实还是后端写的代码来在前端输出结果(大雾,果然y总yyds),虽然说这个算法对于各位大佬来说是大水题,但是本文主要要是为了熟悉servlet的使用,算法看个乐就行(才不是为了水博客)。
一、设计思路
1.表单获取输入信息
表单标签:<from></from>
重要属性:
input :表单元素,表单项
action:表示当前表单中的内容提交给哪个页面进行处理
type="text" :单行文本输入框
type="password":密码输入框
type="submit" :将表单信息提交给表单属性action所指向的文件
2.算法实现
因为主要介绍servlet所以这一段略讲
思路很简单:只不过与传统的递归不同,我这里采用的是dp算法。
dp[i]表示第i个状态的值,然后递推求解就行了。
3.servlet的函数
这里主要展示我使用了的函数
输出的格式和编码
resp.setContentType("text/html;charset= utf-8");
设置输出流,然后通过out可以在页面显示输出结果
PrintWriter out = resp.getWriter();
表单中value的名字叫做number可以通过该方法获取
String str=req.getParameter("number");
二、主要的代码实现
1.html
代码如下:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>私人斐波拉契数列计算</title>
</head>
<body>
<!--这里有一个知识点:相对路径和绝对路径,在客户端看的时候的理解 -->
<form action="./privateMul">
输入要计算的斐波拉契数列长度:
<input type="text" name="number">
<input type="submit" value="累加计算">
</form>
</body>
</html>
2.servlet子类设计
代码如下:
package servlet;
import javax.servlet.*;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
//这里使用的是接口
public class PrivateMul extends HttpServlet {
//输出一个前n个斐波拉契数列
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//输出的格式和编码
resp.setContentType("text/html;charset= utf-8");
//设置输出流
PrintWriter out = resp.getWriter();
//表单中value的名字叫做number可以通过该方法获取
String str=req.getParameter("number");
//字符串类型转换为整数类型
int num=Integer.parseInt(str);
int f[] =new int[1000];
//计算斐波拉契数列,采用dp计算
//首先初始化f[0],f[1];
f[0]=f[1]=1;
for(int i=2;i<num;i++){
f[i]=f[i-1]+f[i-2];
}
//输出斐波拉契数列
int cnt=0;
out.println("计算出的斐波拉契数列为: ");
for(int i=0;i<num;i++,cnt++){
//每行输出十个数字
if(cnt==10){
out.println();
cnt=0;
}
out.print(f[i]+" ");
}
}
}
三、其中出现的BUG
这一段代码中action属性中的绝对路径需要注意,否则容易不能跳转不到servlet界面
总结
servlet的第一个代码接这样第一次尝试出来了,但其中的很多小细节却是博客中没有写出来的,比如说对于每个文档的路径如何设计,如何保证能访问到该文件,这是我在这次小项目中所体会到的。