一、实验目的
本实验的目的是掌握使用servlet读取文件的内容和进行转发。
二、实验步骤
**实验5_1:**用户在JSP页面输人英文句子提交给servlet,servlet 可以统计出英文句子中的单词数目。
JSP页面具体要求:
inputWord.jsp页面提供一个表单,用户使用该表单中的文本区输入英文句子,然后提交给名字是word的servlet.
Servlet的具体要求:
编写一个Servlet 类Decompose,该类创建的servlet 可以分解出英文句子中
单词。Decompose包名是myservlet. control。Decompose. java保存到Web服务目录的\ WEB-INF\classes\myservlet\control子目录中。
然后打开MS-DOS命令行窗口,使用MS-DOS命令进人包名的父目录classes,按如下格式编译源文件:
classes > javac myservlet\control\Decompose.java
web. xml的具体要求:
需要为ch5\WEN-INF目录下的web.xml文件添加如下的子标记:
<servlet>
<servlet-name>word</servlet-name>
<servlet-class>myservlet.control.Decompose</servlet-class>
</servlet >
<servlet-mapping>
<servlet-name>word </servlet-name>
<url-pattern >/word </url-pattern>
</servlet-mapping>
**实验5_2:**用户在inputName.JSP页面输人姓名提交给servlet,servlet将用户的请求再转发给showName.jsp页面。
JSP页面具体要求:
inputName. jsp页面提供-一个表单,用户使用该表单中的文本框输入姓名提交给名字为postman的servlet。
Servlet 的具体要求:
编写一个Servlet类PostMan,该类创建的servlet可以将用户的请求转发到
showName. jsp页面。PostMan 包名是myservlet. control。PostMan. java保存到Web服务目录的\ WEB-INF\classes\myservlet\control子目录中。
然后打开MS-DOS命令行窗口,使用MS-DOS命令进入包名的父目录classes, 按如下格式编译源文件:
javac myservlet\ control\ PostMan.java
web.xml的具体要求:
需要为ch5\WEN-INF目录下的web.xml文件添加如下的子标记:
<servlet >
<servlet-name> postman </servlet-name>
<servlet-class> myservlet.control.PostMa</servlet-class>
</servlet >
<servlet-mapping>
<servlet-name> postman </servlet-name>
<url-pattern>/postman </url-pattern>
</servlet-mapping>
三、参考代码
实验5_1
InputWord.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<HTML><body bgcolor= #EEDDEE> <font size= 5>
<form action= "word" method = post>
输入英文句子: <br>
<textArea name = 'english' rows= 5 cols= 30>
</textArea>
<br><input type = submit value= "提交">
</form>
</font> </body> </HTML>
Decompose.java
package myservlet.control;
import java. io.*;
import javax.servlet.* ;
import javax.servlet.http.*;
public class Decompose extends HttpServlet{
public void init( ServletConfig config) throws ServletException{
super.init(config);
}
public void service( HttpServletRequest request, HttpServletResponse response) throws IOException{
request.setCharacterEncoding("gb2312");
response.setContentType("text/html ; charset = gb2312");
PrintWriter out = response.getWriter();
out.println("<html ><body bgcolor= yellow>");
String str = request.getParameter("english" );
if(str== null||str.length() == 0)
return;
String[]word=str.split("[^a-zA-Z]+");
int n= 0;
try{
for(int i= 0;i < word. length;i++) {
if(word[ i]. length()>=1) {
n++ ;
out. print("<br>" + word[i]);
}
}
}
catch(NumberFormatException e){
out. print(" "+ e);
}
out. print("<h2>句子中单词数目:"+ n);
out. println("</body><ml>");
}
}
实验5_2:
inputName.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<meta charset="UTF-8">
<body bgcolor = cyan><font size =2>
<form action = "postman" method = post>
输入名字:<input type = text name="name">
<br><input type = submit value ="提交">
</form>
</font>
</body>
</html>
showName.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<meta charset="UTF-8">
<body bgcolor = pink><font size = 2>
<%
String name = request.getParameter("name");
%>
<b><br>用户输入的是<%= name %>
</body>
</html>
PostMan.java
package myservlet.control;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class PostMan extends HttpServlet {
public void init(ServletConfig config) throws ServletException{
super.init(config);
}
public void doPost(HttpServletRequest request,HttpServletResponse
response) throws ServletException,IOException{
request.setCharacterEncoding("UTF-8");
String name = request.getParameter("name");
RequestDispatcher dispatcher=
request.getRequestDispatcher("showName.jsp");
if(name!=null&&name.length()>=1)
dispatcher.forward(request, response); //转发
}
public void doGet(HttpServletRequest request,HttpServletResponse
response)throws ServletException,IOException{
doPost(request,response);
}
}
四、实验结果
实验5_1
运行input Word.jsp :
输入英文句子:
提交后:
实验5_2
inputName.jsp页面
输入姓名:
提交后:
五、讨论
1.JavaServlet的核心是在服务器端创建响应用户请求的对象,即创建servlet对象。
2.servlet对象第一次被请求加载时,服务器创建一个servlet对象,这个对象调用init方法完成必要的初始化工作。init 方法只被servlet对象调用一次,当后续的客户请求该servlet对象服务时,服务器将启动一个新的线程,在该线程中servlet对象调用service方法响应客户的请求。每个客户的每次请求都导致service方法被调用执行,调用过程运行在不同的线程中,互不干扰。
3.Servlet类继承的service 方法检查HTTP的请求类型(get、post等) ,并在service方法中根据用户的请求方式,对应地调用doGet或doPost方法。因此,Servlet类不必重写service方法,直接继承该方法即可。可以在Servlet类中重写doPost或doGet方法来响应用户的请求。
4.RequestDispatcher对象可以把用户对当前JSP页面或servlet 的请求转发给另一个JSP页面或servlet,而且将用户对当前JSP页面或servlet的请求和响应传递给转发到的JSP页面或servlet。也就是说,当前页面转发到的目标页面或servlet对象可以使用request获取用户提交的数据。