到公司两个礼拜了,也没有接触到实质性的项目,由于基础比较薄弱,对Java框架也没有使用过,所以先熟悉基本的流程,领导暂时分配的就是读取数据库中的信息,然后对数据以表格的形式,进行简单的增删改查,然后逐渐增加难度,由浅入深,真的挺人性化的。下面我就以一个我做的例子为例(该例子也是参考网上的某个前台界面,不过略有改动)粗略的说一下整个项目的流程:
1.搭建环境
刚开始什么JDK啊,jre啊,tomcat啊,myeclipse啊,mysql,sqlserver等等,这些相关软件的安装和配置我就不多说了,这些网上博客,论坛都已经写的烂透了。所以我直接从项目的结构搭建开始说起吧,首先说一下我用的环境:myeclipse10,jdk1.7(jre),tomcat7,mysql5.5,偶尔也会用sql server2008,总之数据库的更换其实对基础学习阶段并没有太多的影响,只不过是JDBC的配置(url,user,password)一些改变。
框架的整体结构如下:细节说明。项目名称:StudentManagerWeb。采用MVC模式,M:model中定义数据的单元属性和基本的get(),set()方法;V:采用JSP技术,嵌入html语言。C:控制层在controll中,业务逻辑的编写。
读程序流程:Step1:查找到WEB-INF下面的web.xml文件,打开之后查看welcome字段,寻找项目的起始页面。
web.xml代码如下:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<!-- 登陆首页 -->
<welcome-file-list>
<welcome-file>login.jsp</welcome-file>
</welcome-file-list>
<!-- 项目配置 -->
<servlet>
<servlet-name>CheckManagerServlet</servlet-name>
<servlet-class>com.dw.controll.CheckManagerServlet</servlet-class>
</servlet>
<servlet>
<!-- 啊,这里面ShowAllServlet的类名,服务名叫showAllStudentsServlet,所以在调用的时候用的就是showAllStudents? -->
<servlet-name>showAllStudentsServlet</servlet-name>
<servlet-class>com.dw.controll.ShowAllServlet</servlet-class>
</servlet>
<servlet>
<servlet-name>AddStudentServlet</servlet-name>
<servlet-class>com.dw.controll.AddServlet</servlet-class>
</servlet>
<servlet>
<servlet-name>DelStudentServlet</servlet-name>
<servlet-class>com.dw.controll.DeleteServlet</servlet-class>
</servlet>
<servlet>
<servlet-name>UpdateStudentServlet</servlet-name>
<servlet-class>com.dw.controll.UpdateServlet</servlet-class>
</servlet>
<servlet>
<servlet-name>PreServlet</servlet-name>
<servlet-class>com.dw.controll.PreServlet</servlet-class>
</servlet>
<servlet>
<servlet-name>LoginServlet</servlet-name>
<servlet-class>com.dw.controll.LoginServlet</servlet-class>
</servlet>
<servlet>
<servlet-name>SearchByIdServlet</servlet-name>
<servlet-class>com.dw.controll.SearchByIdServlet</servlet-class>
</servlet>
<!-- mapping映射 -->
<servlet-mapping>
<servlet-name>CheckManagerServlet</servlet-name>
<url-pattern>/login</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>showAllStudentsServlet</servlet-name>
<url-pattern>/showAllStudents</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>AddStudentServlet</servlet-name>
<url-pattern>/stadd</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>DelStudentServlet</servlet-name>
<url-pattern>/stdelete</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>UpdateStudentServlet</servlet-name>
<url-pattern>/stupdate</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>PreServlet</servlet-name>
<url-pattern>/pre</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>LoginServlet</servlet-name>
<url-pattern>/login</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>SearchByIdServlet</servlet-name>
<url-pattern>/searchById</url-pattern>
</servlet-mapping>
<!-- filter过滤器解决中文乱码 -->
<filter>
<filter-name>EncodingFilter</filter-name>
<filter-class>com.dw.filter.EncodingFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>EncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!--CheckLoginFilter用于解决安全登录 --><!--
<filter>
<filter-name>login</filter-name>
<filter-class>com.dw.filter.CheckFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>login</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
--></web-app>
查看到login.jsp页面之后打开。代码如下:
<%@ page language="java" contentType="text/html; charset=UTF-8" import="com.dw.model.*,java.net.*" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<%
if(request.getAttribute("user")==null){
String username=null;
String password=null;
Cookie[] cookies=request.getCookies();
for(int i=0;cookies!=null && i<cookies.length;i++){
if(cookies[i].getName().equals("user")){
username=URLDecoder.decode(cookies[i].getValue().split("-")[0],"UTF-8");
password=URLDecoder.decode(cookies[i].getValue().split("-")[1],"UTF-8");
}
if(username==null){
username="";
}
if(password==null){
password="";
}
pageContext.setAttribute("username", username);
pageContext.setAttribute("password", password);
}
}
%>
<title>登录页</title>
<!-- 注册js、css样式 -->
<script type="text/javascript" src="${pageContext.request.contextPath}/jquery/jquery-1.5.1.js"></script>
<script type="text/javascript" src="${pageContext.request.contextPath}/js/login.js"></script>
<link href="${pageContext.request.contextPath}/bootstrap/css/bootstrap.css" rel="stylesheet">
<link href="${pageContext.request.contextPath}/bootstrap/css/bootstrap-responsive.css" rel="stylesheet">
<script src="${pageContext.request.contextPath}/bootstrap/js/bootstrap.js"></script>
<!-- 前台页面,写验证码图片方法 -->
<script type="text/javascript">
function loadImage(){
document.getElementById("randImage").src = "${pageContext.request.contextPath}/image.jsp?"+Math.random(); //Math.random()方法非常重要,它使每次的请求都不同以便重新发送。如果每次的请求都一样,那么不会重新生成页面
}
</script>
<style type="text/css">
body {
padding-top: 40px;
padding-bottom: 40px;
background-color: #ffff9f;
}
body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,form,fieldset,input,p,blockquote,th,td
{
margin: 0;
padding: 0;
}
.form-signin {
max-width: 600px;
padding: 129px 29px 129px;
margin: 0 auto 20px;
background-color: #f90;
border: 1px solid #e5e5e5;
-webkit-border-radius: 5px;
-moz-border-radius: 5px;
border-radius: 5px;
-webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .05);
-moz-box-shadow: 0 1px 2px rgba(0, 0, 0, .05);
box-shadow: 0 1px 2px rgba(0, 0, 0, .05);
}
.form-signin .form-signin-heading,.form-signin .checkbox {
margin-bottom: 15px;
}
.form-signin input[type="text"],.form-signin input[type="password"] {
height: auto;
margin-bottom: 15px;
padding: 7px 9px;
}
h1 {
color: #fff;
background: #06b;
padding: 10px;
font-size: 200%;
text-align: center;
}
.labelError{line-height: 9px; font-size: 10pt; color: #f40000; border: 1px #ffb8b8 solid; padding: 8px 8px 8px 35px; background: url(/StudentManagerWeb/images/error.png) no-repeat; background-color: #fef2f2;}
</style>
</head>
<body>
<div>
<form class="form-signin" action="login" method="post" onSubmit="return check()">
<h2 class="form-signin-heading">管理员登录</h2>
<hr>
<table>
<tr>
<td ></td>
<td><font color="red">${error }</font></td>
<td></td>
</tr>
<tr>
<td align="right">用户名:</td>
<td><input type="text" name="username" id="username" class="input" value="${username} "></td>
<td><label class="labelError" id="usernameError"></label></td>
</tr>
<tr>
<td align="right">密码:</td>
<td><input type="password" name="password" id="password" class="input" value="${password }"></td>
<td><label class="labelError" id="passwordError"></label></td>
</tr>
<tr>
<td align="right">验证码:</td>
<td><input type="text" name="imageValue" size="50px" id="imageValue" class="input" value="${verifyCode }"></td>
<td><label class="labelError" id="imageValueError"></label></td>
</tr>
<tr>
<td ></td>
<td>
<img onClick="javascript:loadImage();" title="换一张试试" id="randImage"
src="${pageContext.request.contextPath}/image.jsp" width="100" height="2" border="1" align="middle"></td>
<td> </td>
</tr>
<tr>
<td ></td>
<td colspan="2"><label class="checkbox"><input id="remember" name="remember" type="checkbox" value="remember-me">记住我一周 </label></td>
<td></td>
</tr>
<tr>
<td ></td>
<td><button type="submit" class="btn btn-primary">登陆</button>
<input type="reset" class="btn btn-primary" value="重写"/>
</td>
<td></td>
</tr>
</table>
</form>
</div>
</body>
</html>
效果图:
<form class="form-signin" action="login" method="post" onSubmit="return check()">
大家应该注意到这段代码,当用户点击登录的时候,就action一个servlet方法,即login。method是指你servlet里的dopost还是doget方法调用。找到该函数后又根据指定的跳转界面语言,控制页面的转换和数据的交互。