题目
利用NetBeans新建一个基于JavaEE7.0规范的Web应用程序项目,之后完成以下任务:
(1)利用向导建立一个Servlet,将其对应的页面名称设置为index.shtm,并设法将建立的Web应用程序的默认页面设置为该Servlet生成的页面。
(2)修改上述Servlet中的代码,使其生成的页面中包含一个网页链接,点击该链接,将转入本项目中由向导生成的index.html页面。
(3)再在项目中新建一个Servlet,然后修改index.html页面中的代码,为其添加一个表单,该表单包含一个文本框和一个提交按钮,当用户点击提及按钮时,将调用建立的Servlet,对用户输入的信息进行回应。
用户可以输入如下问题:
①你是谁
Servlet应自动将用户转移到一个能够显示你的姓名、学号、班级及照片的页面。
②现在几点
Servlet回应当前的时间,格式为“*****年**月**日 **小时**分**秒”
③我从哪里来
Servlet回应用户所在计算机的IP地址
④我到那里去
Servlet应根据用户的浏览器类型,回应一个页面,如果用户的浏览器是IE、火狐、谷歌,则该页面应显示“点此进入”。当用户点击此文本时,应转入对应浏览器开发商的网站,如是IE,则网址应为http://www.microsoft.com,火狐则为http://www.mozilla.org,谷歌的则为http://www.google.cn。如果用户的浏览器不在上述范围之内,则在页面显示“百度一下吧”,用户点击后转入http://www.baidu.com(注:其他浏览器可用Opera作测试,下载网址是http://www.opera.com)。在上述的链接的“点此进入”的文字下面,还要有一个“返回”的文本,用户如果点击此文本,将返回index.html页面。
⑤对于其他问题,Servlet一律回应“不知道!”。
作答
使用Netbeans15和Tomcat9
IndexServlet.java
package web;
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 IndexServlet extends HttpServlet {
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
try ( PrintWriter out = response.getWriter()) {
out.println("<!DOCTYPE html>");
out.println("<html>");
out.println("<head>");
out.println("<title>Servlet IndexServlet</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1><a href=index.html>点此</a>转入问题首页 </h1>");
out.println("</body>");
out.println("</html>");
}
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
processRequest(req, resp);
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
processRequest(req, resp);
}
}
QuestionServlet.java
package web;
import java.io.IOException;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet(name = "QuestionServlet", urlPatterns = {"/QuestionServlet"})
public class QuestionServlet extends HttpServlet {
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//获取问题
request.setCharacterEncoding("UTF-8");
String q=request.getParameter("q");
if("你是谁".equals(q)){
response.sendRedirect("my.html");
return;
}else if("现在几点".equals(q)){
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
Date date = new Date(System.currentTimeMillis());
SimpleDateFormat time = new SimpleDateFormat("yyyy年MM月dd日-HH时mm分ss秒");
out.println(time.format(date));
return;
}else if("我从哪里来".equals(q)){
String remoteIp=request.getRemoteAddr();
response.getWriter().print(remoteIp);
return ;
}else if("我到哪里去".equals(q)){
String header = request.getHeader("User-Agent");
response.setContentType("text/html;charset=GBK");
response.setContentType("text/html");
PrintWriter out = response.getWriter();
if (header.toLowerCase().contains("msie")) {
out.println("<p><a href=http://www.microsoft.com>点此</a>点此进入 </p>");
} else if (header.toLowerCase().contains("firefox")) {
out.println("<div><a href=http://www.mozilla.org>点此</a>点此进入 </div>");
} else if (header.toLowerCase().contains("chrome")) {
out.println("<div><a href=http://www.google.cn>点此</a>点此进入 </div>");
} else {
out.println("<div><a href=http://www.baidu.com>百度一下吧</a> </div>");
}
out.println("<div><a href=index.html>返回</a> </div>");
return;
}else{
response.setContentType("text/html;charset=GBK");
response.setContentType("text/html");
response.getWriter().print("不知道!");
}
response.setContentType("text/html;charset=UTF-8");
try ( PrintWriter out = response.getWriter()) {
/* TODO output your page here. You may use following sample code. */
out.println("<!DOCTYPE html>");
out.println("<html>");
out.println("<head>");
out.println("<title>Servlet QuestionServlet</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1>Servlet QuestionServlet at " + request.getContextPath() + "</h1>");
out.println("</body>");
out.println("</html>");
}
}
// <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
/**
* Handles the HTTP <code>GET</code> method.
*
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
/**
* Handles the HTTP <code>POST</code> method.
*
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
/**
* Returns a short description of the servlet.
*
* @return a String containing servlet description
*/
@Override
public String getServletInfo() {
return "Short description";
}// </editor-fold>
}
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" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd">
<servlet>
<servlet-name>IndexServlet</servlet-name>
<servlet-class>web.IndexServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>IndexServlet</servlet-name>
<url-pattern>/index.shtml</url-pattern>
</servlet-mapping>
<session-config>
<session-timeout>
30
</session-timeout>
</session-config>
<welcome-file-list>
<welcome-file>index.shtml</welcome-file>
</welcome-file-list>
</web-app>
index.html
<!DOCTYPE html>
<html>
<head>
<title>问题回答</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>
<div>请输入你的问题</div>
<form action="QuestionServlet" method="POST">
<input type="text" name="q" value="" />
<input type="submit" value="确定" />
</form>
</body>
</html>
my.html
<!DOCTYPE html>
<html>
<head>
<title>问题回答</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>
<div>姓名:张三</div>
<div>学号:29102930</div>
<div>班级:法外狂徒班</div>
<img src="照片.png" alt="照片" width="200" height="200">
</body>
</html>