作者:悦md悦小坏蛋 | 来源:互联网 | 2023-08-29 17:51
一、实验目的:
理解 Servlet 的工作原理,掌握 Servlet 的应用开发方法;掌握常见 Servlet ;
二、实验环境:
1.理解 Servlet 的应用。
2.掌握 Servlet 的编程技术。
3.熟练使用 Eclipse 开发 Servlet 应用
三、实验内容:
(一)用 Servlet 获取表单数据
1. 建立一个 Servlet 文件 accept.java 和一个 register.jsp 文件,实现用 Servlet 实现获取表单数据的功能。
Accept.java
package com.yiibai;import java.io.IOException;import java.io.PrintWriter;import javax.servlet.ServletConfig;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.*;import javax.servlet.*;import javax.servlet.http.*;/*** Servlet implementation class accept*/@WebServlet("/accept")public class accept extends HttpServlet {public String codeToString(String str){//处理中文字符串的函数String s=str;try{byte tempB[]=s.getBytes("ISO-8859-1");s=new String(tempB);return s;}catch(Exception e){return s;}}public void init(ServletConfig config) throws ServletException{super.init(config);}public void doPost(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException{//设置mimeresponse.setContentType("text/html;charset=utf-8");PrintWriter out=response.getWriter();out.println("");out.println("这是新用户注册所提交的数据:
");out.println("用户名是:"+codeToString(request.getParameter("username"))+"
");out.println("密码是:"+codeToString(request.getParameter("userpassword"))+"
");out.println("性别是:"+codeToString(request.getParameter("sex"))+"
");out.println("出生年月是:"+request.getParameter("year")+request.getParameter("month")+request.getParameter("day")+"
");out.println("电子邮箱是:"+request.getParameter("email")+"
");out.println("家庭住址是:"+codeToString(request.getParameter("address"))+"
");out.println(" ");}/*** @see HttpServlet#HttpServlet()*/public accept() {super();// TODO Auto-generated constructor stub}/*** @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)*/protected void doGet1(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// TODO Auto-generated method stubresponse.getWriter().append("Served at: ").append(request.getContextPath());}/*** @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)*/protected void doPost1(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// TODO Auto-generated method stubdoGet(request, response);}}
Register.jsp
<%@ page cOntentType="text/html;charset=utf-8"%>新用户注册
用户名(*):
密 码(*):
再输一次密码(*):
性别:男女
出生年月:年 月日
电子邮箱(*):
家庭住址:
过滤器
【步骤 1】编写一个过滤器改变请求编码:
loginform.html
请输入用户名和口令:
【步骤 2】编写处理请求参数的 Servlet,代码如
package com.yiibai;import java.io.IOException;import java.io.PrintWriter;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;/*** Servlet implementation class CheckParamServlet*/@WebServlet("/CheckParamServlet")public class CheckParamServlet extends HttpServlet {private static final long serialVersiOnUID= 1L;/*** @see HttpServlet#HttpServlet()*/public CheckParamServlet() {super();// TODO Auto-generated constructor stub}/*** @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)*/protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// TODO Auto-generated method stub//response.getWriter().append("Served at: ").append(request.getContextPath());String name = request.getParameter("name");String pass = request.getParameter("pass");response.setContentType("text/html;charset=gb2312");PrintWriter out = response.getWriter();out.println("");out.println("你的用户名为:"+name+"
");out.println("你的口令为:"+pass+"
");out.println("");}/*** @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)*/protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// TODO Auto-generated method stubdoGet(request, response);}}
【步骤 3】修改 web.xml 文件,加入下面代码:
CheckParamServletCheckParamServletCheckParamServlet/CheckParamServlet
【步骤 5】过滤器代码如下:
package filter;import java.io.IOException;import javax.servlet.Filter;import javax.servlet.FilterChain;import javax.servlet.FilterConfig;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;import javax.servlet.annotation.WebFilter;@WebFilter("/*")public class EncodingFilter implements Filter {protected String encoding = null;protected FilterConfig config;public EncodingFilter() {// TODO Auto-generated constructor stub}public void destroy() {// TODO Auto-generated method stub}public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {if (request.getCharacterEncoding() == null) {// 得到指定的编码String encode = getEncoding();if (encode != null) {//设置 request 的编码request.setCharacterEncoding(encode);response.setCharacterEncoding(encode);}}chain.doFilter(request, response);}protected String getEncoding() {return encoding;}public void init(FilterConfig fConfig) throws ServletException {// TODO Auto-generated method stubthis.cOnfig= fConfig;// 得到在 web.xml 中配置的编码this.encoding = fConfig.getInitParameter("Encoding");}}
【步骤 6】在 web.xml 文件中配置过滤器,加入下面代码:
EncodingFilterfilter.EncodingFilterEncoding
gb2312
EncodingFilter/*
1.试简述过滤器有哪些功能?
过滤器对客户和资源之间的请求和响应进行过滤。请求经过一个过滤器到达servlet,servlet产生响应再经过过滤器到达客户,这就在请求和响应到达目的地之前对它们进行监视。过滤器的存在对servlet和客户都是透明的。
2. 如何理解过滤器链。
客户与资源之间建立多个过滤器,从而形成过滤器链。在过滤器链中每个过滤器都是请求处理,然后将请求交给链中的下一个过滤器(如果它是链中的最后一个,将交给实际的资源。)类似的,在响应到达客户之前,每个过滤器以相反的顺序对响应处理。
四、附加练习实现一个查询天气的 web 程序;
使用表单完成城市的输入,提交使用 ajax 完成查询显示;
Weather forecast.html
五、心得体会:
能够理解 Servlet 的应用,并掌握 Servlet 的编程技术,以及熟练使用 Eclipse 开发 Servlet 应用;而且能够熟悉了解过滤器的作用,并掌握过滤器的开发与部署的步骤和了解过滤器链。