求JSP怎么将表单提交到对应的servlet,具体情况见补充
webapps--
SSC--
src--
ch04--(这是一个包)
servlet--
login.java
Webroot--
WEB-INF--
classes--
login.class
web.xml
login.jsp
login.jsp中有一个登录验证的表单,其中的action = "????"才可以提交到servlet对应的类中,web.xml文件中应该怎么配置?还有就是到底是提交到src下的.java,还是WEB-INF/classes下的.class?
还有就是浏览器下直接定位到那个servlet/login,路径如下:localhost:8000/SSC/src/ch04/servlet/Login 出现404错误 我知道是servlet没布置好,新手求教。。。请给出对应我这个例子的解决方案。。万分感激(实际只有30分,不好意思)!!!! 展开
问了回答你的问题,我还特意打开了我的myeclipse6.5。给你一个完整的例子
要做成一个完整的servlet的例子,做以下几个事
1、新建JSP文件(访问servlet的),我这里是index.jsp
2、新建java类(servlet),我这里是MyServlet.java
3、在web.xml配置servlet
下面给出完整代码
1、index.jsp (可以把我的代码自己拷贝到你机器运行,拷贝到的目录没有要求)
<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'index.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
<form action="servletUrl">
<input type="text" name="yyf"/>
<input type="submit" value="submit"/>
</form>
</body>
</html>
2、MyServlet.java,代码如下(现在你的src目录下建一个test包,然后这个类放到这个包下面)
package test;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class MyServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
System.out.println("this is doGet");
out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
out.println("<HTML>");
out.println(" <HEAD><TITLE>A Servlet</TITLE></HEAD>");
out.println(" <BODY>");
out.print(" This is ");
out.print(this.getClass());
out.println(", using the GET method");
out.println(" </BODY>");
out.println("</HTML>");
out.flush();
out.close();
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
System.out.println("this is doPost");
out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
out.println("<HTML>");
out.println(" <HEAD><TITLE>A Servlet</TITLE></HEAD>");
out.println(" <BODY>");
out.print(" This is ");
out.print(this.getClass());
out.println(", using the POST method");
out.println(" </BODY>");
out.println("</HTML>");
out.flush();
out.close();
}
public void init() throws ServletException {
}
public MyServlet() {
super();
}
public void destroy() {
super.destroy(); // Just puts "destroy" string in log
// Put your code here
}
}
3、web.xml配置(这里把握整个web.xml代码放到这里,你可以看的更清楚)
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<servlet>
<servlet-name>MyServlet</servlet-name>
<servlet-class>test.MyServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>MyServlet</servlet-name>
<url-pattern>/servletUrl</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
对于index.jsp访问MyServlet.java的解释:
在表单中,当你点击提交按钮,触发这个链接action="servletUrl"。请求到达服务器tomcat后,tomcat检查当前项目的web.xml中所有的<servlet-mapping></servlet-mapping>
配置中的<url-pattern></url-pattern>的属性值。看当中有没有一个和请求地址servletUrl相同。结果找到如,如下:
<servlet-mapping>
<servlet-name>MyServlet</servlet-name>
<url-pattern>/servletUrl</url-pattern>
</servlet-mapping>
其中 <url-pattern>/servletUrl</url-pattern> 是你表单的访问地址
然后,tomcat根据上面的<servlet-name>MyServlet</servlet-name>找到和
<servlet-mapping>相对应的<servlet>配置如下
<servlet>
<servlet-name>MyServlet</servlet-name>
<servlet-class>test.MyServlet</servlet-class>
</servlet>
然后根据当中 <servlet-class>找到MyServlet.java文件的地址。
如果看了上面的文字还不是很理解,给你做个图:
web.xml中要写servlet映射参数什么servlet-name servlet-class servlet-mapping,等等,找本书看看,书上写的清清楚楚。你肯定有书的,应该。
- <servlet>
<description />
<display-name>Login</display-name>
<servlet-name>Login</servlet-name>
<servlet-class>ch04.servlet.login.java</servlet-class>
</servlet>
- <servlet-mapping>
<servlet-name>Login</servlet-name>
<url-pattern>/Login</url-pattern>
</servlet-mapping>
- <servlet>
在你的jsp页面中的配置如下:
<form action="<%=request.getContextPath()%>/Login" method="post">
然后你直接使用eclipse之类的运行一下就好了。
<servlet-name>Login</servlet-name>
<servlet-class>
<!-- 打开login.java,选中类名,右击,在弹出菜单选择copy qualified name -->
SSC.ch04.shopping.servlet.login
</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Login</servlet-name>
<url-pattern>/Login</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>login.jsp</welcome-file>
</welcome-file-list>
上面是web.xml的部分配置。
IE中输入地址:localhost:8000/SSC,回车就可以进入登录页面了。
登录页面的表单:action="Login"就可提交到相应的servlet了,就是login.java。
从你给的路径看,这应该是书上的例子吧?好好看书,别浪费你那30分了。这个问题不难。看看书就懂了。