各位学长、前辈,我是一个JSP初学者,一直不明白jsp的基本结构与工作原理,看了好多书还是很模糊,请大家帮我指点迷津。我现在对jsp的疑问如下:1.JSP、Servlet、Class、XML、JAR 文件之间是如何协同工作的?如果能给我提供一个完整而又尽可能简单的JSP代码(包括这几类重要文件)最好不过了?先谢过了。2.JSP中可以直接编写类吗?如:public class Test{public static void main(String args[]){System.out.println("Hello,world!");}}?3.如果程序需要实现交互功能,相关的Class是不是必须启动在 CMD 窗口中(不知道这个问题问的对不对?曾看到过一些 jsp 程序后台运行的一些 cmd 窗口。)?如果我这些问题问的太宽泛或不准确的话,请大家给我一些好的建议或范例……,先谢谢大家了!

解决方案 »

  1.   

    楼主的问题确实不好回答,太泛了,呵呵。建议找本很基础的jsp教程连连
      

  2.   


    确实不好回答2:可以,但不是System.out.println;是out.println("<h1>Hellow word!</h1>")建议:多练练,练的多了,也就明白了
      

  3.   

    我可以发一个代码给你
    比如登陆页面welcome.html
    <html>
    <head><title>欢迎使用</title>
    <link rel="stylesheet" href="from.css"
    type="text/css">
    </head>
    <body>
    <form name="login" action="dologinhaha" method="post"><p class="hello">用户名:<input type="text" name="name"><br>
    <p class="lily">密码:<input type="password" name="password">
    <input type="submit" name="提交" value="提交">
    </form></body></html>
    web.xml中如下
    <web-app>
    <welcome-file-list>
    <welcome-file>welcome.html</welcome-file>
    </welcome-file-list>
    <servlet>
    <servlet-name>welcome</servlet-name>
    <servlet-class>login</servlet-class>
    <init-param>
    <param-name>user</param-name>
    <param-value>root</param-value>
    </init-param>
    <init-param>
    <param-name>password</param-name>
    <param-value>sky</param-value>
    </init-param>
    <init-param>
    <param-name>url</param-name>
    <param-value>jdbc:mysql://localhost:3306/forum</param-value>
    </init-param>
    <init-param>
    <param-name>driver</param-name>
    <param-value>com.mysql.jdbc.Driver</param-value>
    </init-param>
    </servlet><servlet-mapping>
    <servlet-name>welcome</servlet-name>
    <url-pattern>/dologinhaha</url-pattern>
    </servlet-mapping>
    </web-app>
    调用的servlet为
    import java.io.IOException;
    import java.io.PrintWriter;
    import java.sql.*;import javax.servlet.ServletException;
    import javax.servlet.http.Cookie;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.servlet.*;
    /**
     * Servlet implementation class for Servlet: login
     *
     */
     public class login extends javax.servlet.http.HttpServlet implements javax.servlet.Servlet {
        /* (non-Java-doc)
     * @see javax.servlet.http.HttpServlet#HttpServlet()
     */
     private  Connection conn=null;
    public void init() {
    ServletConfig config=getServletConfig();
    String dbdriver=config.getInitParameter("driver");
    String dburl=config.getInitParameter("url");
    String user=config.getInitParameter("user");
    String password=config.getInitParameter("password");

    try {
    Class.forName(dbdriver);
    conn=DriverManager.getConnection(dburl,user,password);
    } catch (ClassNotFoundException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } catch (SQLException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }

    }
    public login() {
    super();
    }   

    /* (non-Java-doc)
     * @see javax.servlet.http.HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    //request.setCharacterEncoding("gb2312");
    response.setContentType("text/html; charset=gb2312");
    String userName=request.getParameter("name");
     //userName=new String(userName.getBytes("iso-8859-1"),"gb2312");
       String passWord=request.getParameter("password");
       request.setAttribute("chinesename", userName); 
       System.out.println(userName);
       System.out.println(passWord);
    //    Cookie [] cook=request.getCookies();
    //    if(cook==null) {
    ////    Cookie cookname=new Cookie("username",userName);
    ////    Cookie cookpass=new Cookie("password",passWord);
    ////    response.addCookie(cookname);
    ////    response.addCookie(cookpass);
      
       try {
    if(validUser(userName,passWord)) {
       request.getRequestDispatcher("hello.jsp").forward(request, response);
       //request.getRequestDispatcher("welcome.html").include(request, response);
      
       }
       else 
       response.sendRedirect("welcome.jsp");
    } catch (SQLException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    //    }
    //    else {
    //    String id = null;
    //    String pass = null;
    //    for(int i=0;i<cook.length;i++) {
    //    String username=cook[i].getName();
    //    if(username.equals("username")) {
    //   id= cook[i].getValue();
    //    }
    //    }
    //    for(int i1=0;i1<cook.length;i1++) {
    //    String password=cook[i1].getName();
    //    if(password.equals("password")) {
    //   pass=cook[i1].getValue();
    //    }
    //    }
    //    
    //    
    //    try {
    // if(validUser(id,pass)) {
    //  request.getRequestDispatcher("hello.jsp").forward(request, response);
    //    }
    // } catch (SQLException e) {
    // // TODO Auto-generated catch block
    // e.printStackTrace();
    // }
    //    }

    }  

    /* (non-Java-doc)
     * @see javax.servlet.http.HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
     doGet(request,response);
    }

    public boolean validUser(String user,String password) throws SQLException {
        PreparedStatement ps = null;
    ps = conn.prepareStatement("select * from users where USERNAME=? and PASSWORD=?");
    ps.setString(1, user);
        ps.setString(2, password);
        ResultSet rs=ps.executeQuery();
    if(rs.next()) {
    return true;
    }
    else{
    return false ;
    }
    }
     }
    然后返回的欢迎登陆的jsp页面为hello.jsp
    <%@ page language="java" contentType="text/html; charset=gb2312"
        pageEncoding="gb2312"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <title>登陆成功</title>
    </head>
    <body>
    <%@taglib uri="/mytaglib" prefix="mm" %>
    <p class="hello">欢迎登陆:<mm:hello/><%=request.getParameter("name") %>
    <p class="lily">中文名字:<%=request.getAttribute("chinesename") %>
    <%=request.getParameter("name") %>
    <%=request.getParameter("password") %>
    </body>
    </html>
    这个基本就是一个流程 诸葛是基于mvc模式的 jsp+servlet+javabean关于你的第2个问题
    public class Test{public static void main(String args[]){System.out.println("Hello,world!");}}? 
    在JPS的<% %>中是不能写方法的 智能是代码块因为<% %>中的代码最后经过编译只是servlet中的_jspservice方法中的代码 而一个方法中不能再定义方法
    不过<%! %>中是可以定义方法和变量的 这些是成员变量!你的第3个问题 
    3.如果程序需要实现交互功能,相关的Class是不是必须启动在 CMD 窗口中(不知道这个问题问的对不对?曾看到过一些 jsp 程序后台运行的一些 cmd 窗口。)? 
    这个我没看明白你的意思你的WEB中的项目中的CLASS文件一般都会在你WEB项目的WEB-INF的CLASSES的目录下面 tomcat会自动加载
    不用自己去管的
      

  4.   

    呵呵……很抱歉,为难大家了,我以前是做ASP开发的,JSP中有与ASP阡陌相通的地方,而且这一部分我也大概了解,可是一旦涉及到与XML联系,进行前后端代码分离就有些懵了,我找不到简单一些的代码范例去临摹,所以学习进度有些慢……呵呵,不过,还是要谢谢大家的建议与关注。
      

  5.   

    建议首先学习servlet,知道了servlet工作原理才能知道jsp是怎么执行的。这点很重要。