Servlet基本模式
一、首先用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基本模式的更多相关文章
- Struts2技术内幕 读书笔记二 web开发的基本模式
最佳实践 在讨论基本模式之前,我们先说说一个词:最佳实践 任何程序的编写都得遵循一个特定的规范.这种规范有约定俗称的例如:包名全小写,类名每个单词第一个字母大写等等等等;另外还有一些需要我们严格遵守的 ...
- servlet文件下载
创建web工程servlet,新建DownloadServlet.java package com.xmyself.servlet; import java.io.File; import java. ...
- java中servlet的各种路径
1. web.xml中<url-pattern>路径,(叫它Servlet路径!) > 要么以“*”开关,要么为“/”开头 2. 转发和包含路径 > *****以“/”开头:相 ...
- Servlet监听器笔记总结
监听器Listener的概念 监听器的概念很好理解,顾名思义,就是监视目标动作或状态的变化,目标一旦状态发生变化或者有动作,则立马做出反应. Servlet中的也有实现监听器的机制,就是Listene ...
- JavaWeb——Servlet
一.基本概念 Servlet是运行在Web服务器上的小程序,通过http协议和客户端进行交互. 这里的客户端一般为浏览器,发送http请求(request)给服务器(如Tomcat).服务器接收到请求 ...
- servlet 简介,待完善
什么是Servlet?① Servlet就是JAVA 类② Servlet是一个继承HttpServlet类的类③ 这个在服务器端运行,用以处理客户端的请求 Servlet相关包的介绍--javax. ...
- java web学习总结(五) -------------------servlet开发(一)
一.Servlet简介 Servlet是sun公司提供的一门用于开发动态web资源的技术. Sun公司在其API中提供了一个servlet接口,用户若想用发一个动态web资源(即开发一个Java程序向 ...
- servlet使用入门
创建web工程servlet,然后新建TestServlet.java package com.xmyself.servlet; import java.io.IOException; import ...
- 基于jsp+servlet图书管理系统之后台万能模板
前奏: 刚开始接触博客园写博客,就是写写平时学的基础知识,慢慢发现大神写的博客思路很清晰,知识很丰富,非常又价值,反思自己写的,顿时感觉非常low,有相当长一段时间没有分享自己的知识.于是静下心来钻研 ...
随机推荐
- jQuery核心之DOM操作的常用方法
参考jQuery官网API文档 1..attr() 获取 : ); 3.选择器与常用方法: ) .html( "new text for the third h3!" ) .en ...
- 关于NOR-FLASH和NAND-fLASH的区别。——Arvin
NANDFLASH: Nand-flash内存是flash内存的一种,1989年,东芝公司发表了NAND flash结构.其内部采用非线性宏单元模式,为固态大容量内存的实现提供了廉价有效的解决方案.N ...
- RSync实现文件备份同步详解
1.rsync简介 rsync是Unix下的一款应用软件,它能同步更新两处计算机的文件与目录,并适当利用差分编码以减少数据传输.rsync中一项与其他大部分类似程序或协议中所未见的重要特性是镜像对每个 ...
- AngularJS事件绑定的使用详解
本文和大家分享的主要是AngularJS中事件绑定相关知识点,希望通过本文的分享,对大家学习和使用AngularJS有所帮助. 1.绑定事件:表达式.事件方法名: 2.绑定点击事件实例:显示.隐藏页面 ...
- Number plate recognition with Tensorflow
2015年5月 在此处 http://matthewearl.github.io/2016/05/06/cnn-anpr/#rd 寻觅出 使用TenserFlow的车牌号识别 技术. 感觉很有必要 ...
- spring随手笔记2:初始化方法
1.init-method="init" public class HelloWorldServiceImpl implements HelloWorldService { pri ...
- CASE表达式的使用
我们在开发过程中,经常需要针对一列,基于条件逻辑来返回一个值,那么,这时候就需要使用到CASE表达式了. 例如,以下对Products表的查询就在SELECT语句中使用了CASE表达式,以生成用于描述 ...
- redis服务和扩展安装(windows)
Windows下安装redis和在php中使用phpredis扩展 原文地址:http://m.oschina.net/blog/281058 Junn 发布于 2年前,共有 0 条评论 1.redi ...
- hdoj 5003
题意:给你一个数组a,降序排序后,求sum+=0.95^(i-1)*ai 这题wa了两发,因为我没看清题意,要排序! 精度上面通过a^(i-1)=e^((i-1)*log(a)) 提到精度,就要想到底 ...
- POJ 2446 最小点覆盖
Chessboard Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 14787 Accepted: 4607 Descr ...