关于jsp源代码

时间:2011-01-03 06:14:21

标签: java jsp

我开发了一个非常大的Web应用程序。如果我需要在JSP页面中进行任何更改,则需要花费太多时间来查找JSP页面,链接,操作等。

那么,是否有任何工具或有任何技术可以直接获取特定JSP页面的代码?

我认为“查看来源”是不同的。它只显示该JSP的来源?

5 个答案:

答案 0 :(得分:4)

您是否尝试过 NetBeans Eclipse MyEclipse 或任何其他 IDE ? 您可以使用此工具的快捷方式在应用程序中查找适当的代码。 它们可以帮助您更快地在应用程序中查找JSP页面。

答案 1 :(得分:3)

技术 - 您可以使用适当的设计模式来对代码进行分段,使每个jsp页面代表“动作”,例如: addFriendAction.jsp。这里的优点是找到合适的页面名称会更容易,因为您只需要引用相应的操作。将此与JSP页面进行比较,在JSP页面中将多个操作合并到同一页面中。下面是一个例子(我假设您正在根据MVC模式使用servlet和jsp页面)。例如使用命令模式将Web应用程序构建为操作(请参阅代码示例4.8- http://java.sun.com/blueprints/guidelines/designing_enterprise_applications_2e/web-tier/web-tier5.html

添加到上面,让我分享我最近使用这种模式的项目。下面是我的servlet类

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package servlets;

import beans.SeekerCustomer;
import java.io.*;
import java.util.HashMap;
import javax.servlet.*;
import javax.servlet.http.*;
/**
 *
 * @author Dhruv
 */

//servlet class acts as controller by delegating
//operations to the respective Action concrete subclass
public class ControllerServlet extends HttpServlet {

    //stores all the possible operation names
    //and operation objects for quick access
    private HashMap actions;

    @Override
    public void init() throws ServletException {
        actions = new HashMap();

        //all the various operations are stored in the hashmap
        CreateUserAction cua = new CreateUserAction(new SeekerCustomer());
        actions.put(cua.getName(), cua);
        ValidateUserAction vua = new ValidateUserAction(new SeekerCustomer());
        actions.put(vua.getName(), vua);
        ListNonFriendsAction lnfa = new ListNonFriendsAction(new SeekerCustomer());
        actions.put(lnfa.getName(), lnfa);
        AddFriendAction afa = new AddFriendAction(new SeekerCustomer());
        actions.put(afa.getName(), afa);
        ConfirmFriendReqAction cfra = new ConfirmFriendReqAction(new SeekerCustomer());
        actions.put(cfra.getName(),cfra);
        DeclineFriendReqAction dfra = new DeclineFriendReqAction(new SeekerCustomer());
        actions.put(dfra.getName(),dfra);
        AddImageAction aia = new AddImageAction(new SeekerCustomer());
        actions.put(aia.getName(),aia);
        ViewImageAction via = new ViewImageAction(new SeekerCustomer());
        actions.put(via.getName(),via);
        ViewAllImagesAction vaia = new ViewAllImagesAction(new SeekerCustomer());
        actions.put(vaia.getName(),vaia);
        AddTagAction ata = new AddTagAction(new SeekerCustomer());
        actions.put(ata.getName(),ata);
        ViewTagAction vta = new ViewTagAction(new SeekerCustomer());
        actions.put(vta.getName(),vta);
        ViewAllTagsAction vata = new ViewAllTagsAction(new SeekerCustomer());
        actions.put(vata.getName(),vata);
        ViewProfileAction vpa = new ViewProfileAction(new SeekerCustomer());
        actions.put(vpa.getName(),vpa);
        EditAccountAction epa = new EditAccountAction(new SeekerCustomer());
        actions.put(epa.getName(),epa);
        ViewOthersImageAction voia = new ViewOthersImageAction(new SeekerCustomer());
        actions.put(voia.getName(), voia);
        AddOthersTagAction aota = new AddOthersTagAction(new SeekerCustomer());
        actions.put(aota.getName(),aota);
        LogoutAction loa = new LogoutAction(new SeekerCustomer());
        actions.put(loa.getName(), loa);
        ToptagsAction tts = new ToptagsAction(new SeekerCustomer());
        actions.put(tts.getName(), tts);
        UpdateAccountAction uaa = new UpdateAccountAction(new SeekerCustomer());
        actions.put(uaa.getName(), uaa);
        ViewAllFriendsAction vafa = new ViewAllFriendsAction(new SeekerCustomer());
        actions.put(vafa.getName(), vafa);
        ReturnHomeAction rha = new ReturnHomeAction(new SeekerCustomer());
        actions.put(rha.getName(),rha);
    }

    public void processRequest(HttpServletRequest req, HttpServletResponse resp) throws IOException, ServletException {

        //identify the operation from the URL
        String op = getOperation(req.getRequestURL());
        //find and execute corresponding Action
        Action action = (Action)actions.get(op);
        Object result = null;
        try {
            //maintain the session between requests
            result = action.perform(req, resp);
            HttpSession session = req.getSession();
            session.setAttribute("session1", result);
        } catch (NullPointerException npx) {
            //nothing to handle
        }
    }

    //both GET and POST operations are directed to "processRequest" method
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        processRequest(request, response);
    }

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

    //uses the URL to identify the operation
    private String getOperation(StringBuffer requestURL) {

        String op="";
        //identifies the last index of "/" before ".do" and 
        //uses that to put each character after the "/" into "op"
        for(int i= requestURL.lastIndexOf("/",requestURL.indexOf(".do"))+1; i<requestURL.indexOf(".do"); i++)
        {
            op= op+requestURL.charAt(i);
        }
        return op;
    }
}

您可以看到每个操作都是在主servlet中通过将其分派给较小的servlet来处理的。 因此,如果单击CreateUserAction,则此操作由CreateUserAction.java servlet处理,然后将该输出重定向到CreateUserAction.jsp。这样,使用适当的模式会对代码进行分段,从而可以轻松地查找相应的JSP页面。这就是我试图在这里使用的模式 - 使用模式!

模板 - 您可以跨页面使用JSP模板,这样您只需要修改模板以实现JSP页面的常见更改(参考http://java.sun.com/developer/technicalArticles/javaserverpages/jsp_templates/

一种相当天真的方式是使用IDE快捷方式。

答案 2 :(得分:0)

生成HTML注释,将每个代码段的源代码直接生成到最终输出中,可能是为了响应“debug”类型的查询参数。然后用“视图源”来看眼代码,你应该能够很容易地找出它的来源。

将这些注释添加到您的代码中需要花费一些时间,但随着时间的推移,您可以随意修改。

答案 3 :(得分:0)

我认为这更倾向于编码标准和最佳实践。

  1. 正确组织您的Web应用程序结构,最好使用Mindmap来可视化页面和组织,以便您可以随时清楚地了解其中的内容。
  2. 使用一个好的IDE工具根据MVC的实践组织内容,其中View保留所有JSP页面。在内部组织它们的组件系列,并使用公共文件夹保留常见的JSP页面。
  3. 使用Eclipse的内置搜索功能,可以搜索源内容。
  4. 长期维护可能有用的是使用Subversion保留所有源代码,以便比较过去和未来的各种源代码版本。

答案 4 :(得分:0)

  1. 为类,JSP等创建一致的命名约定
  2. 重构您的代码更符合惯例。
  3. 维护它。没有例外 (如果你需要一些,请考虑重新设计约定。)
  4. 对于转换尝试拦截渲染阶段并将JSP文件名作为注释放入输出。 (也许这可以帮助Exec. JSP directly...