作为一个电脑工作者就应该自己装配电脑,从而节省经济和提高开发效率。
(一)Servlet
java web 目录结构
- WebContent
- WEB-INF
- classes
- lib
- web.xml
- jsp 页面
- html 页面
- 图片 ...
1) eclipse修改编译文件默认输出目录,设为classes<build path -->配置build path-->source>
2)在tomcat的conf目录下依次创建 Catalina/localhost/test.xml<配置任意目录下的web应用程序>
<Context
Path="/wuyong"
docBase="C:\Users\Administrator\workspace\test_3\WebContent"
reloadable="true"/>
!path名作为manager下的配置名
使用eclipse开发java web项目
1)项目视图模式选择:navigator;project explorer;package explorer
window --> show view --> ?
2) 新建Tomcat服务器:window --> preferences --> server --> runtime Environments
3) 新建web项目:Dynamic Web Project
4)定制new透视图<windows-->perspective-->customize perspective>
Servlet的注册与运行
1)servlet程序必须在web应用程序的web.xml中进行注册和映射其访问路径,才可以被servlet引擎加载和被外界访问
2)一个<servlet>元素用于注册一个servlet,它包含两个主要子元素<servlet-name>、<servlet-class>.分别用于设置servlet的注册和完整类名
3)一个<servlet-mapping>元素用于映射一个已注册的servlet的一个对外访问路径,它含有两个子元素:<servlet-name>和<url-pattern>,分别用于指定servlet的注册名称和
对外访问路径
4)注意:一个servlet可以有多个映射
5)url-pattern的三种参数形式:/-- ; /* ; *.--
类HelloServlet实现Servlet的一个例子
1)创建一个servlet接口实现类:public class HelloServlet implements Servlet
2) 在web.xml中注册和映射这个servlet:
<servlet>
<servlet-name>hello</servlet-name>
<servlet-class>com.ants.service.HelloService</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/helloServlet</url-pattern>
</servlet-mapping>
Servlet接口的方法
init(ServletConfig config)
service(ServletRequest req,ServletResponse res)
destory()
getServletConfig()
getServletInfo()
Servlet的实现类<也是ServletConfig的实现类>
CenericServlet<不常用>
HttpServlet
ServletConfig接口的方法
getInitParameter(String name)
getInitParameterNames()
getServletContext()
getServletName()
ServletContext接口的常用方法:<当前Web应用大管家,可以获取Web应用各方面信息>
getRealPath(String name):获取当前web应用某一个文件在服务器上的绝对路径,而不是部署前的路径
getContextPath():获取当前web应用的名称
getResourceAsStream(String path):获取当前web应用某一个文件对应的输入流
setAttribute(String name,Object object)
getAttribute(String name)
ServletContext接口
设置初始化参数:<全局的>
<context-param>
<param-name>driver</param-name>
<param-value>com.mysql.jdbc.Driver</param-value>
<context-param>
设置servlet初始化参数:<局部的,servlet的load-on-startup之前>
<init-param>
<param-name>user</param-name>
<param-value>root</param-value>
</init-param>
<init-param>
<param-name>password</param-name>
<param-value>123456</param-value>
</init-param>
get请求与post请求
get请求数据以键值对的方式添加在地址栏,数据量与url地址容纳量有关,一般4kb-7kb
post请求数据封装在form data,数据量无限制
service()
ServletRequest:封装了请求信息
- 获取请求参数
String getParameter(String name):根据请求参数名,返回一个参数值
String getParameterValues(String name):根据请求参数名,返回参数对应的字符串数组
Enumeration getParameterNames():返回参数对应的Enumeration对象
Map getParameterMap():返回键值对 key-->参数名 value-->参数值,String类型
- 请求转发:<getRequestDispatcher是ServletRequest中定义>
ServletRequest.getRequestDispatcher(String path).forward(ServletRequest request,ServletResponse,response)
HttpServlet实现类的doGet()中的对象:HttpServletRequest
2)获取请求url:HttpServletRequset.getRequestURI()
3)获取请求方式:HttpServletRequset.getMethod()
4)获取请求的查询字符串:HttpServletRequset.getQueryString()
若是get请求,返回?后的字符串
若是post请求,返回 null
5)获取Servlet的映射路径:HttpServletRequset.getServletPath()
6)和attribute相关的几个方法
ServletResponse:封装了响应信息
1)*getWriter():返回PrintWriter 对象.调用该对象的print()方法,把print的参数打印到浏览器
2)设置响应类型:response.setContentType("application/msword")
3) void sendRedirect(String location):指定的重定向.(此方法为HttpServletResponse中定义)
(二)JSP
1、jsp的定义:全称Java Server Pages,java服务器页面。其根本是一个简化的servlet设计。
2、jsp的九个隐含对象<没有声明就可以直接使用>
request
response
pageContext
session
application
config
out
page
exception<特殊:前提是设置了page指令的属性-->isErrorPage="true">
3、换行的2种方式
① %>
<br>
<%
② out.print("<br>");
4、作用域属性范围从小到大
pageContext,request,session,application
5、jsp语法
1)静态html内容称
2)jsp表达式 <%=表达式 %>:输出表达式的值,相当于out.print()
3) 脚本片段,java代码中圈套html代码的 java代码片段,多个脚本片段可以相互进行访问
4)jsp声明 <%! %>
5) jsp注释 <%-- --%> html注释<!-- -->
6、域对象的属性操作
域对象:
pageContext:属性的作用范围仅限于当前jsp页面
request:属性的作用范围仅限于同一个请求
session:属性的作用范围限于一次会话:浏览器打开直到关闭称之为一次会话<在此期间会话不失效>
application:属性作用范围限于当前WEB应用.只要在一处设置属性,在其他各处的jsp或servlet都可 以获取,服务器关闭或重启消失
7、请求转发与重定向<requestDispatcher、sendRedirect>
servlet类的创建,可选择映射和方法
请求转发与重定向:
1)本质区别:请求的转发只发出一个请求,而重定向则发出了两次请求
具体:
①请求转发:地址栏是初次发出请求的地址
重定向:地址栏不再是初次发出的请求地址,地址栏为最后响应的那个地址
②请求转发:在最终的Servlet中,request对象和中转的request对象是同一个
重定向:在最终的Servlet中,request对象和中转的request对象不是同一个对象
③请求转发:只能转发给当前WEB应用的资源
重定向:可以重定向到任何资源
④请求转发:/ 代表的是当前 WEB 应用的根目录
重定向:/ 代表的是当前 WEB 站点的根目录
8、jsp 2.0的三种指令page,include,taglib
page指令:
1)全局任意位置都全局有效,建议放在起始位置
2)page指令的 常用 属性:
①import属性:指定当前jsp页面对应的Servlet要导入的类
<%@ page import="com.ants.test.Test"%>
②session属性:取值为true 或false,指定当前页面的session隐藏变量是否可用
<%@ page session="false"%>
③errorPage 和 isErrorPage
> errorPage 指定若当前页面出错实际响应的页面,/ 代表当前 WEB 应用根目录,请求方 式是 请求转发
<%@ page errorPage="/error.jsp"%>
> isErrorPage 指定当前页面是否为错误处理页面,属性值为 true 则可以使用隐含对象 exception,不建议能够直接访问该页面,属性值默认为
false
> WEB-INF下的文件为隐私文件不能通过url直接访问,但可以通过请求转发访问
<%@ page errorPage="/WEB-INF/error.jsp"%>
④contentType属性:指定当前页面的响应类型,实际调用的是response.setContentType ("text/html;charset=UTF-8")
⑤pageEncoding属性:指定当前jsp页面的字符编码.通常和contentType中的charset一致
⑥isELIgnored属性:指定当前页面是否可以使用EL表达式,通常取值为true
include指令:将其他文件静态引入servlet源文件中,其中file属性用于指定被引用文件的相对路径,若以/
开头则是 WEB 应用的根目录
<%@ include file="registerURL"%>
9、jsp标签
标签名以小写jsp作为前缀,如<jsp:include>、<jsp:forward>
<jsp:include> 将其他文件资源 动态引入,生成2个servlet源文件
<jsp:include page="b.jsp"></jsp:include>
<jsp:forward>
<jsp:forward page="/include/b.jsp"></jsp:forward>
10、中文乱码问题
1)jsp、开发工具、浏览器的编码格式改为utf-8
2)若get请求-->servlet容器中conf/server.xml 修改编码格式
若post请求-->servlet接口中的service()中添加<前提extends HttpServlet实现类>
request.setCharacterEncoding("utf-8")
response.setCharacterEncoding("utf-8")