之前做项目都是一股脑的做SpringMVC的SSH项目,而且还是半路出家的那种。。。感觉好多前后台交互的东西实现起来很困难,而后才真正懂了什么叫JSP。。。很尴尬,所以现在重新补JAVA-JSP-Web知识,记录一下,方便需要的童鞋,也方便自己的理解!

好的,我们正式开始!

基本Servlet用法

首先我们创建一个Dynamic Web project项目,我这儿就叫ServletTest了,下面是项目结构图:

好的,我们写最关键的Servlet文件继承自HttpServlet,不过在这之前,先创建包,这个很基础的了。

复写一下doGet和doPost方法,基础的咱就写简单点儿:

@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 获取页面HTML标签写入流,我习惯用PrintWriter,println感觉用起来舒服点儿~
PrintWriter pw = resp.getWriter();
pw.println("<html><head>");
pw.println("<title>My first servlet project</title>");
pw.println("</head><body>");
pw.println("<h1>Show my first servlet project success!</h1><br/>");
pw.println("</body></html>");
}

@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}

然后我们在web.xml里修改一下配置

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
id="WebApp_ID"
version="3.0">


<!-- 对应cn.com.dnyy.Servlet01.ServletTest01.java的案例 -->
<servlet>
<servlet-name>ServletTest01</servlet-name>
<servlet-class>cn.com.dnyy.Servlet.ServletTest01</servlet-class><!-- 对应加载的类 -->
</servlet>
<servlet-mapping>
<servlet-name>ServletTest01</servlet-name><!-- 两个servlet-name一定要统一 -->
<url-pattern>/ServletTest01</url-pattern><!-- 访问URL -->
</servlet-mapping>
</web-app>

好了,开启服务器,访问localhost:8080/ServletTest/ServletTest01就能看到我们写的HTML了,其中ServletTest是我的项目名哈,注意一下。

获取参数

既然弄清楚了这么原始的基本Servlet用法,肯定是不够的,因此,我们最先想到的就是如何获取参数了。

返回java文件,我们添加点儿东西,注释一下你就能看懂了!

@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
PrintWriter pw = resp.getWriter();// 获取页面HTML标签写入流
pw.println("<html><head>");
pw.println("<title>My first servlet project</title>");
pw.println("</head><body>");
pw.println("<h1>Show my first servlet project success!</h1><br/>");

// 获取参数并输出其值
String parameter = null;// 参数值存放数组
try {
parameter = req.getParameter("parameter");// 获取的参数名

// 如果参数值不为空,则输出
if(!parameter.isEmpty() || parameter != "") pw.println("<h4>Now get param[parameter] in url:" + parameter + "</h4>");
} catch (NullPointerException e) {
// 如果没有参数输入,则捕获异常后不输出
e.printStackTrace();
}

pw.println("</body></html>");
}

有注释就是容易理解哈,现在我们刷新一下页面,还是什么都没有,一旦加入了参数就不一样了,加入参数的URL如下:localhost:8080/ServletTest/ServletTest01?parameter=111

加入参数回车访问一下,就能看到屏幕多输出了我们要添加的内容了!

简单介绍其他常用用法

纯纯的干货,代码加注释的干货!

@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
PrintWriter pw = resp.getWriter();// 获取页面HTML标签写入流
pw.println("<html><head>");
pw.println("<title>My first servlet project</title>");
pw.println("</head><body>");
pw.println("<h1>Show my first servlet project success!</h1><br/>");

// 上下文根目录路径
pw.println("<h2>root:" + req.getContextPath() + "</h2>");

// 真实路径
pw.println("<h3>real path:" + req.getSession().getServletContext().getRealPath("/") + "</h3>");

// 循环输出URL上的所有参数名
Enumeration<String> enu = req.getParameterNames();
pw.println("<h3>you must input a parameter in url, and now, you put the parameter:</h3>");
while(enu.hasMoreElements()){// 如果还能遍历
String element = enu.nextElement();// 下一个Element
pw.println("<h4>[" + element + "] and it's value is [" + req.getParameter(element) + "]</h4><br/>");
}

// 获取并输出数值
String parameter = null;// 参数值存放数组
try {
parameter = req.getParameter("parameter");// 获取的参数名

// 如果参数值不为空,则输出
if(!parameter.isEmpty() || parameter != "") pw.println("<h4>Now get param[parameter] in url:" + parameter + "</h4>");
} catch (NullPointerException e) {
// 如果没有参数输入,则捕获异常后不输出
e.printStackTrace();
}

pw.println("</body></html>");
}

堪称极品!要是能够通过其它页面跳转到这个页面并传递参数的形式就更好了!

HTML页面跳转到Servlet

说做就做!赶紧的,我们创建一个html页面index.html,给大家看看我的目录结构:

好的,然后我们填充一下这个html内容:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>ServletTest01</title>
</head>
<body>
<h1>You can input this parameter to visit ServletTest01.java</h1>

<!-- 访问URL为web.xml中设置的servlet,没有../则是URL加上/01,将会提示找不到页面,可以设置为post方法 -->
<form action="../ServletTest01" method="get">
parameter:<input name="parameter" type="text" value=""/>(必填!)<br/>
parameter1:<input name="parameter01" type="text" value=""/><br/>
parameter2:<input name="parameter02" type="text" value=""/><br/>
parameter3:<input name="parameter03" type="text" value=""/><br/>
parameter4:<input name="parameter04" type="text" value=""/><br/>
<input type="submit" value="sendTo"/>
</form>
</body>
</html>

这下就基本没问题了,不过为了处理一下编码问题,在java文件doGet方法处加上两行UTF-8。

@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("UTF-8");// GET请求URIEncoding设置为UTF-8
resp.setContentType("text/html;charset=UTF-8");// POST请求URIEncoding设置为UTF-8
PrintWriter pw = resp.getWriter();// 获取页面HTML标签写入流
pw.println("<html><head>");
pw.println("<title>My first servlet project</title>");
pw.println("</head><body>");
后面代码略...

如果访问页面后编码还有问题的话,可以移步自我浅淡编码的博文《【Java】SpringMVC Post&Get编码问题》来解决一下,大概就是修改下Tomcat的server.xml就行了的,如果还有什么不清楚的话,可以在下方留言,我会进我所能给大家解答的!

下面就是我的工程源码,移步–>链接

更多相关文章

  1. 如何在函数中将两个参数从1个类传递给另一个?
  2. Android 外部唤起应用跳转指定页面
  3. Android的startActivityForResult()与onActivityResult()与setRe
  4. fragment保存页面不销毁
  5. Android欢迎页面自动跳转和触摸进入首页
  6. 通过ViewPager实现类似微信的页面切换(Fragment篇)
  7. android开发中如何从当前页面返回上一页面
  8. 在Webview上加载脱机更新页面
  9. Android开发入门之为应用添加多个Activity与参数传递

随机推荐

  1. 巨好的入门写精通
  2. Android 月活跃人数超过10亿用户了,我却审
  3. Android菜鸟的成长笔记(15)—— Android中
  4. Android使用Linux mount获取SdCard存储目
  5. Android(安卓)10 获取剪切板内容
  6. Android(安卓)cannot access localhost?
  7. Android的深層之美
  8. Android Framework分析 ---- 1消息处理机
  9. android -- FileObserver 类用法及限制
  10. location of android sdk has not been s