JSP学习_servlet
Servlet基础
1.什么是Servlet
JSP前身就是Servlet
Servlet就是在服务器上运行的小程序。一个Servlet就是一个java类,并且可以通过“请求-响应”编程模型来访问的这个驻留在服务器内存里的Servlet程序。
2.Tomcat容器等级
分为四个等级,Servlet的容器管理Context容器,一个Context对应一个web工程。
3.编写Servlet
(1)编写一个java类,使其继承HttpServlet
Servlet(interface):三个方法Init() service() destroy()
其子类
GenericServlet(Abstract Class):与协议无关的Servlet
其子类
HttpServlet(Abstract Class):实现了http协议的servlet
其子类
自定义Servlet:一般重写(覆盖)doGet与doPost方法
(2)重写doGet()或doPost()方法(取决于用户提交方式是get或post)
(3)在web.xml中注册Servlet
index.jsp
get方式请求一个Servlet
<a href="servlet/HelloServlet">Get方式请求HelloServlet</a>
建包,servlet,建类,HelloServlet.java(建类时Superclass--browse..--choose a type--HttpServlet-javax.servlethttp来指定父类)
HelloServlet.java
//继承于HttpServlet
重写两个方法(右键选择source override implement methods,选择doget和dopost方法)
(参数req---request,resp---response)
重写doget方法:
System.out.println("处理get请求");
PrintWriter out = response.getWriter();//给浏览器输出的对象
//指定文件输出类型
response.setContextType("text/html;charset=utf-8");
out.println("<h1>HelloServlet</h1><br>");//给浏览器输出一个信息
在web.xml中注册这个Servlet:
加入两个标签:
<servlet>
<servlet-name>HelloServlet</servlet-name>//给servlet起个名字
<servlet-class>servlet.HelloServlet</servlet-class>//表示要访问的servlet所在的类,包括包名,servlet.HelloServlet
</servlet>
<servlet-mapping>
<servlet-name>HelloServlet</servlet-name>//给servlet起个名字,必须与上面一样
<url-pattern>/servlet/HelloServlet</url-pattern>//表示名字叫做HelloServlet,这个Servlet访问的路径,要与在jsp界面上写的地址一致
</servlet-mapping>
完成
index.jsp
post方式请求一个Servlet
<form action="servlet/HelloServlet" method="post">
<input type="submit" vlaue="post方式请求HelloServlet"/>
</form>
重写post方法:
System.out.println("处理post请求");
PrintWriter out = response.getWriter();//给浏览器输出的对象
//指定文件输出类型
response.setContextType("text/html;charset=utf-8");
out.println("<h1>HelloServlet</h1><br>");//给浏览器输出一个信息
使用myeclipse编写第一个Servlet
1.src->new->Servlet
2.重写doGet()或doPost()
3.部署运行
new webproject->index.jsp->src->new servlet->next
自动在web.xml中注册这个Servlet
Servlet执行流程:
get方式请求HelloServlet---><a href="servlet/HelloServlet">(超链接请求的地址就是一个Servlet,超链接方式提交称为get请求)
用户点击超链接,提交给服务器之后,服务器在web.xml中找与之对应的url地址<url-pattern>/servlet/HelloServlet</url-pattern>
然后找到对应的Servlet名字,在找名字相同的处理类<servlet-class>servlet.HelloServlet</servlet-class>
然后就可以找到这个处理类,再根据用户提交方式调用类中重写的方法,这样就在页面显示Servlet的执行结果
4.Servlet生命周期
(1)初始化阶段,调用Init()方法
(2)响应客户请求阶段,调用service()方法。由service()方法根据提交方式选择执行doGet()或doPost方法()
(3)终止阶段,调用destory()方法。
在以下时刻Servlet容器装载Servlet:
(1)Servlet容器启动时自动装载某些Servlet,实现它只需要在web.xml文件中的<servlet></servlet>之间添加如下代码:
<loadon-startup>1</loadon-startup>数字越小表示优先级别越高
(2)在Servlet容器自动启动后,客户首次向Servlet发送请求
(3)Servlet类文件被更新后,重新装载Servlet
Servlet被装载后,Servlet容器创建一个Servlet实例并且调用Servlet的init()方法进行初始化。在整个Servlet生命周期内,init()方法只被调用一次
doGet(request,response);//让dopost执行与doget相同的操作
5.Servlet获取九大内置对象
JSP对象 怎样获得
out resp.getWriter(类型并不匹配)
request service方法中的req参数
response service方法中的resp参数
session req.getSession()函数
application getServletContext()参数
exception Throwable
page this
pageContext PageContext
Config getServletConfig函数
6.Servlet与表单
RegServlet.java
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request,response);//让dopost执行与doget相同的操作
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
Users u = new Users();
String username,mypassword,gender,email,introduce,isAccept;
Date birthday;
String[] favorites;
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
try
{
username = request.getParameter("username");
mypassword = request.getParameter("mypassword");
gender = request.getParameter("gender");
email = request.getParameter("email");
introduce = request.getParameter("introduce");
birthday = sdf.parse(request.getParameter("birthday"));
if(request.getParameterValues("isAccpet")!=null)
{
isAccept = request.getParameter("isAccept");
}
else
{
isAccept = "false";
}
//用来获取多个复选按钮的值
favorites = request.getParameterValues("favorite");
u.setUsername(username);
u.setMypassword(mypassword);
u.setGender(gender);
u.setEmail(email);
u.setFavorites(favorites);
u.setIntroduce(introduce);
if(isAccept.equals("true"))
{
u.setFlag(true);
}
else
{
u.setFlag(false);
}
u.setBirthday(birthday);
//把注册成功的用户对象保存在session中
request.getSession().setAttribute("regUser", u);
//跳转到注册成功页面
request.getRequestDispatcher("../userinfo.jsp").forward(request,response);
}
catch(Exception ex)
{
ex.printStackTrace();
}
}
reg.jsp
<body>
<h1>用户注册</h1>
<hr>
<form name="regForm" action="servlet/RegServlet" method="post" >
<table border="0" width="800" cellspacing="0" cellpadding="0">
<tr>
<td class="lalel">用户名:</td>
<td class="controler"><input type="text" name="username" /></td>
</tr>
<tr>
<td class="label">密码:</td>
<td class="controler"><input type="password" name="mypassword" ></td>
</tr>
<tr>
<td class="label">确认密码:</td>
<td class="controler"><input type="password" name="confirmpass" ></td>
</tr>
<tr>
<td class="label">电子邮箱:</td>
<td class="controler"><input type="text" name="email" ></td>
</tr>
<tr>
<td class="label">性别:</td>
<td class="controler"><input type="radio" name="gender" checked="checked" value="Male">男<input type="radio" name="gender" value="Female">女</td>
</tr>
<tr>
<td class="label">出生日期:</td>
<td class="controler">
<input name="birthday" type="text" id="control_date" size="10"
maxlength="10" οnclick="new Calendar().show(this);" readonly="readonly" />
</td>
</tr>
<tr>
<td class="label">爱好:</td>
<td class="controler">
<input type="checkbox" name="favorite" value="nba"> NBA
<input type="checkbox" name="favorite" value="music"> 音乐
<input type="checkbox" name="favorite" value="movie"> 电影
<input type="checkbox" name="favorite" value="internet"> 上网
</td>
</tr>
<tr>
<td class="label">自我介绍:</td>
<td class="controler">
<textarea name="introduce" rows="10" cols="40"></textarea>
</td>
</tr>
<tr>
<td class="label">接受协议:</td>
<td class="controler">
<input type="checkbox" name="isAccept" value="true">是否接受霸王条款
</td>
</tr>
<tr>
<td colspan="2" align="center">
<input type="submit" value="注册"/>
<input type="reset" value="取消"/>
</td>
</tr>
</table>
</form>
</body>
7.Servlet路径跳转
绝对路径:
相对路径:相当于当前资源的路径
注意:
/servlet/HelloServlet 第一个斜线表示服务器的根目录
绝对路径:可以使用path变量
<a href="<%= path %>/servlet/HelloServlet"> </a>
表单中action的URL地址写法,与链接方式完全相同
1.什么是Servlet
JSP前身就是Servlet
Servlet就是在服务器上运行的小程序。一个Servlet就是一个java类,并且可以通过“请求-响应”编程模型来访问的这个驻留在服务器内存里的Servlet程序。
2.Tomcat容器等级
分为四个等级,Servlet的容器管理Context容器,一个Context对应一个web工程。
3.编写Servlet
(1)编写一个java类,使其继承HttpServlet
Servlet(interface):三个方法Init() service() destroy()
其子类
GenericServlet(Abstract Class):与协议无关的Servlet
其子类
HttpServlet(Abstract Class):实现了http协议的servlet
其子类
自定义Servlet:一般重写(覆盖)doGet与doPost方法
(2)重写doGet()或doPost()方法(取决于用户提交方式是get或post)
(3)在web.xml中注册Servlet
index.jsp
get方式请求一个Servlet
<a href="servlet/HelloServlet">Get方式请求HelloServlet</a>
建包,servlet,建类,HelloServlet.java(建类时Superclass--browse..--choose a type--HttpServlet-javax.servlethttp来指定父类)
HelloServlet.java
//继承于HttpServlet
重写两个方法(右键选择source override implement methods,选择doget和dopost方法)
(参数req---request,resp---response)
重写doget方法:
System.out.println("处理get请求");
PrintWriter out = response.getWriter();//给浏览器输出的对象
//指定文件输出类型
response.setContextType("text/html;charset=utf-8");
out.println("<h1>HelloServlet</h1><br>");//给浏览器输出一个信息
在web.xml中注册这个Servlet:
加入两个标签:
<servlet>
<servlet-name>HelloServlet</servlet-name>//给servlet起个名字
<servlet-class>servlet.HelloServlet</servlet-class>//表示要访问的servlet所在的类,包括包名,servlet.HelloServlet
</servlet>
<servlet-mapping>
<servlet-name>HelloServlet</servlet-name>//给servlet起个名字,必须与上面一样
<url-pattern>/servlet/HelloServlet</url-pattern>//表示名字叫做HelloServlet,这个Servlet访问的路径,要与在jsp界面上写的地址一致
</servlet-mapping>
完成
index.jsp
post方式请求一个Servlet
<form action="servlet/HelloServlet" method="post">
<input type="submit" vlaue="post方式请求HelloServlet"/>
</form>
重写post方法:
System.out.println("处理post请求");
PrintWriter out = response.getWriter();//给浏览器输出的对象
//指定文件输出类型
response.setContextType("text/html;charset=utf-8");
out.println("<h1>HelloServlet</h1><br>");//给浏览器输出一个信息
使用myeclipse编写第一个Servlet
1.src->new->Servlet
2.重写doGet()或doPost()
3.部署运行
new webproject->index.jsp->src->new servlet->next
自动在web.xml中注册这个Servlet
Servlet执行流程:
get方式请求HelloServlet---><a href="servlet/HelloServlet">(超链接请求的地址就是一个Servlet,超链接方式提交称为get请求)
用户点击超链接,提交给服务器之后,服务器在web.xml中找与之对应的url地址<url-pattern>/servlet/HelloServlet</url-pattern>
然后找到对应的Servlet名字,在找名字相同的处理类<servlet-class>servlet.HelloServlet</servlet-class>
然后就可以找到这个处理类,再根据用户提交方式调用类中重写的方法,这样就在页面显示Servlet的执行结果
4.Servlet生命周期
(1)初始化阶段,调用Init()方法
(2)响应客户请求阶段,调用service()方法。由service()方法根据提交方式选择执行doGet()或doPost方法()
(3)终止阶段,调用destory()方法。
在以下时刻Servlet容器装载Servlet:
(1)Servlet容器启动时自动装载某些Servlet,实现它只需要在web.xml文件中的<servlet></servlet>之间添加如下代码:
<loadon-startup>1</loadon-startup>数字越小表示优先级别越高
(2)在Servlet容器自动启动后,客户首次向Servlet发送请求
(3)Servlet类文件被更新后,重新装载Servlet
Servlet被装载后,Servlet容器创建一个Servlet实例并且调用Servlet的init()方法进行初始化。在整个Servlet生命周期内,init()方法只被调用一次
doGet(request,response);//让dopost执行与doget相同的操作
5.Servlet获取九大内置对象
JSP对象 怎样获得
out resp.getWriter(类型并不匹配)
request service方法中的req参数
response service方法中的resp参数
session req.getSession()函数
application getServletContext()参数
exception Throwable
page this
pageContext PageContext
Config getServletConfig函数
6.Servlet与表单
RegServlet.java
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request,response);//让dopost执行与doget相同的操作
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
Users u = new Users();
String username,mypassword,gender,email,introduce,isAccept;
Date birthday;
String[] favorites;
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
try
{
username = request.getParameter("username");
mypassword = request.getParameter("mypassword");
gender = request.getParameter("gender");
email = request.getParameter("email");
introduce = request.getParameter("introduce");
birthday = sdf.parse(request.getParameter("birthday"));
if(request.getParameterValues("isAccpet")!=null)
{
isAccept = request.getParameter("isAccept");
}
else
{
isAccept = "false";
}
//用来获取多个复选按钮的值
favorites = request.getParameterValues("favorite");
u.setUsername(username);
u.setMypassword(mypassword);
u.setGender(gender);
u.setEmail(email);
u.setFavorites(favorites);
u.setIntroduce(introduce);
if(isAccept.equals("true"))
{
u.setFlag(true);
}
else
{
u.setFlag(false);
}
u.setBirthday(birthday);
//把注册成功的用户对象保存在session中
request.getSession().setAttribute("regUser", u);
//跳转到注册成功页面
request.getRequestDispatcher("../userinfo.jsp").forward(request,response);
}
catch(Exception ex)
{
ex.printStackTrace();
}
}
reg.jsp
<body>
<h1>用户注册</h1>
<hr>
<form name="regForm" action="servlet/RegServlet" method="post" >
<table border="0" width="800" cellspacing="0" cellpadding="0">
<tr>
<td class="lalel">用户名:</td>
<td class="controler"><input type="text" name="username" /></td>
</tr>
<tr>
<td class="label">密码:</td>
<td class="controler"><input type="password" name="mypassword" ></td>
</tr>
<tr>
<td class="label">确认密码:</td>
<td class="controler"><input type="password" name="confirmpass" ></td>
</tr>
<tr>
<td class="label">电子邮箱:</td>
<td class="controler"><input type="text" name="email" ></td>
</tr>
<tr>
<td class="label">性别:</td>
<td class="controler"><input type="radio" name="gender" checked="checked" value="Male">男<input type="radio" name="gender" value="Female">女</td>
</tr>
<tr>
<td class="label">出生日期:</td>
<td class="controler">
<input name="birthday" type="text" id="control_date" size="10"
maxlength="10" οnclick="new Calendar().show(this);" readonly="readonly" />
</td>
</tr>
<tr>
<td class="label">爱好:</td>
<td class="controler">
<input type="checkbox" name="favorite" value="nba"> NBA
<input type="checkbox" name="favorite" value="music"> 音乐
<input type="checkbox" name="favorite" value="movie"> 电影
<input type="checkbox" name="favorite" value="internet"> 上网
</td>
</tr>
<tr>
<td class="label">自我介绍:</td>
<td class="controler">
<textarea name="introduce" rows="10" cols="40"></textarea>
</td>
</tr>
<tr>
<td class="label">接受协议:</td>
<td class="controler">
<input type="checkbox" name="isAccept" value="true">是否接受霸王条款
</td>
</tr>
<tr>
<td colspan="2" align="center">
<input type="submit" value="注册"/>
<input type="reset" value="取消"/>
</td>
</tr>
</table>
</form>
</body>
7.Servlet路径跳转
绝对路径:
相对路径:相当于当前资源的路径
注意:
/servlet/HelloServlet 第一个斜线表示服务器的根目录
绝对路径:可以使用path变量
<a href="<%= path %>/servlet/HelloServlet"> </a>
表单中action的URL地址写法,与链接方式完全相同
8.阶段项目