修改web.xml如下
<web-app>
  <display-name>Welcome to Tomcat</display-name>
  <description>
     Welcome to Tomcat
  </description>
  <servlet>
     <servlet-name>checkin</servlet-name>
     <servlet-class>hgdb.checkin</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>checkin</servlet-name>
    <url-pattern>/*</url-pattern>
  </servlet-mapping>
</web-app>
jsp调用的语句:<form name="f1" action="/hg/checkin" method="post">

解决方案 »

  1.   

    把最开始那句换成<?xml version="1.0" encoding="UTF-8"?>这个
      

  2.   

    我的这个项目不只一个servlet,是不是每做一个就要在web.xml文件中添加一个映射???
      

  3.   

    似的,每做一个就要在web.xml文件中添加一个映射
      

  4.   

    修改web.xml如下
    <web-app>
      <display-name>Welcome to Tomcat</display-name>
      <description>
         Welcome to Tomcat
      </description>
      <servlet>
         <servlet-name>checkin</servlet-name>
         <servlet-class>hgdb.checkin</servlet-class>
      </servlet>
      <servlet-mapping>
        <servlet-name>checkin</servlet-name>
        <url-pattern>/hg/checkin</url-pattern>
      </servlet-mapping>
    </web-app>
    jsp调用的语句:<form name="f1" action="/hg/checkin" method="post">
      

  5.   

    我照chanceqw大哥的方法重新配置了web.xml文件,但是现在我的初始也页面出不来了,本来是敲入http://localhost:8080/hg/login.jsp,由jsp文件调用servlet.但是现在一执行浏览器返回的是servlet里的doGet方法里的回应,生成了一个页面。这是怎么回事?小弟很迷惑??
      

  6.   

    大哥们可以解释一下详细意思不?<url-pattern>是什么意思?规则上是应该怎么写?是不是路径?
    我的servlet文件在webapps\hg\WEB-INF\classes\serv\check.class,为了区别.现在改成了check,应该是serv.check吧。如果有多个,在url-pattern里写*会不会冲突??多谢先!!!
      

  7.   

    <form name="f1" action="/hg/servlet/hgdb.checkin" method="post">
    改成:
    <form name="f1" action="/servlet/hgdb.checkin" method="post">
    试试看
      

  8.   

    不必全部照抄,一个servlet在web.xml需要配置两个地方,一个是 <servlet>  </servlet>,指明servlet名称极对应的类,第二个就是 <servlet-mapping> </servlet-mapping>,映射servlet到web上的访问路径,访问的时候就按这个路径来访问servlet
      

  9.   

    我用bozhhu的方法试了也不行,我的servlet文件在webapps\hg\WEB-INF\classes\serv\check.class,为了区别.现在改成了check,应该是serv.check吧。<url-pattern>应该怎么设置啊??请就我的路径示范一下,
    还有我如果将<url-pattern>设置成/*,就直接出来servlet的doGet方法返回的页面,敲原来登陆的jsp页面时就不见了,是不是jsp页面就直接调用了servlet返回来了???应该要get或者post的不???
    多谢先!!!
      

  10.   

    首先:
    c:/tomcat/conf 目录下的 server.xml文件加上下面的配置
    <Context path="/myapp" docBase="c:/myapp" debug="0" reloadable="true">
    </Context>
    其次:
    c:/myapp/WEB-INF 目录下的 web.xml配置
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
    <web-app>
      <servlet>
        <servlet-name>addservlet</servlet-name>
        <servlet-class>add.addservlet</servlet-class>
      </servlet>
      <servlet-mapping>
        <servlet-name>addservlet</servlet-name>
        <url-pattern>/mes/addservlet</url-pattern>
      </servlet-mapping>
     </web-app>
    JSP中调用:
    <form action="addservlet" method="get">
    我的servlet存放的路径是
    c:/myapp
      .......WEN-INF
      ..............classes
      .....................add
      .........................addservlet.class
      ........mes
      ...........调用servlet的JSP文件存放的位置我调试成功的路径配置,不知道对楼主是否有帮助。
      

  11.   

    to: luoxingke(星客) 
    ---------------------------- 
    大哥们可以解释一下详细意思不?<url-pattern>是什么意思?规则上是应该怎么写?是不是路径?
    我的servlet文件在webapps\hg\WEB-INF\classes\serv\check.class,为了区别.现在改成了check,应该是serv.check吧。如果有多个,在url-pattern里写*会不会冲突??多谢先!!!
    ----------------------------
    url-pattern就是用你的servlet-name替换其中的*就可以访问
    例如
      <servlet-mapping>
           <servlet-name>logoutServlet</servlet-name>
           <url-pattern>/*.do</url-pattern>
       </servlet-mapping>
    则你可以用 /logoutServlet.do 访问这个servlet
      

  12.   

    to: luoxingke(星客) 
    ----------------------------
    我照chanceqw大哥的方法重新配置了web.xml文件,但是现在我的初始也页面出不来了,本来是敲入http://localhost:8080/hg/login.jsp,由jsp文件调用servlet.但是现在一执行浏览器返回的是servlet里的doGet方法里的回应,生成了一个页面。这是怎么回事?小弟很迷惑??
    ----------------------------
    没submit就返回结果?
    doGet方法应该是你输入
    http://localhost:8080/hg/checkin?name=value
    的时候才有返回。
    你的form的method是post应该在提交以后返回doPost啊
      

  13.   

    to: luoxingke(星客) 
    ----------------------------
    我用bozhhu的方法试了也不行,我的servlet文件在webapps\hg\WEB-INF\classes\serv\check.class,为了区别.现在改成了check,应该是serv.check吧。<url-pattern>应该怎么设置啊??请就我的路径示范一下,
    还有我如果将<url-pattern>设置成/*,就直接出来servlet的doGet方法返回的页面,敲原来登陆的jsp页面时就不见了,是不是jsp页面就直接调用了servlet返回来了???应该要get或者post的不???
    多谢先!!!
    ----------------------------
    web.xml
    <servlet>
        <servlet-name>check</servlet-name>
        <servlet-class>serv.check</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>check</servlet-name>
        <url-pattern>/*.do</url-pattern>
    </servlet-mapping>然后可以用/check.do访问
    doGet()对应的是http://localhost:8080/hg/check.do?name="value"
    doPost()对应的是
    <form name="f1" action="/hg/check.do" method="post">
    在点击这个form的submit之后,会调用check的doPost方法你说的情况有点奇怪,你的login.jsp代码是什么?
      

  14.   

    我的jsp代码是接受用户名和密码的功能,传递给取名为check的servlet,在servlet中调用一个bean实例来验证用户名和密码。正确后由servlet重定向到一个框架页面。
    我的jsp代码:login.jsp 在tomcat\webapps\hg目录中
    <%@ include file="js.jsp" %>
    <%@ page contentType="text/html;charset=gb2312" %>
    <html>
    <head>
    <title>管理系统</title>
    <link rel="stylesheet" href="tzhg.css" type="text/css">
    <script>
    function sub()
    {
       if(document.f1.user_name.value=="")
       {
          alert("请输入用户名!");
          document.f1.user_name.focus();
       }
       else
       {
       if(document.f1.user_pwd.value=="")
       {
          alert("请输入密码!");
          document.f1.user_pwd.focus();
       }
       else
          document.f1.submit();
       }
    }
    </script>
    </head><body>
    <form name="f1" method="post" action="serv.check" >
    <p align="center">
    <img align="absmiddle" src="img/tzhg.jpg" width="282" height="198"><br><br>
    <center>
    <table border=0 style="background-color:white"><tr height="30">
    <td style="background-color:white">
    <p align="center">
    用户名:<input name="user_name" size=12 onKeyPress="return keyCheck1(event, this)" maxlength="30">
    密码:<input type="password" name="user_pwd" size=12 onKeyPress="return keyCheck1(event, this)" maxlength="30">
    </p>
    </td>
    <td valign=bottom style="background-color:white">
    <a href="javascript:sub()"><img src="img/sub.jpg" border=0 width="47" height="19"></a>
    <a href="javascript:document.f1.reset()"><img src="img/res.jpg" border=0 width="47" height="19"></a> 
    </td> 
    </tr> 
    </table> 
    </center> 
    </form> 
    </body> 
    </html> web.xml:
     <servlet>
         <servlet-name>check</servlet-name>
         <servlet-class>serv.check</servlet-class>
      </servlet>
      <servlet-mapping>
        <servlet-name>check</servlet-name>
        <url-pattern>/check</url-pattern>
      </servlet-mapping>
    check.class打成了包,在classes目录。 serv.check:
    package serv;
    import javax.servlet.*;
    import javax.servlet.http.*;
    import java.io.*;
    import java.util.*;
    import java.sql.*;
    import hg.db;
    public class check extends HttpServlet
    {

    int user_id;
    String user_xm="";
    String role_id="";
        String errorMessage="";
        //boolean loginAttempt=false;
    public void init() throws ServletException{
        
        
      }

        public void doGet(HttpServletRequest request,HttpServletResponse response)
        throws ServletException,IOException{

    response.setContentType("text/html;charset=GB2312");
    PrintWriter out=response.getWriter();
    out.println("<font color=\"green\">");
    out.println("<p>The servlet get method is the reply</p>");
    out.println("</font>");
    }  public String getStr(String str)
    {
    try
    {
    String temp_p=str;
    byte[] temp_t=temp_p.getBytes("ISO8859-1");
    String temp=new String(temp_t);
    return temp;
    }
    catch(Exception e)
    {
    e.printStackTrace();
    }
    return "null";
    }

    public void doPost(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException
    {

            HttpSession session=request.getSession();
            response.setContentType("text/html;charset=GB2312");
            PrintWriter out=response.getWriter();
            String user_name=getStr(request.getParameter("user_name"));
            String user_password=getStr(request.getParameter("user_pwd"));
            db dl=new db();
            dl.sqlDriver();
        String sql="select * from tb_user where user_name='"+user_name+"' ";
        ResultSet rs=dl.sqlQuery(sql);

    try 
    {
    if(!rs.next())
        {  
                   errorMessage="没有这个用户";
                   session.setAttribute("username","");
                   //response.sendRedirect("default.jsp");
                }
            
            else {
            
             if(rs.getString("user_sta").equals("1"))
             {
             errorMessage="此用户名已被禁用,请联系系统管理员!";
             }
            
            
           if(rs.getString("user_sta").equals("0"))
            {
       
    if(!rs.getString("password").trim().equals(user_password))
    {
       errorMessage="您输入的密码不正确!";
       //response.sendRedirect("login.jsp");


    if(errorMessage!="")
            {
           out.println("<script>window.alert('"+errorMessage+"');history.back();</script>");
            }
            
            else
        {
               user_id=rs.getInt("user_id");
               user_xm=getStr(rs.getString("user_xm"));
               role_id=getStr(rs.getString("role_id"));
               session.setAttribute("user_id",String.valueOf(user_id));
               session.setAttribute("user_xm",user_xm);
               session.setAttribute("role_id",role_id);
               response.sendRedirect("../hg/frame.jsp");
        }
         }
           
            /*else {
            response.sendRedirect("frame.jsp");
            } */
            }  
    }
    catch(Exception e)
    { System.err.println(e.getMessage());  }  

          }   
    }
    我已经被这个问题难半个月了,如蒙解决,定高分相送。
        
      

  15.   

    <servlet-mapping>
        <servlet-name>check</servlet-name>
        <url-pattern>/check</url-pattern>
      </servlet-mapping><form name="f1" method="post" action="serv.check" >显然这是错误的,你在web.xml里定义servlet的访问路径为/check,但你却在action里用别的路径,改成:
    <form name="f1" method="post" action="/check" >

     <servlet-mapping>
        <servlet-name>check</servlet-name>
        <url-pattern>/serv/check</url-pattern>
      </servlet-mapping>
      

  16.   

    web.xml:
     <servlet>
         <servlet-name>check</servlet-name>
         <servlet-class>serv.check</servlet-class>
      </servlet>
      <servlet-mapping>
        <servlet-name>check</servlet-name>
        <url-pattern>/check</url-pattern>
      </servlet-mapping>
    在web.xml是这样配的情况下,调用语句写成<form name="f1" method="post" action="../hg/check" >,已经可以了,是我的servlet有一些语法错误。但是对于目录的映射问题,还是不懂,为什么在调用时的路径要写成../hg/check,包名可以不写??不理解,请高手哥们总结一下。servlet已经调用成功了。但是想总结一下经验,到底该怎么配??到时候一定散分。多谢大哥们先。
      

  17.   

    我来跟你总结一下吧,Servlet是比较特殊,它得访问路径是可以设置的,既然可以设置当然包名可要可不要。看看<servlet>和<servlet-mapping>,通过servlet-name把要访问的class文件及路径与web访问路径映射起来。你可以任意改class的路径(也就是包),只要 <url-pattern>里定义的不变,你都可以不必改动任何程序。
    上面的例子是因为你的webapp是在hg下,也就是hg下就是你的根目录,访问路径 <url-pattern>/check</url-pattern> 那在action里的访问就是/hg/check, 你如果改成<url-pattern>/aaa/bbb/ccc/ddd/check</url-pattern>, 那你在action里写成/hg/aaa/bbb/ccc/ddd/check一样可以访问,不信你可以试一下。  反过来,改变class文件的包,不改变web访问路径,你也可以试试,很容易就可以明白啦。    其实也可以不用设置servlet路径,因为在conf目录下也有个web.xml,在那里定义了默认的servlet访问路径/servlet/*, 这个星就代表你的class文件的全路径(包括包名)
    在action 的路径就是 /hg/servlet/serv/check 你也可以试试