各位学长、前辈,我是一个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 窗口。)?如果我这些问题问的太宽泛或不准确的话,请大家给我一些好的建议或范例……,先谢谢大家了!
确实不好回答2:可以,但不是System.out.println;是out.println("<h1>Hellow word!</h1>")建议:多练练,练的多了,也就明白了
比如登陆页面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会自动加载
不用自己去管的