Java 空白页作为servlet中的输出出现
我试图在sql数据库中插入员工详细信息,但当我运行该程序时,在输入员工详细信息后,它显示的是注册页面,而输出没有出现,它显示为空白页面 这是我的web.xml文件Java 空白页作为servlet中的输出出现,java,mysql,servlets,jdbc,Java,Mysql,Servlets,Jdbc,我试图在sql数据库中插入员工详细信息,但当我运行该程序时,在输入员工详细信息后,它显示的是注册页面,而输出没有出现,它显示为空白页面 这是我的web.xml文件 <?xml version="1.0" encoding="UTF-8"?> <web-app version="3.1" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.1" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd">
<servlet>
<servlet-name>CreateServlet</servlet-name>
<servlet-class>com.sai.CreateServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>CreateServlet</servlet-name>
<url-pattern>/CreateServlet</url-pattern>
</servlet-mapping>
<session-config>
<session-timeout>
30
</session-timeout>
</session-config>
</web-app>
CreateServlet
com.sai.CreateServlet
CreateServlet
/CreateServlet
30
这是我的servlet类
public class CreateServlet extends HttpServlet
{
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
Connection con=null;
Statement st=null;
try
{
Class.forName("com.mysql.jdbc.Driver");
DriverManager.getConnection("jdbc:mysql://localhost:3306/dbemployee","root","");
con.createStatement();
String id=request.getParameter("UserName");
String pwd=request.getParameter("Password");
String eAdd=request.getParameter("EmpAddress");
String gender=request.getParameter("MaleorFemale");
String email=request.getParameter("Email");
String lang=request.getParameter("languages");
String nation=request.getParameter("Nationality");
String date=request.getParameter("RegDate");
String sql="insert into Employee Values ("+id+" "+pwd+" "+eAdd+" "+gender+" "+email+" "+lang+" "+nation+" "+date+")";
st.executeUpdate(sql);
if(id !=null | pwd != null | eAdd!=null | gender !=null |email !=null | lang !=null | nation!=null | date !=null)
{
RequestDispatcher rd = request.getRequestDispatcher("/success.html");
rd.forward(request, response);
}
else
{
out.println("<font color=red>Please fill all the fields</font>");
RequestDispatcher rd = request.getRequestDispatcher("/index.html");
rd.forward(request, response);
}
}catch(ClassNotFoundException | SQLException | NullPointerException e)
{
e.printStackTrace();
}
finally
{
try
{
if(st!=null) st.close();
if(con!=null)con.close();
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
公共类CreateServlet扩展了HttpServlet
{
受保护的void processRequest(HttpServletRequest请求、HttpServletResponse响应)
抛出ServletException、IOException
{
setContentType(“text/html;charset=UTF-8”);
PrintWriter out=response.getWriter();
连接con=null;
语句st=null;
尝试
{
Class.forName(“com.mysql.jdbc.Driver”);
getConnection(“jdbc:mysql://localhost:3306/dbemployee“,”根“,”);
con.createStatement();
字符串id=request.getParameter(“用户名”);
字符串pwd=request.getParameter(“密码”);
字符串eAdd=request.getParameter(“EmpAddress”);
字符串性别=request.getParameter(“MaleorFemale”);
字符串email=request.getParameter(“email”);
String lang=request.getParameter(“语言”);
字符串nation=request.getParameter(“国籍”);
字符串日期=request.getParameter(“RegDate”);
String sql=“插入员工值(“+id+”+pwd+”+eAdd+”+gender+“+email+”+lang+“+nation+”+date+”);
st.executeUpdate(sql);
如果(id!=null | pwd!=null | eAdd!=null | gender!=null | email!=null | lang!=null | nation!=null | date!=null)
{
RequestDispatcher rd=request.getRequestDispatcher(“/success.html”);
转发(请求、响应);
}
其他的
{
out.println(“请填写所有字段”);
RequestDispatcher rd=request.getRequestDispatcher(“/index.html”);
转发(请求、响应);
}
}catch(ClassNotFoundException | SQLException | NullPointerException e)
{
e、 printStackTrace();
}
最后
{
尝试
{
如果(st!=null)st.close();
如果(con!=null)con.close();
}
捕获(例外e)
{
e、 printStackTrace();
}
}
}
这是我创建的注册文档中的index.html
<body>
<form name="EmployeeReg" method="post" action="CreateServlet">
UserName:  <input type="text" name="UserName" placeholder="username"><br>
Password:    <input type="password" name="password"><br>
Address :     <input type="text" name="EmpAdress" placeholder="EmpAddress" ><br>
Gender :    <input type="radio" name="MaleorFemale" value="Male">MALE<br>
                 
<input type="radio" name="MaleorFemale" value="Female">FEMALE<br>
EMail:        <input type="text" name="email" placeholder="email"><br>
Languages Known: <input type="checkbox" name="languages" value="Telugu">Telugu
<input type="checkbox" name="languages" value="Kannada">Kannada
<input type="checkbox" name="languages" value="Hindi">Hindi
<input type="checkbox" name="languages" value="English">English
<input type="checkbox" name="languages" value="Tamil">Tamil
<input type="checkbox" name="languages" value="Malayalam">Malayalam<br>
Nationality: <select name="nationality">
<option value="">-- select one --</option>
<option value="afghan">Afghan</option>
<option value="albanian">Albanian</option>
<option value="algerian">Algerian</option>
<option value="american">American</option>
<option value="andorran">Andorran</option>
<option value="angolan">Angolan</option>
<option value="antiguans">Antiguans</option>
<option value="argentinean">Argentinean</option>
<option value="armenian">Armenian</option>
<option value="australian">Australian</option>
<option value="austrian">Austrian</option>
<option value="austrian">Indian</option>
</select><br>
Reg.Date:    <input type="date" id="RegDate" value="2010-07-77">
<button onclick="myFunction()">Try it</button>
<p id="demo"></p>
<script>
function myFunction() {
var x = document.getElementById("myDate").value;
document.getElementById("demo").innerHTML = x;
}
</script>
<input type="submit" value="Submit">
</form>
</body>
用户名:
密码:nbsp
地址:nbsp
性别:男
        
女性
电子邮件:nbsp  
已知语言:泰卢固语
卡纳达
印地语
英语
泰米尔人
马来半岛
国籍:
--选择一个--
阿富汗人
阿尔巴尼亚语
阿尔及利亚人
美国人
安道尔
安哥拉
安提瓜人
阿根廷人
亚美尼亚人
澳大利亚人
奥地利人
印度的
注册日期:
试试看
函数myFunction(){
var x=document.getElementById(“myDate”).value;
document.getElementById(“demo”).innerHTML=x;
}
要以您显示的方式调用servlet,必须实现doPost
方法。它看起来像:
public class CreateServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response ) throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
// and the rest of your method.
}
}
基本上,您必须将当前方法重命名为doPost
,以便在向其发布表单数据时调用它
在浏览器中,您当前应该会收到某种错误。这不太可能记录到服务器日志中,但如果您使用浏览器的开发工具,那么您应该能够看到服务器返回的400或405错误
正如@Markrotterveel所说的,不要将此代码发布到公共站点,因为他是100%正确的。您正在快速设置SQL注入攻击。请学习如何使用带参数的预处理语句,您当前的代码容易受到SQL注入的攻击。这也是您的问题的原因,因为您不是“无法正确引用值。由于您正在吞咽和忽略异常,这可能就是您得到空白页的原因。请检查日志以查看错误,尽管修复方法是切换到带有参数的准备语句。请查看它没有显示任何日志。我很确定您的应用程序服务器的其中一个日志中会出现语法错误。”ver(假设您的应用程序服务器将
System.err
重定向到日志,大多数都是这样)。我将代码as语句更改为PreparedStatement,现在可以正常工作了