使用servlet分解单词和进行转发

一、实验目的

本实验的目的是掌握使用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获取用户提交的数据。

  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冰履踏青云

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值