Servlet&网络访问
首先得了解软件的开发模式:
A:单机模式:开发的程序在一台电脑上运行,如world,excel等
缺点:软件比较庞大,如果运行要求高,则每台电脑都需要有高配置才行。
B:C/S结构(Client/Server)
把软件运行时各台电脑运行时需要的功能都放到服务器上,在每台电脑运行的功能放到客户端,这样可以减轻客户端的压力同时也减轻了服务端的压力,也实现了通过功能让不同电脑访问的。如:qq。360等!
缺点:当电脑数量较多时需要在每台电脑上安装客户端比较繁琐,软件更新比较繁杂
C:B/S结构(Browser/Server)
开发这种模式的程序不需要开发客户端,客户端采用浏览器作为客户端,这种模式只需要在服务器端开发软件,客户端通过浏览器进行访问即可,常用的开发动态网站的技术有:ASP, ASP.NET, PHT, JSP等
网络程序结构:
网络程序的分类:B/S C/S
网络访问的网络基础知识:
URL(Uniform Resource Locator)统一资源定位符
超文本传输协议(Http, HyPerText Transfer Protocol)是互联网上采用的最广泛的一种网络协议,设定Http的最初目的视为了提供发布和接受Html页面的方法
端口(port)计算机与外界通讯交流的出入口,http默认的端口是80, 端口能识别要访问的是计算机上的那个进程,一个进程对应一个端口
两种请求方式: GET和POST,GET是将请求消息放在请求行中(URL中),信息可见,不安全
POST是将请求消息放在请求体中,信息不可见,相对GET来说较安全,其他区别就不赘述了
Tomcat
Tomcat是小型服务器端容器
tomcat服务器想要正常运行,必须首相配置环境变量:
新建系统变量:
CATALINA_HOME=D:\tomcat6
在path环境变量中加入如下内容:
%CATALINA_HOME%\bin;
检测是否配置合适:将bin目录下的startup.bat双击,或者拖到dos中 ,如果闪掉表示配置失败,考虑jdk是否安装合适,jdk配置也需要标准的JAVA_HOME
修改Tomcat的端口 Tomcat->cont->server.xml <Connector port="8080"/>进行修改就可以了
WEB-INF下面的web.xml(站点部署描述符文件)
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
如果用户在访问网站时没有指定具体的访问哪个网页,则系统默认会按照这里的配置逐个查找匹配的网页,以最先找到网页的为准进行运行.
ROOT为系统默认的站点那么如何建立自己的站点呢? 在ROOT同级目录下新建文件夹,然后将ROOT下面的文件拷贝过来
如何修改myeclipse中站点中新建网页jsp的默认编码: window->proferences->搜索jsp->Encoding中进行修改
使用JSP的九大内置对象之一(
request:请求对象,获取客户端发送过来的数据 response:响应对象,将服务器端的信息回送到客户端
out:输出信息到客户端 session:会话对象
application:应用程序对象 pageContext:页面上下文对象
page:网页对象 config:配置对象
exception:异常对象
)
新建web项目在WebRoot下面写jsp页面
Servlet是由java语言编写,运行在服务器端的程序,并由服务器调用
Servlet程序实现
1.编写一个类继承HttpServlet类,但eclipse提供方便,直接可以新建Servlet,下面操作会自动生成
2.重写doGet()和doPost()的方法
3.注册Servlet
Servlet跳转
服务器跳转:地址栏不改变,能传递request对象 调用request.getRequestDispatcher("success.jsp").forward(request, response);方法进行跳转
客户端跳转: 地址栏改变 不能传递request对象 调用reponse.sendRedirect(" "); 重定向
简单页面请求登陆:
页面通过表单提交,action=“/Servlet” //此为在web.xml配置文件中配置Servlet的路径,配置文件会通过路径访问到Servlet类
<servlet>
③<servlet-name>Servlet</servlet-name>
④ <servlet-class>Servlet</servlet-class>
</servlet>
<servlet-mapping>
②<servlet-name>Servlet</servlet-name>
①<url-pattern>/Servlet</url-pattern>
</servlet-mapping>
配置文件中通过 1找到到2,通过2找到3,通过3找到4;
以下为Servlet中的简单代码:
public void doGet(HttpServletRequest request,HttpServletResponse response)
throwsServletException, IOException {
System.out.println("======doGet====");
//将GET请求转嫁给Post
this.doPost(request,response);
}
/**
* 当客户端采用post提交方式提交时自动调用的方法
* @param request 请求对象
* @param response 响应对象
*/
public voiddoPost(HttpServletRequest request, HttpServletResponse response)
throwsServletException, IOException {
System.out.println("=====doPost====");
response.setContentType("text/html;charset=utf-8");
PrintWriterout = response.getWriter();
//1.得到客户端的提交方式
Stringmethod=request.getMethod();
System.out.println("method="+method);
StringuserName="";
Stringpwd="";
if("GET".equals(method)){
//GET提交方式的处理代码
userName=request.getParameter("userName");
pwd=request.getParameter("pwd");
//解决GET提交时的中文乱码问题,同时这个方法也可以解决post提交的中文乱码问题
pwd=this.encoding(pwd);
}elseif("POST".equals(method)){
//POST提交方式的处理代码
//解决Post提交的中文乱码问题
request.setCharacterEncoding("UTF-8");
userName=request.getParameter("userName");
pwd=request.getParameter("pwd");
}
Stringmsg="userName="+userName+",pwd="+pwd;
System.out.println(msg);
out.println(msg);
/*if("admin".equals(userName)&& "123".equals(pwd)){
request.setAttribute("userName",userName);
request.getRequestDispatcher("success.jsp").forward(request,response);
}else{
//在Servlet中得到session对象的方法
HttpSession session=request.getSession();
session.setAttribute("userName",userName);
response.sendRedirect("login.jsp");
}*/
out.flush();
out.close();
}
/**
*解决GET提交的中文乱码问题,同时这种方式也适合用POST提交的中文乱码问题的解决方式,但是post直接可以调用自己的方法解决中文乱码问题,而不需要自己写
* 张三 UTF-8
* 传递到服务器时,tomcat服务器将张三对应的二进制使用ISO8859_1编码表进行解码.
* 解决方案:将乱码使用原先的编码表ISO8859_1进行编码,之后再使用正确的编码表UTF-8进行解码就正确了.
*/
private Stringencoding(String userName) {
if(userName!=null){
try {
returnnew String(userName.getBytes("ISO8859_1"),"UTF-8");
} catch(UnsupportedEncodingException e) {
//TODO Auto-generated catch block
e.printStackTrace();
}
}
return null;
}