cgb2109-day16
Posted cgblpx
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了cgb2109-day16相关的知识,希望对你有一定的参考价值。
一,注解方式开发Servlet程序
–1,创建新的web工程,创建Servlet
package cn.tedu.servlet;
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.IOException;
//1,这是新版本的Servlet提供的注解开发方式,更好更简单(否则自己写配置文件)
//参数是,规定了浏览器的地址栏到底怎么写才能访问到我这个Servlet类
//2,ServletDemo1是子类,可以使用父类的所有资源(除了私有的,构造方法)
//3,自定义Servlet的规则:
//方式1:extends HttpServlet--推荐!!!
//方式2:extends GenericServlet--了解
//方式3:implements Servlet--了解
@WebServlet("/ServletDemo1")
public class ServletDemo1 extends HttpServlet
//4,继承了父类,但是 想改父类原有的功能时 就重写!!
//5,不论调用doPost()或者doGet(),都是由Servlet来调用的
//6,当用户用post方式提交请求时(form表单提交),Servlet来调用doPost()
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
System.out.println("您访问了doPost()");
//7,当用户用get方式提交请求时,Servlet来调用doGet()
//(在地址栏?拼接数据 + form没改method的值)
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
System.out.println("您访问了doGet()");
–2,测试Servlet
启动服务器,访问浏览器
http://localhost:8080/cgb2109javaweb03_war_exploded/ServletDemo1
本机 Tomcat默认的端口号 项目名称 项目中的资源名称
二,配置方式开发Servlet程序
–1,创建Servlet类
package cn.tedu.servlet;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
//使用配置方式开发Servlet程序
public class ServletDemo2 extends HttpServlet
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
System.out.println("doPost()成功的被Servlet调用!");
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
System.out.println("doGet()成功的被Servlet调用!");
–2,配置Servlet类
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<!--配置Servlet类的访问信息-->
<servlet>
<!--给Servlet设置一个名字(一般是和类名相同)
细则:名字可以自定义,但是必须唯一,
不能和别的<servlet>的<servlet-name>相同
-->
<servlet-name>hello</servlet-name>
<!--指定Servlet类的全路径(包名.类名)-->
<servlet-class>cn.tedu.servlet.ServletDemo2</servlet-class>
</servlet>
<!--指定浏览器的访问规则-->
<servlet-mapping>
<!--即将根据指定的名字,去找到一个要被访问的Servlet类的全路径-->
<servlet-name>hello</servlet-name>
<!--指定了浏览器的访问方式,
细则:值可以自定义,但是浏览器必须是一样的写法才能访问Servlet
否则404:找不到你要访问的资源
-->
<!--url-pattern的值不能和其他的url-pattern的值相同-->
<url-pattern>/a/b/c</url-pattern>
</servlet-mapping>
</web-app>
–3,测试
http://localhost:8090/cgb2109javaweb03_war_exploded/ServletDemo2
–4,总结
三,前后端整合
–1,创建前端html网页
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>前后端 安排起来</title>
</head>
<body>
<!-- 点击超链接跳转到Servlet -->
<a href="http://localhost:8090/cgb2109javaweb03_war_exploded/ServletDemo3">点我,访问Servlet</a>
</body>
</html>
–2,创建后端Servlet程序
package cn.tedu.servlet;
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.IOException;
public class ServletDemo3 extends HttpServlet
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
System.out.println("doPost()");
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
System.out.println("doGet()");
–3,配置Servlet类
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<!--配置Servlet类的访问信息-->
<servlet>
<!--给Servlet设置一个名字(一般是和类名相同)
细则:名字可以自定义,但是必须唯一,
不能和别的<servlet>的<servlet-name>相同
-->
<servlet-name>hello</servlet-name>
<!--指定Servlet类的全路径(包名.类名)-->
<servlet-class>cn.tedu.servlet.ServletDemo2</servlet-class>
</servlet>
<!--指定浏览器的访问规则-->
<servlet-mapping>
<!--即将根据指定的名字,去找到一个要被访问的Servlet类的全路径-->
<servlet-name>hello</servlet-name>
<!--指定了浏览器的访问方式,
细则:值可以自定义,但是浏览器必须是一样的写法才能访问Servlet
否则404:找不到你要访问的资源
-->
<url-pattern>/a/b/c</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>hello2</servlet-name>
<servlet-class>cn.tedu.servlet.ServletDemo3</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>hello2</servlet-name>
<!--url-pattern的值不能和其他的url-pattern的值相同-->
<url-pattern>/ServletDemo3</url-pattern>
</servlet-mapping>
</web-app>
–4,测试
四,Servlet的继承结构
五,Servlet的生命周期
–1,概述
分为三大阶段
初始化 – 由Servlet主动调用init()
提供服务 – 由Servlet主动调用service()/doGet()/doPost()
销毁 – 由Servlet主动调用destroy()
–2,测试
创建Servlet程序
package cn.tedu.lifecycle;
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.IOException;
//1,Servlet程序的注解开发方式,代替了web.xml文件中的8行配置代码
@WebServlet("/ServletDemo4")//注解的参数是指浏览器的访问方式
public class ServletDemo4 extends HttpServlet
//2,Servlet的生命周期中会被调用的方法有:
//init() service()/doGet/doPost destroy()
//3,因为GenericServlet提供的以上方法中都是空实现,
// 重写这些方法并添加方法体来感受初始化的不同阶段
//4,重写的要求:有足够的权限 + 方法声明必须和父类一样
@Override
//当第一次访问Servlet程序时,Servlet自己调用init(),只会调用一次
public void init() throws ServletException
System.out.println("init()被调用了,Servlet已被初始化!");
@Override
//每次访问Servlet程序时,Servlet自己调用service(),会调用多次
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException
System.out.println("service()开始为您服务啦!");
@Override
//正常的关闭服务器时,Servlet自己调用destroy(),只会调用一次
public void destroy()
System.out.println("destroy()被调用了,Servlet即将被销毁!");
创建前端网页
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>前后端 安排起来</title>
</head>
<body>
<!-- 点击超链接跳转到Servlet -->
<a href="http://localhost:8090/cgb2109javaweb03_war_exploded/ServletDemo3">点我,访问ServletDemo3</a>
<a href="http://localhost:8090/cgb2109javaweb03_war_exploded/ServletDemo4">点我,访问ServletDemo4</a>
</body>
</html>
测试
六,Request
–1,概述
是指 从前端浏览器 到 后端的Servlet程序 的访问过程,叫请求的过程
可以使用Servlet提供的Request对象,来解析请求中的请求参数
–2,常用方法
getParamter()--按照参数名获取参数值,但是只得到一个值
getParamterValues()--按照参数名获取参数值,但是得到多个值,存入数组
setCharacterEncoding()--如果请求参数中有中文,设置字符集为utf-8
setAttribute()--设置属性
getAttribute()--获取属性
–3,测试
创建HTML网页
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>前端提交数据,后端解析数据</title>
</head>
<body>
<a href="http://localhost:8090/cgb2109javaweb03_war_exploded/ServletDemo5?name=jerry&pwd=123">点我,提交get数据1</a>
<a href="http://localhost:8090/cgb2109javaweb03_war_exploded/ServletDemo5?hobby=篮球&hobby=足球">点我,提交get数据2</a>
</body>
</html>
创建Servlet程序,解析请求参数
package cn.tedu.request;
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.IOException;
import java.util.Arrays;
@WebServlet("/ServletDemo5")
public class ServletDemo5 extends HttpServlet
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
doGet(request, response);
//当用户以get方式提交数据时,Servlet会自动调用doGet()
//get方式提交的数据,可以一个一个的解析getParameter()
//也可以解析多个值getParameterValues()
//如果使用的是Tomcat7.0以上的版本,get方式提交中文数据不会乱码
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException
//1,request解析请求参数 name=jerry&pwd=123
//1.1,获取一个值
String s = request.getParameter("name");
System.out.println(s);//获取name参数的值
String pwd = request.getParameter("pwd");
System.out.println(pwd);//获取pwd参数的值
//1.2,获取到多个值
String[] hobbies = request.getParameterValues("hobby");
System.out.println( Arrays.toString(hobbies) );
七,表单提交数据
–1,创建HTML网页文件
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<form action="http://localhost:8090/cgb2109javaweb03_war_exploded/ServletDemo6">
<h3>测试 get提交数据</h3>
姓名:<input type="text" placeholder="请输入姓名..." name="user"/> <br />
密码:<input type="password" placeholder="请输入密码..." name="pwd"/> <br />
<input type="submit" value="提交"/>
</form>
<form method="post"
action="http://localhost:8090/cgb2109javaweb03_war_exploded/ServletDemo6">
<h3>测试 post提交数据</h3>
姓名:<input type="text" placeholder="请输入姓名..." name="user"/> <br />
密码:<input type="password" placeholder="请输入密码..." name="pwd"/> <br />
<input type="submit" value="提交"/>
</form>
</body>
</html>
–2,创建Servlet程序
package cn.tedu.request;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet以上是关于cgb2109-day16的主要内容,如果未能解决你的问题,请参考以下文章