首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Tomcat/JSP/servlets web-project

Tomcat/JSP/servlets web-project
EN

Code Review用户
提问于 2012-03-08 13:35:33
回答 1查看 1.1K关注 0票数 2

这是一种简单的数组。数组(实际上我使用了ArrayList)存储在服务器上的default_list.txt文件中,对它的所有更改都是使用servlet进行的。

Add.java:

代码语言:javascript
复制
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class Add extends HttpServlet {

    protected void processRequest(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {

        addNumber(request);
        goToPage("/index.jsp", request, response);
    }

    private void goToPage(String address, HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {
        RequestDispatcher dispatcher = getServletContext()
                .getRequestDispatcher(address);
        dispatcher.forward(request, response);
    }

    public static void addNumber(HttpServletRequest request) {

        try {
            HttpSession session = request.getSession(true);
            String path = session.getServletContext().getRealPath("/")
                    + "default_list.txt";
            String path2 = session.getServletContext().getRealPath("/")
                    + "sorted_list.txt";
            int numbers = Integer.parseInt(request.getParameter("textarea1"));
            FileWriter writer = new FileWriter(path, true);
            writer.write(numbers + "\n");
            writer.flush();
            writer.close();

            List<String> buf = new ArrayList<String>();
            File sorted_list = new File(path2);
            sorted_list.delete();
            ArrayList<Integer> arr = new ArrayList<Integer>();
            FileReader filereader = new FileReader(path);
            BufferedReader br = new BufferedReader(filereader);
            String eachLine = br.readLine();
            while (eachLine != null) {
                arr.add(Integer.parseInt(eachLine));
                eachLine = br.readLine();
            }
            filereader.close();

            long timeout = System.currentTimeMillis();
            Collections.sort(arr);
            timeout = System.currentTimeMillis() - timeout;

            writer = new FileWriter(path2, true);
            for (int i = 0; i < arr.size(); ++i)
                buf.add(arr.get(i) + "\n");
            for (String record : buf) {
                writer.write(record);
            }
            if (arr.size() > 0) {
                writer.write("Sort method executed in " + timeout + " ms.\n");
            }
            writer.flush();
            writer.close();

        } catch (Exception e) {
        }
    }

    protected void doGet(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {
        processRequest(request, response);
    }

    protected void doPost(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {
        processRequest(request, response);
    }

}

Delete.java:

代码语言:javascript
复制
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class Delete extends HttpServlet {

    protected void processRequest(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {

        addNumber(request);
        goToPage("/index.jsp", request, response);
    }

    private void goToPage(String address, HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {
        RequestDispatcher dispatcher = getServletContext()
                .getRequestDispatcher(address);
        dispatcher.forward(request, response);
    }

    public static void addNumber(HttpServletRequest request) {

        try {
            HttpSession session = request.getSession(true);
            List<String> buf = new ArrayList<String>();
            List<String> buf2 = new ArrayList<String>();
            String path = session.getServletContext().getRealPath("/")
                    + "default_list.txt";
            String path2 = session.getServletContext().getRealPath("/")
                    + "sorted_list.txt";

            ArrayList<Integer> arr = new ArrayList<Integer>();
            FileReader filereader = new FileReader(path);
            BufferedReader br = new BufferedReader(filereader);
            String eachLine = br.readLine();
            while (eachLine != null) {
                arr.add(Integer.parseInt(eachLine));
                eachLine = br.readLine();
            }
            filereader.close();

            if (arr.size() > 0) {
                arr.remove(arr.size() - 1);
                File path_buf = new File(path);
                path_buf.delete();

                FileWriter writer = new FileWriter(path, true);
                for (int i = 0; i < arr.size(); ++i)
                    buf.add(arr.get(i) + "\n");
                for (String record : buf) {
                    writer.write(record);
                }
                buf.clear();
                arr.clear();
                writer.flush();
                writer.close();
            }

            File sorted_list = new File(path2);
            sorted_list.delete();
            filereader = new FileReader(path);
            br = new BufferedReader(filereader);
            eachLine = br.readLine();
            while (eachLine != null) {
                arr.add(Integer.parseInt(eachLine));
                eachLine = br.readLine();
            }
            filereader.close();
            long timeout = System.currentTimeMillis();
            Collections.sort(arr);
            timeout = System.currentTimeMillis() - timeout;
            FileWriter writer = new FileWriter(path2, true);
            for (int i = 0; i < arr.size(); ++i)
                buf.add(arr.get(i) + "\n");
            for (String record : buf) {
                writer.write(record);
            }
            if (arr.size() > 0) {
                writer.write("Sort method executed in " + timeout + " ms.\n");
            }
            writer.flush();
            writer.close();

        }

        catch (Exception e) {
        }
    }

    protected void doGet(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {
        processRequest(request, response);
    }

    protected void doPost(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {
        processRequest(request, response);
    }

}

Erase.java:

代码语言:javascript
复制
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class Erase extends HttpServlet {

    protected void processRequest(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {

        addNumber(request);
        goToPage("/index.jsp", request, response);
    }

    private void goToPage(String address, HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {
        RequestDispatcher dispatcher = getServletContext()
                .getRequestDispatcher(address);
        dispatcher.forward(request, response);
    }

    public static void addNumber(HttpServletRequest request) {

        try {
            HttpSession session = request.getSession(true);

            String path = session.getServletContext().getRealPath("/")
                    + "default_list.txt";
            File list = new File(path);
            list.delete();
            FileWriter writer = new FileWriter(path, true);
            writer.flush();
            writer.close();

            path = session.getServletContext().getRealPath("/")
                    + "sorted_list.txt";
            list = new File(path);
            list.delete();
            writer = new FileWriter(path, true);
            writer.flush();
            writer.close();
        } catch (Exception e) {
        }
    }

    protected void doGet(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {
        processRequest(request, response);
    }

    protected void doPost(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {
        processRequest(request, response);
    }

}

Generate.java:

代码语言:javascript
复制
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Random;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class Generate extends HttpServlet {

    protected void processRequest(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {

        addNumber(request);
        goToPage("/index.jsp", request, response);
    }

    private void goToPage(String address, HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {
        RequestDispatcher dispatcher = getServletContext()
                .getRequestDispatcher(address);
        dispatcher.forward(request, response);
    }

    public static void addNumber(HttpServletRequest request) {

        try {
            HttpSession session = request.getSession(true);
            List<String> buf = new ArrayList<String>();
            String path = session.getServletContext().getRealPath("/")
                    + "default_list.txt";
            String path2 = session.getServletContext().getRealPath("/")
                    + "sorted_list.txt";
            try {
                short amount = Short.parseShort(request
                        .getParameter("textarea2"));
                Random randomGenerator = new Random();
                FileWriter writer = new FileWriter(path, true);
                for (int i = 0; i < amount; ++i)
                    buf.add(randomGenerator.nextInt(100) + "\n");
                for (String record : buf) {
                    writer.write(record);
                }
                writer.flush();
                writer.close();
                buf.clear();

                File sorted_list = new File(path2);
                sorted_list.delete();
                ArrayList<Integer> arr = new ArrayList<Integer>();
                FileReader filereader = new FileReader(path);
                BufferedReader br = new BufferedReader(filereader);
                String eachLine = br.readLine();
                while (eachLine != null) {
                    arr.add(Integer.parseInt(eachLine));
                    eachLine = br.readLine();
                }
                filereader.close();
                long timeout = System.currentTimeMillis();
                Collections.sort(arr);
                timeout = System.currentTimeMillis() - timeout;
                FileWriter writer2 = new FileWriter(path2, true);
                for (int i = 0; i < arr.size(); ++i)
                    buf.add(arr.get(i) + "\n");
                for (String record : buf) {
                    writer2.write(record);
                }
                if (arr.size() > 0) {
                    writer2.write("Sort method executed in " + timeout
                            + " ms.\n");
                }
                writer2.flush();
                writer2.close();

            } catch (Exception e) {
            }
            ;
        } catch (Exception e) {
        }
    }

    protected void doGet(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {
        processRequest(request, response);
    }

    protected void doPost(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {
        processRequest(request, response);
    }

}

index.jsp:

代码语言:javascript
复制
<%@ page import="java.util.*" %>
<%@ page import="java.io.*" %>
<HTML>
<HEAD>
<TITLE>Sample sort</TITLE>
</HEAD>
<BODY>
<H1>JSP/Servlet sorting sample.</H1>
<FORM ACTION="list.add" METHOD="POST">
  Input a number:
  <input type="text" name="textarea1">
  <INPUT TYPE="SUBMIT" VALUE="Add">
</form>
<FORM ACTION="list.gen" METHOD="POST">
  Enter amount of numbers to generate:
  <input type="text" name="textarea2">
  <input type="SUBMIT" value="Generate">
</FORM>
<table>
<tr>

<td><form action="list.del" method="POST">
  <input type="SUBMIT" value="Delete last">
</form></td>
<td><form action="list.erase" method="POST">
  <input type="SUBMIT" value="Clear">
</form></td>
  </tr>
</table>
<table width="500">
<tr>
<td width="250">
Your list:
<br>
<br>    
<%
String file = application.getRealPath("/") + "default_list.txt";
FileReader filereader = new FileReader(file);
BufferedReader br = new BufferedReader(filereader);
String eachLine = br.readLine();
while (eachLine != null) {
out.println(eachLine);
out.println("<br>");
eachLine = br.readLine();
}
filereader.close();       
%>
</td>
<td width="250">
Sorted list:
<br>
<br>
<%
String file2 = application.getRealPath("/") + "sorted_list.txt";
FileReader filereader2 = new FileReader(file2);
BufferedReader br2 = new BufferedReader(filereader2);
String eachLine2 = br2.readLine();
while (eachLine2 != null) {
out.println(eachLine2);
out.println("<br>");
eachLine2 = br2.readLine();
}
filereader2.close();       
%>
</td>
  </tr>
</table>
</BODY>
<HTML>

或者,整个项目是这里.fcjrg5nms979in9

我想要的是:

  1. 我做得好吗?可能会有一些重大的错误?
  2. 你建议我做些什么让它变得更好?(更安全、更快、更简单)
EN

回答 1

Code Review用户

发布于 2012-03-08 14:16:26

快速浏览,这里有几个提示

1)关注点分离(SoC)。让您的视图(jsp)处理呈现,Controller (servlet)处理应用程序的流,并在另一组类中处理所有处理。这将是MVC的基础。下面是一个简单布局的维基百科定义。

模型--该模型是Java类的集合,这些类构成了一个软件应用程序,用于存储数据,并可选择地分离数据。可以与任何用户界面通信的单个前端类(例如:控制台、图形用户界面或web应用程序)。视图-视图由Java表示,数据被传输到HttpServletRequest或HttpSession中的页面。控制器- Controller与模型的前端通信,并在转发HttpServletRequest和使用RequestDispatcher向RequestDispatcher响应之前加载适当的数据。

2)在JSP中不要使用scriptlet。在养成使用scriptlet的习惯之前,请考虑学习jstl。为什么脚本是坏的?阅读这个详细的答案

3)所有servlet都有goToPage()、doGet()、doPost()和ProcessRequest()方法。每次创建新的servlet时,都要重写大量的内容。考虑在servlet和HttpServlet之间创建一个抽象类,它定义了这些方法。

代码语言:javascript
复制
public abstract class BaseServlet extends HttpServlet{
    //You must define this 
    protected abstract void processRequest(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException;

    protected void goToPage(String address, HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {
        RequestDispatcher dispatcher = getServletContext().getRequestDispatcher(address);
        dispatcher.forward(request, response);

    }

    protected void doGet(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {
        processRequest(request, response);
    }

    protected void doPost(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {
        processRequest(request, response);
    }
}

现在,您所要做的就是扩展BaseServlet而不是HttpServlet,并且您可以使用这些方法而不需要重写。如果您以后要找到一个bug,或者现在想重写它,您只需在一个地方查看,而不是在每个servlet中更改它。

票数 2
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/9865

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档