b/s
1、开发成本低
2、管理维护简单
3、产品升级遍历
4、用户使用房兵,故障概率低。
不足:
1、安全性不同
2、客户端不能改变,受浏览器限制
Servlet
Servlet(java服务器小程序)是java编写的服务器程序,特点:
1、由服务器端调用和执行的;
2、用java语言编写的
3、按照Servlet规范开发的
4、功能强大,可以完成几乎所有的网站功能
5、学习jsp的基础
Tomcat三个功能:
1、web服务器
2、jsp容器
3、servlet容器
安装Tomcat要配置环境变量
1、jdk环境变量(最新的其实只安装配置jre就可以了)
2、Tomcat环境变量配置
1,新建变量名:CATALINA_BASE,变量值:C:\tomcat
2,新建变量名:CATALINA_HOME,变量值:C:\tomcat
3,打开PATH,添加变量值:%CATALINA_HOME%\lib;%CATALINA_HOME%\bin
path环境变量还可以设置成安装bin目录地址,就可以命令行直接打开Tomcat
打开浏览器,在地址栏中输入http://localhost:8080回车,如果看到Tomcat自带的一个JSP页面,说明你的JDK和Tomcat已搭建成功。
配置文件
配置文件:
用户名:admin
密码:admin
tomcat-users.xml:
<?xml version="1.0" encoding="UTF-8"?>
<tomcat-users>
<role rolename="manager-gui"/>
<user username="admin" password="admin" roles="manager-gui"/>
</tomcat-users>
一个servlet的部署
<servlet>
<!-- 给servlet取名,这个名字是任意的,不要用汉字-->
<servlet-name>hello</servlet-name>
<!-- 指明servlet的路径(包名+类名)-->
<servlet-class>EclipseWorkSpace.javastudy.src.servletDemo.ServletTest</servlet-class>
</servlet>
<servlet-mapping>
<!--给你的servlet取名,任意的-->
<servlet-name>hello</servlet-name>
<!--这是在浏览器中输入的访问该servlet的url-->
<url-pattern></url-pattern>
</servlet-mapping>
程序
import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
public class ServletTest implements Servlet{
public static int i = 0;
//销毁servlet实例,释放内存
/*
* 销毁servlet实例:
* 1、reload该servlet(webapps)
* 2、关闭Tomcat,或者关机
* */
@Override
public void destroy() {
// TODO Auto-generated method stub
}
//得到servlet配置文件
@Override
public ServletConfig getServletConfig() {
// TODO Auto-generated method stub
return null;
}
@Override
public String getServletInfo() {
// TODO Auto-generated method stub
return null;
}
//此函数用于初始化该servlet,该函数只会被调用一次(类似于构造器),当用户第一次访问该servlet,被调用
@Override
public void init(ServletConfig arg0) throws ServletException {
// TODO Auto-generated method stub
System.out.println("init");
}
//用于处理业务逻辑,程序员应当把业务逻辑代码写在这里
//当用户访问servlet,都会被调用
//ServletRequest 用于获得客户端信息
//ServletResponse 向客户端返回信息
@Override
public void service(ServletRequest req, ServletResponse res)
throws ServletException, IOException {
// TODO Auto-generated method stub
//从res中得到PrintWriter,然后通过IO流返回信息
PrintWriter pw = res.getWriter();
pw.println("返回到浏览器的信息");
}
}
Servlet是部署在容器中的,它的生命周期由容器管理
Servlet生命周期分为以下几个阶段:
1、装在servlet,由相应的容器完成
2、创建一个servlet实例
3、调用servlet的init()方法,该方法只会在第一次访问该servlet时被调用一次
4、服务,调用servlet的service()方法,一般业务逻辑在这里处理,该方法访问servlet时,都会被调用
5、销毁,调用servlet的destory()方法,销毁servlet实例,该方法再一下情况被调用
- tomcat重新启动
- reload该Webapp
- 重启电脑
通过继承GenericServlet开发servlet
通过GenericServlet开发servlet只需要重写service方法
package servletDemo;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.GenericServlet;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
public class GenerciServletTest extends GenericServlet{
@Override
//ServletRequest 用于获得客户端信息
//ServletResponse 向客户端返回信息
public void service(ServletRequest req, ServletResponse res)
throws ServletException, IOException {
// TODO Auto-generated method stub
try{
PrintWriter pw = res.getWriter();
pw.println("hello");
}catch(Exception e){
e.printStackTrace();
}
}
}
通过集成HttpServlet开发servlet
需要重写doGet、goPost方法。
表单提交数据get请求和post请求的区别:
1、从安全性看get<post,get提交的数据会在浏览器的地址栏显示
2、从提交的内容大小看,get<post,get提交的数据不能大于2k,而post提交的数据理论上不受限制,但实际上建议不大于64k
3、请求响应速度看:get>post,get请求服务器立即处理,post请求可能形成一个队列请求。
import java.io.PrintWriter;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class HttpServletTest extends HttpServlet{
/**
*
*/
//处理get请求
public void doGet(HttpServletRequest req, HttpServletResponse res){
//业务逻辑
try{
PrintWriter pw = res.getWriter();
pw.println("hello");
}catch(Exception e){
e.printStackTrace();
}
}
//处理post请求
public void doPost(HttpServletRequest req, HttpServletResponse res){
this.doGet(req, res);
}
}
重新部署可能web服务器找不到信息,到处理页面reload一下就可以
中文乱码问题:
HttpServletResponse res
res.setContetntYype("text/html;charset=gbk");
获得浏览器的信息
HttpServletRequest req
string s1 = req.getParameter("usename");
string s2 = req.getParameter("控件名");
跳转到指定文件:
res.sendRedirect("");//你要到的servlet那个url
同一用户的不同页面如何共享数据
1、cookie
服务器在客户端保存用户的信息,比如登录名、密码等,就是cookie。
一般保存在客户端的c:\Documents and Settings目录下
Cookie的用处:
1、保存用户名、密码,在一定时间不用重新登录
2、记录用户访问网站的喜好,比如:有无背景音乐等
3、网站的个性化:比如定制网站的服务、内容
2、sendRedirect跳转
通过该方法可以将信息传送到下一个页面:
sendRedirect("welcome?usename="shunping);;的形式
1、welcome代表你要跳转的nameservlet的url
2、servlet url名和变量之间有?号
3、如果传递两个以上的值,用&号
如果传递的是中文,可能会有乱码,需要处理一下。
有点:传送信息的速度比较快
缺点:只能传送字符串,而不能传送一个对象
可以将一个页面的信息传递给另一个页面
3、session技术
4、隐藏表单的提交(form)