一、首先用Myeclipse2015创建一个web项目,然后修改index.jsp.

 <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
<title>我的JSP开始页面</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
</head> <body>
<form action="reg" method="get">
<table border="0">
<tr><td colspan="2">添加用户信息</td></tr>
<tr><td>姓名:</td><td><input type="text" name="name" value="张道陵"></td></tr>
<tr><td>性别:</td><td><input type="text" name="sex" value="男"></td></tr>
<tr><td>年龄:</td><td><input type="text" name="age" value="99"></td></tr>
<tr><td>信息:</td><td><input type="text" name="info" value="五斗米道教主"></td></tr>
<tr><td colspan="2"><input type="submit" value="确认"></td></tr>
</table>
</form><br>
</body>
</html>

主要关注表单。其中有默认的value,是为了测试方便。

二、创建Servlet文件reg.java,覆写其中的doGet和doPost方法。

 package com.kaly.servlet;

 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 reg extends HttpServlet {
private static final long serialVersionUID = 1L; //无参构造函数
public reg() {
super();
} protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//这两句解决中文乱码的问题,在用PrintWriter输出是正常的,请求转发的时候不正常。与Filter冲突,所以不能有过滤器。
request.setCharacterEncoding("utf-8");
response.setContentType("text/html);charset=utf-8");
String usernameString=request.getParameter("name");
String sexString=request.getParameter("sex");
String ageString=request.getParameter("age");
String infoString=request.getParameter("info");
PrintWriter out=response.getWriter();
out.print("<html><head><title>调用servlet</title></head><body>");
out.print(usernameString+","+sexString+","+ageString+","+infoString+".");
out.print("</body></html>");
out.flush();
out.close(); //下面这些信息,通过请求转发传递之后中文显示乱码。设置过字符集和过滤器都不起作用。
// request.setAttribute("username", usernameString);
// request.setAttribute("sex", sexString);
// request.setAttribute("age", ageString);
// request.setAttribute("info", infoString);
//如果上面往输出流写了东西,这里请求转发就会出现异常
// request.getRequestDispatcher("/index.jsp").forward(request, response);
} protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);//在doGet和doPost任何一个方法中加上对另一个方法的调用,就可以具备处理两种提交方法的功能
}
}

其中被注释掉的是调试失败的代码,主要问题是没有处理好中文乱码的问题。而且,如果已经使用了PrintWriter对象向输出流写入了内容,在使用注释掉的那部分代码实现请求转发就会出现“java.lang.IllegalStateException: Cannot forward after response has been committed”的异常。

三、在web.xml中注册servlet,如果是用新建servlet建立的servlet,则Myeclipse会自动建立好相关的注册和映射信息。如果是自定义了一个继承了Servlet的类,则需要手动添加相关信息。

添加下面代码段,其中<servlet-name>节点指定servlet类的引用名称,这个名称将在前端表单action中使用,<servlet-class>节点指定servlet完整的类名。

 <servlet>
<servlet-name>reg</servlet-name>
<display-name>reg</display-name>
<description></description>
<servlet-class>com.kaly.servlet.reg</servlet-class>
</servlet>

添加下面代码段,其中<servlet-name>节点是servlet类的引用名称,必须和上面的<servlet-name>节点的值保持一致,<url-pattern>节点指定servlet映射的相对路径,一般在前面都有个"/"。

 <servlet-mapping>
<servlet-name>reg</servlet-name>
<url-pattern>/reg</url-pattern>
</servlet-mapping>

运行结果如下:

点击"确认"按钮之后。

还没有解决请求转发过程中中文乱码的问题。

Servlet基本模式的更多相关文章

  1. Struts2技术内幕 读书笔记二 web开发的基本模式

    最佳实践 在讨论基本模式之前,我们先说说一个词:最佳实践 任何程序的编写都得遵循一个特定的规范.这种规范有约定俗称的例如:包名全小写,类名每个单词第一个字母大写等等等等;另外还有一些需要我们严格遵守的 ...

  2. servlet文件下载

    创建web工程servlet,新建DownloadServlet.java package com.xmyself.servlet; import java.io.File; import java. ...

  3. java中servlet的各种路径

    1. web.xml中<url-pattern>路径,(叫它Servlet路径!) > 要么以“*”开关,要么为“/”开头 2. 转发和包含路径 > *****以“/”开头:相 ...

  4. Servlet监听器笔记总结

    监听器Listener的概念 监听器的概念很好理解,顾名思义,就是监视目标动作或状态的变化,目标一旦状态发生变化或者有动作,则立马做出反应. Servlet中的也有实现监听器的机制,就是Listene ...

  5. JavaWeb——Servlet

    一.基本概念 Servlet是运行在Web服务器上的小程序,通过http协议和客户端进行交互. 这里的客户端一般为浏览器,发送http请求(request)给服务器(如Tomcat).服务器接收到请求 ...

  6. servlet 简介,待完善

    什么是Servlet?① Servlet就是JAVA 类② Servlet是一个继承HttpServlet类的类③ 这个在服务器端运行,用以处理客户端的请求 Servlet相关包的介绍--javax. ...

  7. java web学习总结(五) -------------------servlet开发(一)

    一.Servlet简介 Servlet是sun公司提供的一门用于开发动态web资源的技术. Sun公司在其API中提供了一个servlet接口,用户若想用发一个动态web资源(即开发一个Java程序向 ...

  8. servlet使用入门

    创建web工程servlet,然后新建TestServlet.java package com.xmyself.servlet; import java.io.IOException; import ...

  9. 基于jsp+servlet图书管理系统之后台万能模板

    前奏: 刚开始接触博客园写博客,就是写写平时学的基础知识,慢慢发现大神写的博客思路很清晰,知识很丰富,非常又价值,反思自己写的,顿时感觉非常low,有相当长一段时间没有分享自己的知识.于是静下心来钻研 ...

随机推荐

  1. RedHat3.4安装GIT

    1.首先到官网上下载git包,地址为http://git-scm.com/download 注意:选择下载Older releases 2.输入命令tar zxvf git-1.7.9.4.tat.g ...

  2. js 获取iframe中的元素

    今天要修改编辑器插件中的元素遇到的问题 jquery 在父窗口中获取iframe中的元素 1.Js代码 格式:$("#iframe的ID").contents().find(&qu ...

  3. hdu2825Wireless Password(ac+dp)

    链接 状压dp+ac dp[i+1][next[j]][st|tt]表示第i+1长度结点为next[j]状态为st|tt的时候的ans; dp[i+1][next[j]][st|tt]+=dp[i][ ...

  4. 查看rpm和war包内容

    解压rpm包的内容:(没有安装,就像解压tgz包一样rpm包)rpm2cpio *.rpm | cpio -div 解压war包的内容: jar -xvf project.war 解压到当前目录

  5. JS 概述

    HTML+javascript+CSSjavascript 1995出现,JQuery -2006出现--React.js 阿里/美团/去哪儿 2013, Facebook发布UI框架库React,引 ...

  6. 解决asp.net Core Mvc网页汉字乱码问题

    跟着www.asp.net网页的教程做电影网站的例子时,将一些英文标签和按钮改成了汉字的,结果出现了乱码. 在网上搜索这方面的信息也不太多,看到大家众说纷纭,最后有解决问题的,也没有说清楚具体的办法, ...

  7. null和undefined

    null表示"没有对象",即该处不应该有值.典型用法是: (1) 作为函数的参数,表示该函数的参数不是对象. (2) 作为对象原型链的终点. undefined表示"缺少 ...

  8. c运行库冲突问题

    按照网上的方法,各种调试不成功,后来改成用共享MFC的dll,然后回退新加的代码,再把 #include <afxwin.h> #ifndef _AFX_NO_DB_SUPPORT#inc ...

  9. 一块神奇的树莓派电子板竟让我学会了Linux系统

    树莓派(Raspberry Pi)是基于ARM的微型电脑主板,外形只有信用卡大小,因此也被称为新型卡片式电脑,树莓派具有电脑的所有基本功能,可谓麻雀虽小五脏俱全.而其开发组织Raspberry Pi ...

  10. .gitignore

    # Xcode # build/ *.pbxuser !default.pbxuser *.mode1v3 !default.mode1v3 *.mode2v3 !default.mode2v3 *. ...